1*4724848cSchristos#include "arm_arch.h" 2*4724848cSchristos 3*4724848cSchristos.text 4*4724848cSchristos.arch armv8-a+crypto 5*4724848cSchristos 6*4724848cSchristos.align 5 7*4724848cSchristos.globl _armv7_neon_probe 8*4724848cSchristos.type _armv7_neon_probe,%function 9*4724848cSchristos_armv7_neon_probe: 10*4724848cSchristos orr v15.16b, v15.16b, v15.16b 11*4724848cSchristos ret 12*4724848cSchristos.size _armv7_neon_probe,.-_armv7_neon_probe 13*4724848cSchristos 14*4724848cSchristos.globl _armv7_tick 15*4724848cSchristos.type _armv7_tick,%function 16*4724848cSchristos_armv7_tick: 17*4724848cSchristos#ifdef __APPLE__ 18*4724848cSchristos mrs x0, CNTPCT_EL0 19*4724848cSchristos#else 20*4724848cSchristos mrs x0, CNTVCT_EL0 21*4724848cSchristos#endif 22*4724848cSchristos ret 23*4724848cSchristos.size _armv7_tick,.-_armv7_tick 24*4724848cSchristos 25*4724848cSchristos.globl _armv8_aes_probe 26*4724848cSchristos.type _armv8_aes_probe,%function 27*4724848cSchristos_armv8_aes_probe: 28*4724848cSchristos aese v0.16b, v0.16b 29*4724848cSchristos ret 30*4724848cSchristos.size _armv8_aes_probe,.-_armv8_aes_probe 31*4724848cSchristos 32*4724848cSchristos.globl _armv8_sha1_probe 33*4724848cSchristos.type _armv8_sha1_probe,%function 34*4724848cSchristos_armv8_sha1_probe: 35*4724848cSchristos sha1h s0, s0 36*4724848cSchristos ret 37*4724848cSchristos.size _armv8_sha1_probe,.-_armv8_sha1_probe 38*4724848cSchristos 39*4724848cSchristos.globl _armv8_sha256_probe 40*4724848cSchristos.type _armv8_sha256_probe,%function 41*4724848cSchristos_armv8_sha256_probe: 42*4724848cSchristos sha256su0 v0.4s, v0.4s 43*4724848cSchristos ret 44*4724848cSchristos.size _armv8_sha256_probe,.-_armv8_sha256_probe 45*4724848cSchristos 46*4724848cSchristos.globl _armv8_pmull_probe 47*4724848cSchristos.type _armv8_pmull_probe,%function 48*4724848cSchristos_armv8_pmull_probe: 49*4724848cSchristos pmull v0.1q, v0.1d, v0.1d 50*4724848cSchristos ret 51*4724848cSchristos.size _armv8_pmull_probe,.-_armv8_pmull_probe 52*4724848cSchristos 53*4724848cSchristos.globl _armv8_sha512_probe 54*4724848cSchristos.type _armv8_sha512_probe,%function 55*4724848cSchristos_armv8_sha512_probe: 56*4724848cSchristos.long 0xcec08000 // sha512su0 v0.2d,v0.2d 57*4724848cSchristos ret 58*4724848cSchristos.size _armv8_sha512_probe,.-_armv8_sha512_probe 59*4724848cSchristos 60*4724848cSchristos.globl OPENSSL_cleanse 61*4724848cSchristos.type OPENSSL_cleanse,%function 62*4724848cSchristos.align 5 63*4724848cSchristosOPENSSL_cleanse: 64*4724848cSchristos cbz x1,.Lret // len==0? 65*4724848cSchristos cmp x1,#15 66*4724848cSchristos b.hi .Lot // len>15 67*4724848cSchristos nop 68*4724848cSchristos.Little: 69*4724848cSchristos strb wzr,[x0],#1 // store byte-by-byte 70*4724848cSchristos subs x1,x1,#1 71*4724848cSchristos b.ne .Little 72*4724848cSchristos.Lret: ret 73*4724848cSchristos 74*4724848cSchristos.align 4 75*4724848cSchristos.Lot: tst x0,#7 76*4724848cSchristos b.eq .Laligned // inp is aligned 77*4724848cSchristos strb wzr,[x0],#1 // store byte-by-byte 78*4724848cSchristos sub x1,x1,#1 79*4724848cSchristos b .Lot 80*4724848cSchristos 81*4724848cSchristos.align 4 82*4724848cSchristos.Laligned: 83*4724848cSchristos str xzr,[x0],#8 // store word-by-word 84*4724848cSchristos sub x1,x1,#8 85*4724848cSchristos tst x1,#-8 86*4724848cSchristos b.ne .Laligned // len>=8 87*4724848cSchristos cbnz x1,.Little // len!=0? 88*4724848cSchristos ret 89*4724848cSchristos.size OPENSSL_cleanse,.-OPENSSL_cleanse 90*4724848cSchristos 91*4724848cSchristos.globl CRYPTO_memcmp 92*4724848cSchristos.type CRYPTO_memcmp,%function 93*4724848cSchristos.align 4 94*4724848cSchristosCRYPTO_memcmp: 95*4724848cSchristos eor w3,w3,w3 96*4724848cSchristos cbz x2,.Lno_data // len==0? 97*4724848cSchristos cmp x2,#16 98*4724848cSchristos b.ne .Loop_cmp 99*4724848cSchristos ldp x8,x9,[x0] 100*4724848cSchristos ldp x10,x11,[x1] 101*4724848cSchristos eor x8,x8,x10 102*4724848cSchristos eor x9,x9,x11 103*4724848cSchristos orr x8,x8,x9 104*4724848cSchristos mov x0,#1 105*4724848cSchristos cmp x8,#0 106*4724848cSchristos csel x0,xzr,x0,eq 107*4724848cSchristos ret 108*4724848cSchristos 109*4724848cSchristos.align 4 110*4724848cSchristos.Loop_cmp: 111*4724848cSchristos ldrb w4,[x0],#1 112*4724848cSchristos ldrb w5,[x1],#1 113*4724848cSchristos eor w4,w4,w5 114*4724848cSchristos orr w3,w3,w4 115*4724848cSchristos subs x2,x2,#1 116*4724848cSchristos b.ne .Loop_cmp 117*4724848cSchristos 118*4724848cSchristos.Lno_data: 119*4724848cSchristos neg w0,w3 120*4724848cSchristos lsr w0,w0,#31 121*4724848cSchristos ret 122*4724848cSchristos.size CRYPTO_memcmp,.-CRYPTO_memcmp 123