Home | History | Annotate | Line # | Download | only in include
      1 /*       $NetBSD: asm.h,v 1.22 2015/10/17 19:29:48 nakayama Exp $        */
      2 
      3 #include <sparc/asm.h>
      4 
      5 /*
      6  * Here are some defines to try to maintain consistency but still
      7  * support 32-and 64-bit compilers.
      8  */
      9 #ifdef _LP64
     10 /* reg that points to base of data/text segment */
     11 #define	BASEREG	%g4
     12 /* first constants for storage allocation */
     13 #define LNGSZ		8
     14 #define LNGSHFT		3
     15 #define PTRSZ		8
     16 #define PTRSHFT		3
     17 #define POINTER		.xword
     18 #define ULONG		.xword
     19 /* Now instructions to load/store pointers & long ints */
     20 #define LDLNG		ldx
     21 #define LDULNG		ldx
     22 #define STLNG		stx
     23 #define STULNG		stx
     24 #define LDPTR		ldx
     25 #define LDPTRA		ldxa
     26 #define STPTR		stx
     27 #define STPTRA		stxa
     28 #define	CASPTR		casx
     29 #define	CASPTRA		casxa
     30 /* Now something to calculate the stack bias */
     31 #define STKB		BIAS
     32 #define	CCCR		%xcc
     33 #else
     34 #define	BASEREG		%g0
     35 #define LNGSZ		4
     36 #define LNGSHFT		2
     37 #define PTRSZ		4
     38 #define PTRSHFT		2
     39 #define POINTER		.word
     40 #define ULONG		.word
     41 /* Instructions to load/store pointers & long ints */
     42 #define LDLNG		ldsw
     43 #define LDULNG		lduw
     44 #define STLNG		stw
     45 #define STULNG		stw
     46 #define LDPTR		lduw
     47 #define LDPTRA		lduwa
     48 #define STPTR		stw
     49 #define STPTRA		stwa
     50 #define	CASPTR		cas
     51 #define	CASPTRA		casa
     52 #define STKB		0
     53 #define	CCCR		%icc
     54 #endif
     55 
     56 #if defined(_KERNEL) || defined(_RUMPKERNEL)
     57 /* Give this real authority: reset the machine */
     58 #define NOTREACHED	sir
     59 #else
     60 #define NOTREACHED
     61 #endif
     62 
     63 /* if < 32, copy by bytes, memcpy, kcopy, ... */
     64 #define	BCOPY_SMALL	32
     65 
     66 /* use as needed to align things on longword boundaries */
     67 #define	_ALIGN	.align 8
     68 #define ICACHE_ALIGN	.align	32
     69 
     70 /*
     71  * Combine 2 regs -- used to convert 64-bit ILP32
     72  * values to LP64.
     73  */
     74 #define	COMBINE(r1, r2, d)	\
     75 	clruw	r2;		\
     76 	sllx	r1, 32, d;	\
     77 	or	d, r2, d
     78 
     79 /*
     80  * Split 64-bit value in 1 reg into high and low halves.
     81  * Used for ILP32 return values.
     82  */
     83 #define	SPLIT(s, r0, r1)	\
     84 	srl	s, 0, r1;	\
     85 	srlx	s, 32, r0
     86 
     87 #define	SPLIT_RETL(s, r0, r1)	\
     88 	srl	s, 0, r1;	\
     89 	retl;			\
     90 	 srlx	s, 32, r0
     91