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