xref: /onnv-gate/usr/src/uts/sparc/asm/cpu.h (revision 9171:ee979187414d)
1*9171Sxiuyan.wang@Sun.COM /*
2*9171Sxiuyan.wang@Sun.COM  * CDDL HEADER START
3*9171Sxiuyan.wang@Sun.COM  *
4*9171Sxiuyan.wang@Sun.COM  * The contents of this file are subject to the terms of the
5*9171Sxiuyan.wang@Sun.COM  * Common Development and Distribution License (the "License").
6*9171Sxiuyan.wang@Sun.COM  * You may not use this file except in compliance with the License.
7*9171Sxiuyan.wang@Sun.COM  *
8*9171Sxiuyan.wang@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9171Sxiuyan.wang@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9171Sxiuyan.wang@Sun.COM  * See the License for the specific language governing permissions
11*9171Sxiuyan.wang@Sun.COM  * and limitations under the License.
12*9171Sxiuyan.wang@Sun.COM  *
13*9171Sxiuyan.wang@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9171Sxiuyan.wang@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9171Sxiuyan.wang@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9171Sxiuyan.wang@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9171Sxiuyan.wang@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9171Sxiuyan.wang@Sun.COM  *
19*9171Sxiuyan.wang@Sun.COM  * CDDL HEADER END
20*9171Sxiuyan.wang@Sun.COM  */
21*9171Sxiuyan.wang@Sun.COM 
22*9171Sxiuyan.wang@Sun.COM /*
23*9171Sxiuyan.wang@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*9171Sxiuyan.wang@Sun.COM  * Use is subject to license terms.
25*9171Sxiuyan.wang@Sun.COM  */
26*9171Sxiuyan.wang@Sun.COM 
27*9171Sxiuyan.wang@Sun.COM #ifndef _ASM_CPU_H
28*9171Sxiuyan.wang@Sun.COM #define	_ASM_CPU_H
29*9171Sxiuyan.wang@Sun.COM 
30*9171Sxiuyan.wang@Sun.COM #include <sys/types.h>
31*9171Sxiuyan.wang@Sun.COM 
32*9171Sxiuyan.wang@Sun.COM #ifdef	__cplusplus
33*9171Sxiuyan.wang@Sun.COM extern "C" {
34*9171Sxiuyan.wang@Sun.COM #endif
35*9171Sxiuyan.wang@Sun.COM 
36*9171Sxiuyan.wang@Sun.COM #if !defined(__lint) && defined(__GNUC__)
37*9171Sxiuyan.wang@Sun.COM 
38*9171Sxiuyan.wang@Sun.COM extern __inline__ void
prefetch_read_many(void * addr)39*9171Sxiuyan.wang@Sun.COM prefetch_read_many(void *addr)
40*9171Sxiuyan.wang@Sun.COM {
41*9171Sxiuyan.wang@Sun.COM #if defined(__sparcv9)
42*9171Sxiuyan.wang@Sun.COM 	__asm__ __volatile__(
43*9171Sxiuyan.wang@Sun.COM 	    "prefetch	[%0],#n_reads\n\t"
44*9171Sxiuyan.wang@Sun.COM 	    : "=r" (addr)
45*9171Sxiuyan.wang@Sun.COM 	    : "0" (addr));
46*9171Sxiuyan.wang@Sun.COM #else
47*9171Sxiuyan.wang@Sun.COM #error	"port me"
48*9171Sxiuyan.wang@Sun.COM #endif
49*9171Sxiuyan.wang@Sun.COM }
50*9171Sxiuyan.wang@Sun.COM 
51*9171Sxiuyan.wang@Sun.COM extern __inline__ void
prefetch_read_once(void * addr)52*9171Sxiuyan.wang@Sun.COM prefetch_read_once(void *addr)
53*9171Sxiuyan.wang@Sun.COM {
54*9171Sxiuyan.wang@Sun.COM #if defined(__sparcv9)
55*9171Sxiuyan.wang@Sun.COM 	__asm__ __volatile__(
56*9171Sxiuyan.wang@Sun.COM 	    "prefetch	[%0],#one_read\n\t"
57*9171Sxiuyan.wang@Sun.COM 	    : "=r" (addr)
58*9171Sxiuyan.wang@Sun.COM 	    : "0" (addr));
59*9171Sxiuyan.wang@Sun.COM #else
60*9171Sxiuyan.wang@Sun.COM #error	"port me"
61*9171Sxiuyan.wang@Sun.COM #endif
62*9171Sxiuyan.wang@Sun.COM }
63*9171Sxiuyan.wang@Sun.COM 
64*9171Sxiuyan.wang@Sun.COM extern __inline__ void
prefetch_write_many(void * addr)65*9171Sxiuyan.wang@Sun.COM prefetch_write_many(void *addr)
66*9171Sxiuyan.wang@Sun.COM {
67*9171Sxiuyan.wang@Sun.COM #if defined(__sparcv9)
68*9171Sxiuyan.wang@Sun.COM 	__asm__ __volatile__(
69*9171Sxiuyan.wang@Sun.COM 	    "prefetch	[%0],#n_writes\n\t"
70*9171Sxiuyan.wang@Sun.COM 	    : "=r" (addr)
71*9171Sxiuyan.wang@Sun.COM 	    : "0" (addr));
72*9171Sxiuyan.wang@Sun.COM #else
73*9171Sxiuyan.wang@Sun.COM #error	"port me"
74*9171Sxiuyan.wang@Sun.COM #endif
75*9171Sxiuyan.wang@Sun.COM }
76*9171Sxiuyan.wang@Sun.COM 
77*9171Sxiuyan.wang@Sun.COM extern __inline__ void
prefetch_write_once(void * addr)78*9171Sxiuyan.wang@Sun.COM prefetch_write_once(void *addr)
79*9171Sxiuyan.wang@Sun.COM {
80*9171Sxiuyan.wang@Sun.COM #if defined(__sparcv9)
81*9171Sxiuyan.wang@Sun.COM 	__asm__ __volatile__(
82*9171Sxiuyan.wang@Sun.COM 	    "prefetch	[%0],#one_write\n\t"
83*9171Sxiuyan.wang@Sun.COM 	    : "=r" (addr)
84*9171Sxiuyan.wang@Sun.COM 	    : "0" (addr));
85*9171Sxiuyan.wang@Sun.COM #else
86*9171Sxiuyan.wang@Sun.COM #error	"port me"
87*9171Sxiuyan.wang@Sun.COM #endif
88*9171Sxiuyan.wang@Sun.COM }
89*9171Sxiuyan.wang@Sun.COM 
90*9171Sxiuyan.wang@Sun.COM #endif	/* !__lint && __GNUC__ */
91*9171Sxiuyan.wang@Sun.COM 
92*9171Sxiuyan.wang@Sun.COM #ifdef	__cplusplus
93*9171Sxiuyan.wang@Sun.COM }
94*9171Sxiuyan.wang@Sun.COM #endif
95*9171Sxiuyan.wang@Sun.COM 
96*9171Sxiuyan.wang@Sun.COM #endif	/* _ASM_CPU_H */
97