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