1238384Sjkim#include "arm_arch.h" 2238384Sjkim 3238384Sjkim.text 4238384Sjkim.code 32 5238384Sjkim 6238384Sjkim.align 5 7238384Sjkim.global _armv7_neon_probe 8238384Sjkim.type _armv7_neon_probe,%function 9238384Sjkim_armv7_neon_probe: 10238384Sjkim .word 0xf26ee1fe @ vorr q15,q15,q15 11238384Sjkim .word 0xe12fff1e @ bx lr 12238384Sjkim.size _armv7_neon_probe,.-_armv7_neon_probe 13238384Sjkim 14238384Sjkim.global _armv7_tick 15238384Sjkim.type _armv7_tick,%function 16238384Sjkim_armv7_tick: 17238384Sjkim mrc p15,0,r0,c9,c13,0 18238384Sjkim .word 0xe12fff1e @ bx lr 19238384Sjkim.size _armv7_tick,.-_armv7_tick 20238384Sjkim 21238384Sjkim.global OPENSSL_atomic_add 22238384Sjkim.type OPENSSL_atomic_add,%function 23238384SjkimOPENSSL_atomic_add: 24238384Sjkim#if __ARM_ARCH__>=6 25238384Sjkim.Ladd: ldrex r2,[r0] 26238384Sjkim add r3,r2,r1 27238384Sjkim strex r2,r3,[r0] 28238384Sjkim cmp r2,#0 29238384Sjkim bne .Ladd 30238384Sjkim mov r0,r3 31238384Sjkim .word 0xe12fff1e @ bx lr 32238384Sjkim#else 33238384Sjkim stmdb sp!,{r4-r6,lr} 34238384Sjkim ldr r2,.Lspinlock 35238384Sjkim adr r3,.Lspinlock 36238384Sjkim mov r4,r0 37238384Sjkim mov r5,r1 38238384Sjkim add r6,r3,r2 @ &spinlock 39238384Sjkim b .+8 40238384Sjkim.Lspin: bl sched_yield 41238384Sjkim mov r0,#-1 42238384Sjkim swp r0,r0,[r6] 43238384Sjkim cmp r0,#0 44238384Sjkim bne .Lspin 45238384Sjkim 46238384Sjkim ldr r2,[r4] 47238384Sjkim add r2,r2,r5 48238384Sjkim str r2,[r4] 49238384Sjkim str r0,[r6] @ release spinlock 50238384Sjkim ldmia sp!,{r4-r6,lr} 51238384Sjkim tst lr,#1 52238384Sjkim moveq pc,lr 53238384Sjkim .word 0xe12fff1e @ bx lr 54238384Sjkim#endif 55238384Sjkim.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 56238384Sjkim 57238384Sjkim.global OPENSSL_cleanse 58238384Sjkim.type OPENSSL_cleanse,%function 59238384SjkimOPENSSL_cleanse: 60238384Sjkim eor ip,ip,ip 61238384Sjkim cmp r1,#7 62238384Sjkim subhs r1,r1,#4 63238384Sjkim bhs .Lot 64238384Sjkim cmp r1,#0 65238384Sjkim beq .Lcleanse_done 66238384Sjkim.Little: 67238384Sjkim strb ip,[r0],#1 68238384Sjkim subs r1,r1,#1 69238384Sjkim bhi .Little 70238384Sjkim b .Lcleanse_done 71238384Sjkim 72238384Sjkim.Lot: tst r0,#3 73238384Sjkim beq .Laligned 74238384Sjkim strb ip,[r0],#1 75238384Sjkim sub r1,r1,#1 76238384Sjkim b .Lot 77238384Sjkim.Laligned: 78238384Sjkim str ip,[r0],#4 79238384Sjkim subs r1,r1,#4 80238384Sjkim bhs .Laligned 81238384Sjkim adds r1,r1,#4 82238384Sjkim bne .Little 83238384Sjkim.Lcleanse_done: 84238384Sjkim tst lr,#1 85238384Sjkim moveq pc,lr 86238384Sjkim .word 0xe12fff1e @ bx lr 87238384Sjkim.size OPENSSL_cleanse,.-OPENSSL_cleanse 88238384Sjkim 89238384Sjkim.global OPENSSL_wipe_cpu 90238384Sjkim.type OPENSSL_wipe_cpu,%function 91238384SjkimOPENSSL_wipe_cpu: 92238384Sjkim ldr r0,.LOPENSSL_armcap 93238384Sjkim adr r1,.LOPENSSL_armcap 94238384Sjkim ldr r0,[r1,r0] 95238384Sjkim eor r2,r2,r2 96238384Sjkim eor r3,r3,r3 97238384Sjkim eor ip,ip,ip 98238384Sjkim tst r0,#1 99238384Sjkim beq .Lwipe_done 100238384Sjkim .word 0xf3000150 @ veor q0, q0, q0 101238384Sjkim .word 0xf3022152 @ veor q1, q1, q1 102238384Sjkim .word 0xf3044154 @ veor q2, q2, q2 103238384Sjkim .word 0xf3066156 @ veor q3, q3, q3 104238384Sjkim .word 0xf34001f0 @ veor q8, q8, q8 105238384Sjkim .word 0xf34221f2 @ veor q9, q9, q9 106238384Sjkim .word 0xf34441f4 @ veor q10, q10, q10 107238384Sjkim .word 0xf34661f6 @ veor q11, q11, q11 108238384Sjkim .word 0xf34881f8 @ veor q12, q12, q12 109238384Sjkim .word 0xf34aa1fa @ veor q13, q13, q13 110238384Sjkim .word 0xf34cc1fc @ veor q14, q14, q14 111238384Sjkim .word 0xf34ee1fe @ veor q15, q15, q15 112238384Sjkim.Lwipe_done: 113238384Sjkim mov r0,sp 114238384Sjkim tst lr,#1 115238384Sjkim moveq pc,lr 116238384Sjkim .word 0xe12fff1e @ bx lr 117238384Sjkim.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 118238384Sjkim 119238384Sjkim.global OPENSSL_instrument_bus 120238384Sjkim.type OPENSSL_instrument_bus,%function 121238384SjkimOPENSSL_instrument_bus: 122238384Sjkim eor r0,r0,r0 123238384Sjkim tst lr,#1 124238384Sjkim moveq pc,lr 125238384Sjkim .word 0xe12fff1e @ bx lr 126238384Sjkim.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus 127238384Sjkim 128238384Sjkim.global OPENSSL_instrument_bus2 129238384Sjkim.type OPENSSL_instrument_bus2,%function 130238384SjkimOPENSSL_instrument_bus2: 131238384Sjkim eor r0,r0,r0 132238384Sjkim tst lr,#1 133238384Sjkim moveq pc,lr 134238384Sjkim .word 0xe12fff1e @ bx lr 135238384Sjkim.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 136238384Sjkim 137238384Sjkim.align 5 138238384Sjkim.LOPENSSL_armcap: 139238384Sjkim.word OPENSSL_armcap_P-.LOPENSSL_armcap 140238384Sjkim#if __ARM_ARCH__>=6 141238384Sjkim.align 5 142238384Sjkim#else 143238384Sjkim.Lspinlock: 144238384Sjkim.word atomic_add_spinlock-.Lspinlock 145238384Sjkim.align 5 146238384Sjkim 147238384Sjkim.data 148238384Sjkim.align 2 149238384Sjkimatomic_add_spinlock: 150238384Sjkim.word 0 151238384Sjkim#endif 152238384Sjkim 153238384Sjkim.comm OPENSSL_armcap_P,4,4 154238384Sjkim.hidden OPENSSL_armcap_P 155