xref: /netbsd-src/sys/arch/sparc64/include/locore.h (revision bbde328be4e75ea9ad02e9715ea13ca54b797ada)
1 /*	$NetBSD: locore.h,v 1.3 2010/03/07 01:52:44 mrg Exp $	*/
2 
3 /*
4  * Copyright (c) 1996-2002 Eduardo Horvath
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR  ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR  BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  *
25  */
26 
27 #undef	CURLWP
28 #undef	CPCB
29 #undef	FPLWP
30 
31 #define	CURLWP	(CPUINFO_VA + CI_CURLWP)
32 #define	CPCB	(CPUINFO_VA + CI_CPCB)
33 #define	FPLWP	(CPUINFO_VA + CI_FPLWP)
34 
35 /*
36  * Here are some defines to try to maintain consistency but still
37  * support 32-and 64-bit compilers.
38  */
39 #ifdef _LP64
40 /* reg that points to base of data/text segment */
41 #define	BASEREG	%g4
42 /* first constants for storage allocation */
43 #define LNGSZ		8
44 #define LNGSHFT		3
45 #define PTRSZ		8
46 #define PTRSHFT		3
47 #define POINTER		.xword
48 #define ULONG		.xword
49 /* Now instructions to load/store pointers & long ints */
50 #define LDLNG		ldx
51 #define LDULNG		ldx
52 #define STLNG		stx
53 #define STULNG		stx
54 #define LDPTR		ldx
55 #define LDPTRA		ldxa
56 #define STPTR		stx
57 #define STPTRA		stxa
58 #define	CASPTR		casxa
59 /* Now something to calculate the stack bias */
60 #define STKB		BIAS
61 #define	CCCR		%xcc
62 #else
63 #define	BASEREG		%g0
64 #define LNGSZ		4
65 #define LNGSHFT		2
66 #define PTRSZ		4
67 #define PTRSHFT		2
68 #define POINTER		.word
69 #define ULONG		.word
70 /* Instructions to load/store pointers & long ints */
71 #define LDLNG		ldsw
72 #define LDULNG		lduw
73 #define STLNG		stw
74 #define STULNG		stw
75 #define LDPTR		lduw
76 #define LDPTRA		lduwa
77 #define STPTR		stw
78 #define STPTRA		stwa
79 #define	CASPTR		casa
80 #define STKB		0
81 #define	CCCR		%icc
82 #endif
83 
84 /* Give this real authority: reset the machine */
85 #define NOTREACHED	sir
86 
87 /* if < 32, copy by bytes, memcpy, kcopy, ... */
88 #define	BCOPY_SMALL	32
89 
90 /* use as needed to align things on longword boundaries */
91 #define	_ALIGN	.align 8
92 #define ICACHE_ALIGN	.align	32
93