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