1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(__SUNPRO_C) && defined(__sparcv9) 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define ABI64 /* They've said -xarch=v9 at command line */ 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(__GNUC__) && defined(__arch64__) 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define ABI64 /* They've said -m64 at command line */ 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef ABI64 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .register %g2,#scratch 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .register %g3,#scratch 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define FRAME -192 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define BIAS 2047 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define FRAME -96 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define BIAS 0 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 32 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global OPENSSL_wipe_cpu 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type OPENSSL_wipe_cpu,#function 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! Keep in mind that this does not excuse us from wiping the stack! 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! This routine wipes registers, but not the backing store [which 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! resides on the stack, toward lower addresses]. To facilitate for 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! stack wiping I return pointer to the top of stack of the *caller*. 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_wipe_cpu: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project save %sp,FRAME,%sp 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef __sun 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/trap.h> 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ta ST_CLEAN_WINDOWS 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project call .walk.reg.wins 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project call .PIC.zero.up 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov .zero-(.-4),%o0 37221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ld [%o0],%f0 38221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ld [%o0],%f1 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subcc %g0,1,%o0 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! Following is V9 "rd %ccr,%o0" instruction. However! V8 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! specification says that it ("rd %asr2,%o0" in V8 terms) does 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! not cause illegal_instruction trap. It therefore can be used 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! to determine if the CPU the code is executing on is V8- or 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! V9-compliant, as V9 returns a distinct value of 0x99, 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! "negative" and "borrow" bits set in both %icc and %xcc. 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x91408000 !rd %ccr,%o0 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %o0,0x99 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .v8 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! Even though we do not use %fp register bank, 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ! we wipe it as memcpy might have used it... 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xbfa00040 !fmovd %f0,%f62 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xbba00040 !... 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xb7a00040 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xb3a00040 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xafa00040 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xaba00040 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xa7a00040 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xa3a00040 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x9fa00040 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x9ba00040 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x97a00040 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x93a00040 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x8fa00040 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x8ba00040 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x87a00040 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x83a00040 !fmovd %f0,%f32 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.v8: fmovs %f1,%f31 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o0 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f30 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o1 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f29 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o2 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f28 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o3 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f27 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o4 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f26 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o5 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f25 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o7 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f24 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l0 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f23 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l1 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f22 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l2 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f21 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l3 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f20 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l4 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f19 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l5 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f18 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l6 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f17 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l7 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f16 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %i0 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f15 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %i1 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f14 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %i2 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f13 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %i3 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f12 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %i4 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f11 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %i5 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f10 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %g1 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f9 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %g2 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f8 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %g3 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f7 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %g4 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f6 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %g5 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f5 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f4 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f1,%f3 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fmovs %f0,%f2 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1261762a559ef393f9c15300398433598989033385fDavid 'Digit' Turner add %fp,BIAS,%i0 ! return pointer to caller´s top of stack 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project restore 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.zero: .long 0x0,0x0 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.PIC.zero.up: 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project retl 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add %o0,%o7,%o0 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef DEBUG 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global walk_reg_wins 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type walk_reg_wins,#function 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectwalk_reg_wins: 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.walk.reg.wins: 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project save %sp,FRAME,%sp 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %i7,%o7 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project be 2f 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o0 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %o7,0 ! compiler never cleans %o7... 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project be 1f ! could have been a leaf function... 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o1 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project call .walk.reg.wins 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project1: clr %o2 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o3 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o4 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o5 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %o7 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l0 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l1 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l2 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l3 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l4 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l5 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l6 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project clr %l7 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add %o0,1,%i0 ! used for debugging 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project2: ret 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project restore 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global OPENSSL_atomic_add 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type OPENSSL_atomic_add,#function 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 32 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_atomic_add: 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef ABI64 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subcc %g0,1,%o2 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x95408000 !rd %ccr,%o2, see comment above 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %o2,0x99 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project be .v9 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project save %sp,FRAME,%sp 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ba .enter 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef __sun 1823d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom! Note that you do not have to link with libthread to call thr_yield, 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! as libc provides a stub, which is overloaded the moment you link 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! with *either* libpthread or libthread... 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define YIELD_CPU thr_yield 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project! applies at least to Linux and FreeBSD... Feedback expected... 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define YIELD_CPU sched_yield 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.spin: call YIELD_CPU 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.enter: ld [%i0],%i2 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %i2,-4096 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project be .spin 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov -1,%i2 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project swap [%i0],%i2 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %i2,-1 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project be .spin 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add %i2,%i1,%i2 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stbar 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project st %i2,[%i0] 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sra %i2,%g0,%i0 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project restore 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.v9: 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ld [%o0],%o2 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project1: add %o1,%o2,%o3 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0xd7e2100a !cas [%o0],%o2,%o3, compare [%o0] with %o2 and swap %o3 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %o2,%o3 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne 1b 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov %o3,%o2 ! cas is always fetching to dest. register 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add %o1,%o2,%o0 ! OpenSSL expects the new value 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project retl 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sra %o0,%g0,%o0 ! we return signed int, remember? 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.global _sparcv9_rdtick 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 32 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom_sparcv9_rdtick: 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subcc %g0,1,%o0 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .word 0x91408000 !rd %ccr,%o0 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp %o0,0x99 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .notick 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project xor %o0,%o0,%o0 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .word 0x91410000 !rd %tick,%o0 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom retl 22843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x93323020 !srlx %o0,32,%o1 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.notick: 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom retl 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor %o1,%o1,%o1 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type _sparcv9_rdtick,#function 233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size _sparcv9_rdtick,.-_sparcv9_rdtick 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 23543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.global _sparcv9_vis1_probe 23643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.align 8 23743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom_sparcv9_vis1_probe: 23843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom add %sp,BIAS+2,%o1 23943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0xc19a5a40 !ldda [%o1]ASI_FP16_P,%f0 240eeffacea337ec6a275e4c496acd12ca67a244533Brian Carlstrom retl 241eeffacea337ec6a275e4c496acd12ca67a244533Brian Carlstrom .word 0x81b00d80 !fxor %f0,%f0,%f0 24243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.type _sparcv9_vis1_probe,#function 24343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.size _sparcv9_vis1_probe,.-_sparcv9_vis1_probe 24443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 24543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! Probe and instrument VIS1 instruction. Output is number of cycles it 24643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! takes to execute rdtick and pair of VIS1 instructions. US-Tx VIS unit 24743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! is slow (documented to be 6 cycles on T2) and the core is in-order 24843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! single-issue, it should be possible to distinguish Tx reliably... 24943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! Observed return values are: 25043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! 25143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! UltraSPARC IIe 7 25243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! UltraSPARC III 7 25343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! UltraSPARC T1 24 25443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! 25543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! Numbers for T2 and SPARC64 V-VII are more than welcomed. 25643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! 25743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! It would be possible to detect specifically US-T1 by instrumenting 25843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! fmul8ulx16, which is emulated on T1 and as such accounts for quite 25943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom! a lot of %tick-s, couple of thousand on Linux... 26043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.global _sparcv9_vis1_instrument 26143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.align 8 26243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom_sparcv9_vis1_instrument: 26343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x91410000 !rd %tick,%o0 26443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b00d80 !fxor %f0,%f0,%f0 26543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x85b08d82 !fxor %f2,%f2,%f2 26643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x93410000 !rd %tick,%o1 26743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b00d80 !fxor %f0,%f0,%f0 26843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x85b08d82 !fxor %f2,%f2,%f2 26943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x95410000 !rd %tick,%o2 27043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b00d80 !fxor %f0,%f0,%f0 27143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x85b08d82 !fxor %f2,%f2,%f2 27243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x97410000 !rd %tick,%o3 27343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b00d80 !fxor %f0,%f0,%f0 27443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x85b08d82 !fxor %f2,%f2,%f2 27543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x99410000 !rd %tick,%o4 27643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 27743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ! calculate intervals 27843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom sub %o1,%o0,%o0 27943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom sub %o2,%o1,%o1 28043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom sub %o3,%o2,%o2 28143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom sub %o4,%o3,%o3 28243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 28343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ! find minumum value 28443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom cmp %o0,%o1 28543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x38680002 !bgu,a %xcc,.+8 28643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov %o1,%o0 28743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom cmp %o0,%o2 28843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x38680002 !bgu,a %xcc,.+8 28943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov %o2,%o0 29043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom cmp %o0,%o3 29143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x38680002 !bgu,a %xcc,.+8 29243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov %o3,%o0 29343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 29443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom retl 29543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom nop 29643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.type _sparcv9_vis1_instrument,#function 29743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.size _sparcv9_vis1_instrument,.-_sparcv9_vis1_instrument 29843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 29943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.global _sparcv9_vis2_probe 30043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.align 8 30143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom_sparcv9_vis2_probe: 30243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom retl 30343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b00980 !bshuffle %f0,%f0,%f0 30443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.type _sparcv9_vis2_probe,#function 30543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.size _sparcv9_vis2_probe,.-_sparcv9_vis2_probe 30643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 30743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.global _sparcv9_fmadd_probe 30843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.align 8 30943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom_sparcv9_fmadd_probe: 31043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b00d80 !fxor %f0,%f0,%f0 31143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x85b08d82 !fxor %f2,%f2,%f2 31243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom retl 31343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom .word 0x81b80440 !fmaddd %f0,%f0,%f2,%f0 31443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.type _sparcv9_fmadd_probe,#function 31543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.size _sparcv9_fmadd_probe,.-_sparcv9_fmadd_probe 31643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 317221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.global OPENSSL_cleanse 318221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 32 319221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_cleanse: 320221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %o1,14 321221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 322221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifdef ABI64 323221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bgu %xcc,.Lot 324221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#else 325221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bgu .Lot 326221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 327221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %o1,0 328221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .Little 329221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 330221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom retl 331221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 332221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 333221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Little: 334221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stb %g0,[%o0] 335221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom subcc %o1,1,%o1 336221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bnz .Little 337221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add %o0,1,%o0 338221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom retl 339221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 340221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 32 341221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lot: 342221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef ABI64 343221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom subcc %g0,1,%g1 344221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ! see above for explanation 345221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .word 0x83408000 !rd %ccr,%g1 346221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %g1,0x99 347221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .v8lot 348221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 349221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 350221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 351221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.v9lot: andcc %o0,7,%g0 352221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bz .v9aligned 353221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 354221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stb %g0,[%o0] 355221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub %o1,1,%o1 356221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ba .v9lot 357221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add %o0,1,%o0 358221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16,0x01000000 359221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.v9aligned: 360221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .word 0xc0720000 !stx %g0,[%o0] 361221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub %o1,8,%o1 362221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom andcc %o1,-8,%g0 363221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifdef ABI64 364221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .word 0x126ffffd !bnz %xcc,.v9aligned 365221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#else 366221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .word 0x124ffffd !bnz %icc,.v9aligned 367221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 368221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add %o0,8,%o0 369221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 370221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %o1,0 371221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .Little 372221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project retl 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 375221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef ABI64 376221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.v8lot: andcc %o0,3,%g0 377221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bz .v8aligned 378221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 379221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stb %g0,[%o0] 380221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub %o1,1,%o1 381221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ba .v8lot 382221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add %o0,1,%o0 383221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 384221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.v8aligned: 385221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom st %g0,[%o0] 386221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub %o1,4,%o1 387221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom andcc %o1,-4,%g0 388221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bnz .v8aligned 389221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add %o0,4,%o0 390221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 391221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %o1,0 392221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .Little 393221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 394221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom retl 395221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 396221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 397221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_cleanse,#function 398221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_cleanse,.-OPENSSL_cleanse 399221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 400221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.section ".init",#alloc,#execinstr 401221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom call OPENSSL_cpuid_setup 402221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nop 403