1 #include "arm_arch.h" 2 3 .text 4 .code 32 5 6 .align 5 7 .global _armv7_neon_probe 8 .type _armv7_neon_probe,%function 9 _armv7_neon_probe: 10 .word 0xf26ee1fe @ vorr q15,q15,q15 11 .word 0xe12fff1e @ bx lr 12 .size _armv7_neon_probe,.-_armv7_neon_probe 13 14 .global _armv7_tick 15 .type _armv7_tick,%function 16 _armv7_tick: 17 mrc p15,0,r0,c9,c13,0 18 .word 0xe12fff1e @ bx lr 19 .size _armv7_tick,.-_armv7_tick 20 21 .global OPENSSL_atomic_add 22 .type OPENSSL_atomic_add,%function 23 OPENSSL_atomic_add: 24 #if __ARM_ARCH__>=6 25 .Ladd: ldrex r2,[r0] 26 add r3,r2,r1 27 strex r2,r3,[r0] 28 cmp r2,#0 29 bne .Ladd 30 mov r0,r3 31 .word 0xe12fff1e @ bx lr 32 #else 33 stmdb sp!,{r4-r6,lr} 34 ldr r2,.Lspinlock 35 adr r3,.Lspinlock 36 mov r4,r0 37 mov r5,r1 38 add r6,r3,r2 @ &spinlock 39 b .+8 40 .Lspin: bl sched_yield 41 mov r0,#-1 42 swp r0,r0,[r6] 43 cmp r0,#0 44 bne .Lspin 45 46 ldr r2,[r4] 47 add r2,r2,r5 48 str r2,[r4] 49 str r0,[r6] @ release spinlock 50 ldmia sp!,{r4-r6,lr} 51 tst lr,#1 52 moveq pc,lr 53 .word 0xe12fff1e @ bx lr 54 #endif 55 .size OPENSSL_atomic_add,.-OPENSSL_atomic_add 56 57 .global OPENSSL_cleanse 58 .type OPENSSL_cleanse,%function 59 OPENSSL_cleanse: 60 eor ip,ip,ip 61 cmp r1,#7 62 subhs r1,r1,#4 63 bhs .Lot 64 cmp r1,#0 65 beq .Lcleanse_done 66 .Little: 67 strb ip,[r0],#1 68 subs r1,r1,#1 69 bhi .Little 70 b .Lcleanse_done 71 72 .Lot: tst r0,#3 73 beq .Laligned 74 strb ip,[r0],#1 75 sub r1,r1,#1 76 b .Lot 77 .Laligned: 78 str ip,[r0],#4 79 subs r1,r1,#4 80 bhs .Laligned 81 adds r1,r1,#4 82 bne .Little 83 .Lcleanse_done: 84 tst lr,#1 85 moveq pc,lr 86 .word 0xe12fff1e @ bx lr 87 .size OPENSSL_cleanse,.-OPENSSL_cleanse 88 89 .global OPENSSL_wipe_cpu 90 .type OPENSSL_wipe_cpu,%function 91 OPENSSL_wipe_cpu: 92 ldr r0,.LOPENSSL_armcap 93 adr r1,.LOPENSSL_armcap 94 ldr r0,[r1,r0] 95 eor r2,r2,r2 96 eor r3,r3,r3 97 eor ip,ip,ip 98 tst r0,#1 99 beq .Lwipe_done 100 .word 0xf3000150 @ veor q0, q0, q0 101 .word 0xf3022152 @ veor q1, q1, q1 102 .word 0xf3044154 @ veor q2, q2, q2 103 .word 0xf3066156 @ veor q3, q3, q3 104 .word 0xf34001f0 @ veor q8, q8, q8 105 .word 0xf34221f2 @ veor q9, q9, q9 106 .word 0xf34441f4 @ veor q10, q10, q10 107 .word 0xf34661f6 @ veor q11, q11, q11 108 .word 0xf34881f8 @ veor q12, q12, q12 109 .word 0xf34aa1fa @ veor q13, q13, q13 110 .word 0xf34cc1fc @ veor q14, q14, q14 111 .word 0xf34ee1fe @ veor q15, q15, q15 112 .Lwipe_done: 113 mov r0,sp 114 tst lr,#1 115 moveq pc,lr 116 .word 0xe12fff1e @ bx lr 117 .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 118 119 .global OPENSSL_instrument_bus 120 .type OPENSSL_instrument_bus,%function 121 OPENSSL_instrument_bus: 122 eor r0,r0,r0 123 tst lr,#1 124 moveq pc,lr 125 .word 0xe12fff1e @ bx lr 126 .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus 127 128 .global OPENSSL_instrument_bus2 129 .type OPENSSL_instrument_bus2,%function 130 OPENSSL_instrument_bus2: 131 eor r0,r0,r0 132 tst lr,#1 133 moveq pc,lr 134 .word 0xe12fff1e @ bx lr 135 .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 136 137 .align 5 138 .LOPENSSL_armcap: 139 .word OPENSSL_armcap_P-.LOPENSSL_armcap 140 #if __ARM_ARCH__>=6 141 .align 5 142 #else 143 .Lspinlock: 144 .word atomic_add_spinlock-.Lspinlock 145 .align 5 146 147 .data 148 .align 2 149 atomic_add_spinlock: 150 .word 0 151 #endif 152 153 .comm OPENSSL_armcap_P,4,4 154 .hidden OPENSSL_armcap_P 155