diff options
Diffstat (limited to 'src/lib/libcrypto/armv4cpuid.S')
-rw-r--r-- | src/lib/libcrypto/armv4cpuid.S | 124 |
1 files changed, 95 insertions, 29 deletions
diff --git a/src/lib/libcrypto/armv4cpuid.S b/src/lib/libcrypto/armv4cpuid.S index 5ca979f3b3..bb9abafebe 100644 --- a/src/lib/libcrypto/armv4cpuid.S +++ b/src/lib/libcrypto/armv4cpuid.S | |||
@@ -1,19 +1,16 @@ | |||
1 | #include "arm_arch.h" | 1 | #include "arm_arch.h" |
2 | 2 | ||
3 | .text | 3 | .text |
4 | #if defined(__thumb2__) && !defined(__APPLE__) | ||
5 | .syntax unified | ||
6 | .thumb | ||
7 | #else | ||
4 | .code 32 | 8 | .code 32 |
5 | 9 | #undef __thumb2__ | |
6 | .align 5 | ||
7 | #if __ARM_ARCH__>=7 | ||
8 | .global _armv7_neon_probe | ||
9 | .type _armv7_neon_probe,%function | ||
10 | _armv7_neon_probe: | ||
11 | .word 0xf26ee1fe @ vorr q15,q15,q15 | ||
12 | .word 0xe12fff1e @ bx lr | ||
13 | .size _armv7_neon_probe,.-_armv7_neon_probe | ||
14 | #endif | 10 | #endif |
15 | 11 | ||
16 | .global OPENSSL_atomic_add | 12 | .align 5 |
13 | .globl OPENSSL_atomic_add | ||
17 | .type OPENSSL_atomic_add,%function | 14 | .type OPENSSL_atomic_add,%function |
18 | OPENSSL_atomic_add: | 15 | OPENSSL_atomic_add: |
19 | #if __ARM_ARCH__>=6 | 16 | #if __ARM_ARCH__>=6 |
@@ -23,9 +20,9 @@ OPENSSL_atomic_add: | |||
23 | cmp r2,#0 | 20 | cmp r2,#0 |
24 | bne .Ladd | 21 | bne .Ladd |
25 | mov r0,r3 | 22 | mov r0,r3 |
26 | .word 0xe12fff1e @ bx lr | 23 | bx lr |
27 | #else | 24 | #else |
28 | stmdb sp!,{r4-r6,lr} | 25 | stmdb sp!,{r4,r5,r6,lr} |
29 | ldr r2,.Lspinlock | 26 | ldr r2,.Lspinlock |
30 | adr r3,.Lspinlock | 27 | adr r3,.Lspinlock |
31 | mov r4,r0 | 28 | mov r4,r0 |
@@ -42,46 +39,115 @@ OPENSSL_atomic_add: | |||
42 | add r2,r2,r5 | 39 | add r2,r2,r5 |
43 | str r2,[r4] | 40 | str r2,[r4] |
44 | str r0,[r6] @ release spinlock | 41 | str r0,[r6] @ release spinlock |
45 | ldmia sp!,{r4-r6,lr} | 42 | ldmia sp!,{r4,r5,r6,lr} |
46 | tst lr,#1 | 43 | tst lr,#1 |
47 | moveq pc,lr | 44 | moveq pc,lr |
48 | .word 0xe12fff1e @ bx lr | 45 | .word 0xe12fff1e @ bx lr |
49 | #endif | 46 | #endif |
50 | .size OPENSSL_atomic_add,.-OPENSSL_atomic_add | 47 | .size OPENSSL_atomic_add,.-OPENSSL_atomic_add |
51 | 48 | ||
52 | .global OPENSSL_wipe_cpu | 49 | #if __ARM_ARCH__>=7 |
50 | .arch armv7-a | ||
51 | .fpu neon | ||
52 | |||
53 | .align 5 | ||
54 | .globl _armv7_neon_probe | ||
55 | .type _armv7_neon_probe,%function | ||
56 | _armv7_neon_probe: | ||
57 | vorr q0,q0,q0 | ||
58 | bx lr | ||
59 | .size _armv7_neon_probe,.-_armv7_neon_probe | ||
60 | |||
61 | .globl _armv8_aes_probe | ||
62 | .type _armv8_aes_probe,%function | ||
63 | _armv8_aes_probe: | ||
64 | #if defined(__thumb2__) && !defined(__APPLE__) | ||
65 | .byte 0xb0,0xff,0x00,0x03 @ aese.8 q0,q0 | ||
66 | #else | ||
67 | .byte 0x00,0x03,0xb0,0xf3 @ aese.8 q0,q0 | ||
68 | #endif | ||
69 | bx lr | ||
70 | .size _armv8_aes_probe,.-_armv8_aes_probe | ||
71 | |||
72 | .globl _armv8_sha1_probe | ||
73 | .type _armv8_sha1_probe,%function | ||
74 | _armv8_sha1_probe: | ||
75 | #if defined(__thumb2__) && !defined(__APPLE__) | ||
76 | .byte 0x00,0xef,0x40,0x0c @ sha1c.32 q0,q0,q0 | ||
77 | #else | ||
78 | .byte 0x40,0x0c,0x00,0xf2 @ sha1c.32 q0,q0,q0 | ||
79 | #endif | ||
80 | bx lr | ||
81 | .size _armv8_sha1_probe,.-_armv8_sha1_probe | ||
82 | |||
83 | .globl _armv8_sha256_probe | ||
84 | .type _armv8_sha256_probe,%function | ||
85 | _armv8_sha256_probe: | ||
86 | #if defined(__thumb2__) && !defined(__APPLE__) | ||
87 | .byte 0x00,0xff,0x40,0x0c @ sha256h.32 q0,q0,q0 | ||
88 | #else | ||
89 | .byte 0x40,0x0c,0x00,0xf3 @ sha256h.32 q0,q0,q0 | ||
90 | #endif | ||
91 | bx lr | ||
92 | .size _armv8_sha256_probe,.-_armv8_sha256_probe | ||
93 | .globl _armv8_pmull_probe | ||
94 | .type _armv8_pmull_probe,%function | ||
95 | _armv8_pmull_probe: | ||
96 | #if defined(__thumb2__) && !defined(__APPLE__) | ||
97 | .byte 0xa0,0xef,0x00,0x0e @ vmull.p64 q0,d0,d0 | ||
98 | #else | ||
99 | .byte 0x00,0x0e,0xa0,0xf2 @ vmull.p64 q0,d0,d0 | ||
100 | #endif | ||
101 | bx lr | ||
102 | .size _armv8_pmull_probe,.-_armv8_pmull_probe | ||
103 | #endif | ||
104 | |||
105 | .globl OPENSSL_wipe_cpu | ||
53 | .type OPENSSL_wipe_cpu,%function | 106 | .type OPENSSL_wipe_cpu,%function |
54 | OPENSSL_wipe_cpu: | 107 | OPENSSL_wipe_cpu: |
108 | #if __ARM_ARCH__>=7 | ||
55 | ldr r0,.LOPENSSL_armcap | 109 | ldr r0,.LOPENSSL_armcap |
56 | adr r1,.LOPENSSL_armcap | 110 | adr r1,.LOPENSSL_armcap |
57 | ldr r0,[r1,r0] | 111 | ldr r0,[r1,r0] |
112 | #ifdef __APPLE__ | ||
113 | ldr r0,[r0] | ||
114 | #endif | ||
115 | #endif | ||
58 | eor r2,r2,r2 | 116 | eor r2,r2,r2 |
59 | eor r3,r3,r3 | 117 | eor r3,r3,r3 |
60 | eor ip,ip,ip | 118 | eor ip,ip,ip |
119 | #if __ARM_ARCH__>=7 | ||
61 | tst r0,#1 | 120 | tst r0,#1 |
62 | beq .Lwipe_done | 121 | beq .Lwipe_done |
63 | .word 0xf3000150 @ veor q0, q0, q0 | 122 | veor q0, q0, q0 |
64 | .word 0xf3022152 @ veor q1, q1, q1 | 123 | veor q1, q1, q1 |
65 | .word 0xf3044154 @ veor q2, q2, q2 | 124 | veor q2, q2, q2 |
66 | .word 0xf3066156 @ veor q3, q3, q3 | 125 | veor q3, q3, q3 |
67 | .word 0xf34001f0 @ veor q8, q8, q8 | 126 | veor q8, q8, q8 |
68 | .word 0xf34221f2 @ veor q9, q9, q9 | 127 | veor q9, q9, q9 |
69 | .word 0xf34441f4 @ veor q10, q10, q10 | 128 | veor q10, q10, q10 |
70 | .word 0xf34661f6 @ veor q11, q11, q11 | 129 | veor q11, q11, q11 |
71 | .word 0xf34881f8 @ veor q12, q12, q12 | 130 | veor q12, q12, q12 |
72 | .word 0xf34aa1fa @ veor q13, q13, q13 | 131 | veor q13, q13, q13 |
73 | .word 0xf34cc1fc @ veor q14, q14, q14 | 132 | veor q14, q14, q14 |
74 | .word 0xf34ee1fe @ veor q15, q15, q15 | 133 | veor q15, q15, q15 |
75 | .Lwipe_done: | 134 | .Lwipe_done: |
135 | #endif | ||
76 | mov r0,sp | 136 | mov r0,sp |
137 | #if __ARM_ARCH__>=5 | ||
138 | bx lr | ||
139 | #else | ||
77 | tst lr,#1 | 140 | tst lr,#1 |
78 | moveq pc,lr | 141 | moveq pc,lr |
79 | .word 0xe12fff1e @ bx lr | 142 | .word 0xe12fff1e @ bx lr |
143 | #endif | ||
80 | .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu | 144 | .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu |
81 | 145 | ||
82 | .align 5 | 146 | .align 5 |
147 | #if __ARM_ARCH__>=7 | ||
83 | .LOPENSSL_armcap: | 148 | .LOPENSSL_armcap: |
84 | .word OPENSSL_armcap_P-.LOPENSSL_armcap | 149 | .word OPENSSL_armcap_P-. |
150 | #endif | ||
85 | #if __ARM_ARCH__>=6 | 151 | #if __ARM_ARCH__>=6 |
86 | .align 5 | 152 | .align 5 |
87 | #else | 153 | #else |