1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "arm_arch.h" 2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.text 4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.code 32 5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 5 7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global _armv7_neon_probe 8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type _armv7_neon_probe,%function 9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom_armv7_neon_probe: 103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xf0,0x01,0x60,0xf2 @ vorr q8,q8,q8 113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x1e,0xff,0x2f,0xe1 @ bx lr 12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size _armv7_neon_probe,.-_armv7_neon_probe 13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global _armv7_tick 15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type _armv7_tick,%function 16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom_armv7_tick: 173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root mrrc p15,1,r0,r1,c14 @ CNTVCT 183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=5 193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root bx lr 203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else 213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .word 0xe12fff1e @ bx lr 223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif 23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size _armv7_tick,.-_armv7_tick 24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.global _armv8_aes_probe 263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type _armv8_aes_probe,%function 273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root_armv8_aes_probe: 283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x00,0x03,0xb0,0xf3 @ aese.8 q0,q0 293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x1e,0xff,0x2f,0xe1 @ bx lr 303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size _armv8_aes_probe,.-_armv8_aes_probe 313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root 323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.global _armv8_sha1_probe 333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type _armv8_sha1_probe,%function 343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root_armv8_sha1_probe: 353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x40,0x0c,0x00,0xf2 @ sha1c.32 q0,q0,q0 363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x1e,0xff,0x2f,0xe1 @ bx lr 373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size _armv8_sha1_probe,.-_armv8_sha1_probe 383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root 393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.global _armv8_sha256_probe 403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type _armv8_sha256_probe,%function 413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root_armv8_sha256_probe: 423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x40,0x0c,0x00,0xf3 @ sha256h.32 q0,q0,q0 433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x1e,0xff,0x2f,0xe1 @ bx lr 443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size _armv8_sha256_probe,.-_armv8_sha256_probe 453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.global _armv8_pmull_probe 463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type _armv8_pmull_probe,%function 473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root_armv8_pmull_probe: 483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x00,0x0e,0xa0,0xf2 @ vmull.p64 q0,d0,d0 493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x1e,0xff,0x2f,0xe1 @ bx lr 503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size _armv8_pmull_probe,.-_armv8_pmull_probe 513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root 523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align 5 53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global OPENSSL_atomic_add 54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_atomic_add,%function 55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_atomic_add: 56392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=6 57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Ladd: ldrex r2,[r0] 58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom add r3,r2,r1 59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom strex r2,r3,[r0] 60392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp r2,#0 61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bne .Ladd 62392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov r0,r3 633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root bx lr 64392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom stmdb sp!,{r4-r6,lr} 66392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr r2,.Lspinlock 67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom adr r3,.Lspinlock 68392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov r4,r0 69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov r5,r1 70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom add r6,r3,r2 @ &spinlock 71392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom b .+8 72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lspin: bl sched_yield 73392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov r0,#-1 74392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom swp r0,r0,[r6] 75392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp r0,#0 76392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bne .Lspin 77392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr r2,[r4] 79392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom add r2,r2,r5 80392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str r2,[r4] 81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str r0,[r6] @ release spinlock 82392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldmia sp!,{r4-r6,lr} 83392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom tst lr,#1 84392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom moveq pc,lr 85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .word 0xe12fff1e @ bx lr 86392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 87392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 88392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 89392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global OPENSSL_cleanse 90392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_cleanse,%function 91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_cleanse: 92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor ip,ip,ip 93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp r1,#7 94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom subhs r1,r1,#4 95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bhs .Lot 96392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp r1,#0 97392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom beq .Lcleanse_done 98392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Little: 99392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom strb ip,[r0],#1 100392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom subs r1,r1,#1 101392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bhi .Little 102392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom b .Lcleanse_done 103392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 104392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lot: tst r0,#3 105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom beq .Laligned 106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom strb ip,[r0],#1 107392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom sub r1,r1,#1 108392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom b .Lot 109392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Laligned: 110392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str ip,[r0],#4 111392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom subs r1,r1,#4 112392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bhs .Laligned 113392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom adds r1,r1,#4 114392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bne .Little 115392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lcleanse_done: 1163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=5 1173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root bx lr 1183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else 119392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom tst lr,#1 120392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom moveq pc,lr 121392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .word 0xe12fff1e @ bx lr 1223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif 123392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_cleanse,.-OPENSSL_cleanse 124392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global OPENSSL_wipe_cpu 126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_wipe_cpu,%function 127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_wipe_cpu: 128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr r0,.LOPENSSL_armcap 129392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom adr r1,.LOPENSSL_armcap 130392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr r0,[r1,r0] 131392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor r2,r2,r2 132392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor r3,r3,r3 133392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor ip,ip,ip 134392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom tst r0,#1 135392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom beq .Lwipe_done 1363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x50,0x01,0x00,0xf3 @ veor q0, q0, q0 1373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x52,0x21,0x02,0xf3 @ veor q1, q1, q1 1383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x54,0x41,0x04,0xf3 @ veor q2, q2, q2 1393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0x56,0x61,0x06,0xf3 @ veor q3, q3, q3 1403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xf0,0x01,0x40,0xf3 @ veor q8, q8, q8 1413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xf2,0x21,0x42,0xf3 @ veor q9, q9, q9 1423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xf4,0x41,0x44,0xf3 @ veor q10, q10, q10 1433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xf6,0x61,0x46,0xf3 @ veor q11, q11, q11 1443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xf8,0x81,0x48,0xf3 @ veor q12, q12, q12 1453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xfa,0xa1,0x4a,0xf3 @ veor q13, q13, q13 1463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xfc,0xc1,0x4c,0xf3 @ veor q14, q14, q14 1473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root .byte 0xfe,0xe1,0x4e,0xf3 @ veor q14, q14, q14 148392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lwipe_done: 149392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov r0,sp 1503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=5 1513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root bx lr 1523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else 153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom tst lr,#1 154392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom moveq pc,lr 155392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .word 0xe12fff1e @ bx lr 1563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif 157392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 158392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 159392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global OPENSSL_instrument_bus 160392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_instrument_bus,%function 161392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_instrument_bus: 162392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor r0,r0,r0 1633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=5 1643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root bx lr 1653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else 166392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom tst lr,#1 167392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom moveq pc,lr 168392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .word 0xe12fff1e @ bx lr 1693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif 170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus 171392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 172392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global OPENSSL_instrument_bus2 173392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_instrument_bus2,%function 174392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_instrument_bus2: 175392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor r0,r0,r0 1763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=5 1773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root bx lr 1783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else 179392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom tst lr,#1 180392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom moveq pc,lr 181392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .word 0xe12fff1e @ bx lr 1823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif 183392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 184392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 185392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 5 186392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.LOPENSSL_armcap: 187392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.word OPENSSL_armcap_P-.LOPENSSL_armcap 188392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=6 189392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 5 190392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 191392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lspinlock: 192392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.word atomic_add_spinlock-.Lspinlock 193392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 5 194392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 195392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.data 196392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 2 197392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromatomic_add_spinlock: 198392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.word 0 199392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 200392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 201392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.comm OPENSSL_armcap_P,4,4 202392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.hidden OPENSSL_armcap_P 203