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