ia64cpuid.S revision 221304ee937bc0910948a8be1320cb8cc4eb6d36
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Works on all IA-64 platforms: Linux, HP-UX, Win64i... 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// On Win64i compile with ias.exe. 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text 4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.global OPENSSL_cpuid_setup# 6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.proc OPENSSL_cpuid_setup# 7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_cpuid_setup: 8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; br.ret.sptk.many b0 };; 9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.endp OPENSSL_cpuid_setup# 10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global OPENSSL_rdtsc# 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.proc OPENSSL_rdtsc# 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_rdtsc: 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mib; mov r8=ar.itc 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project br.ret.sptk.many b0 };; 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.endp OPENSSL_rdtsc# 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global OPENSSL_atomic_add# 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.proc OPENSSL_atomic_add# 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 32 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_atomic_add: 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mii; ld4 r2=[r32] 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop.i 0 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop.i 0 };; 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lspin: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mii; mov ar.ccv=r2 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add r8=r2,r33 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r3=r2 };; 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mmi; mf 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmpxchg4.acq r2=[r32],r8,ar.ccv 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop.i 0 };; 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mib; cmp.ne p6,p0=r2,r3 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop.i 0 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project(p6) br.dpnt .Lspin };; 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mib; nop.m 0 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sxt4 r8=r8 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project br.ret.sptk.many b0 };; 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.endp OPENSSL_atomic_add# 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Returns a structure comprising pointer to the top of stack of 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// the caller and pointer beyond backing storage for the current 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// register frame. The latter is required, because it might be 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// insufficient to wipe backing storage for the current frame 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// (as this procedure does), one might have to go further, toward 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// higher addresses to reach for whole "retroactively" saved 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// context... 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global OPENSSL_wipe_cpu# 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.proc OPENSSL_wipe_cpu# 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 32 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_wipe_cpu: 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .prologue 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .fframe 0 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .save ar.pfs,r2 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .save ar.lc,r3 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mib; alloc r2=ar.pfs,0,96,0,96 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r3=ar.lc 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project brp.loop.imp .L_wipe_top,.L_wipe_end-16 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project };; 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mii; mov r9=ar.bsp 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r8=pr 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov ar.lc=96 };; 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .body 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mii; add r9=96*8-8,r9 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov ar.ec=1 };; 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// One can sweep double as fast, but then we can't quarantee 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// that backing storage is wiped... 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L_wipe_top: 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; st8 [r9]=r0,-8 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f127=f0 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r127=r0 } 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfb; nop.m 0 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop.f 0 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project br.ctop.sptk .L_wipe_top };; 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L_wipe_end: 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r11=r0 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f6=f0 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r14=r0 } 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r15=r0 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f7=f0 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r16=r0 } 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r17=r0 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f8=f0 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r18=r0 } 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r19=r0 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f9=f0 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r20=r0 } 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r21=r0 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f10=f0 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r22=r0 } 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r23=r0 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f11=f0 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r24=r0 } 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r25=r0 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f12=f0 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r26=r0 } 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r27=r0 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f13=f0 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r28=r0 } 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r29=r0 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f14=f0 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r30=r0 } 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov r31=r0 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f15=f0 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop.i 0 } 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f16=f0 } 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f17=f0 } 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f18=f0 } 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f19=f0 } 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f20=f0 } 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f21=f0 } 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f22=f0 } 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f23=f0 } 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f24=f0 } 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f25=f0 } 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f26=f0 } 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f27=f0 } 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f28=f0 } 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f29=f0 } 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; mov f30=f0 } 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mfi; add r9=96*8+8,r9 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov f31=f0 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov pr=r8,0x1ffff } 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ .mib; mov r8=sp 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov ar.lc=r3 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project br.ret.sptk b0 };; 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.endp OPENSSL_wipe_cpu# 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.global OPENSSL_cleanse# 131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.proc OPENSSL_cleanse# 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_cleanse: 133221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; cmp.eq p6,p0=0,r33 // len==0 134221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#if defined(_HPUX_SOURCE) && !defined(_LP64) 135221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom addp4 r32=0,r32 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 137221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p6) br.ret.spnt b0 };; 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; and r2=7,r32 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp.leu p6,p0=15,r33 // len>=15 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p6) br.cond.dptk .Lot };; 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Little: 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; st1 [r32]=r0,1 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp.ltu p6,p7=1,r33 } // len>1 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mbb; add r33=-1,r33 // len-- 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p6) br.cond.dptk .Little 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p7) br.ret.sptk.many b0 };; 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lot: 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; cmp.eq p6,p0=0,r2 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p6) br.cond.dptk .Laligned };; 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mmi; st1 [r32]=r0,1;; 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and r2=7,r32 } 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; add r33=-1,r33 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br .Lot };; 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Laligned: 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mmi; st8 [r32]=r0,8 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and r2=-8,r33 // len&~7 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add r33=-8,r33 };; // len-=8 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mib; cmp.ltu p6,p0=8,r2 // ((len+8)&~7)>8 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p6) br.cond.dptk .Laligned };; 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ .mbb; cmp.eq p6,p7=r0,r33 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p7) br.cond.dpnt .Little 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom(p6) br.ret.sptk.many b0 };; 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.endp OPENSSL_cleanse# 168