summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/armv4cpuid.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/armv4cpuid.S')
-rw-r--r--src/lib/libcrypto/armv4cpuid.S124
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
18OPENSSL_atomic_add: 15OPENSSL_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
54OPENSSL_wipe_cpu: 107OPENSSL_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