1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL 2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand. 3*8fb009dcSAndroid Build Coastguard Worker 4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h> 5*8fb009dcSAndroid Build Coastguard Worker 6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__) 7*8fb009dcSAndroid Build Coastguard Worker#include <openssl/arm_arch.h> 8*8fb009dcSAndroid Build Coastguard Worker 9*8fb009dcSAndroid Build Coastguard Worker#if __ARM_MAX_ARCH__>=7 10*8fb009dcSAndroid Build Coastguard Worker.text 11*8fb009dcSAndroid Build Coastguard Worker.fpu neon 12*8fb009dcSAndroid Build Coastguard Worker.code 32 13*8fb009dcSAndroid Build Coastguard Worker#undef __thumb2__ 14*8fb009dcSAndroid Build Coastguard Worker.globl gcm_init_v8 15*8fb009dcSAndroid Build Coastguard Worker.hidden gcm_init_v8 16*8fb009dcSAndroid Build Coastguard Worker.type gcm_init_v8,%function 17*8fb009dcSAndroid Build Coastguard Worker.align 4 18*8fb009dcSAndroid Build Coastguard Workergcm_init_v8: 19*8fb009dcSAndroid Build Coastguard Worker AARCH64_VALID_CALL_TARGET 20*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q9},[r1] @ load input H 21*8fb009dcSAndroid Build Coastguard Worker vmov.i8 q11,#0xe1 22*8fb009dcSAndroid Build Coastguard Worker vshl.i64 q11,q11,#57 @ 0xc2.0 23*8fb009dcSAndroid Build Coastguard Worker vext.8 q3,q9,q9,#8 24*8fb009dcSAndroid Build Coastguard Worker vshr.u64 q10,q11,#63 25*8fb009dcSAndroid Build Coastguard Worker vdup.32 q9,d18[1] 26*8fb009dcSAndroid Build Coastguard Worker vext.8 q8,q10,q11,#8 @ t0=0xc2....01 27*8fb009dcSAndroid Build Coastguard Worker vshr.u64 q10,q3,#63 28*8fb009dcSAndroid Build Coastguard Worker vshr.s32 q9,q9,#31 @ broadcast carry bit 29*8fb009dcSAndroid Build Coastguard Worker vand q10,q10,q8 30*8fb009dcSAndroid Build Coastguard Worker vshl.i64 q3,q3,#1 31*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q10,q10,#8 32*8fb009dcSAndroid Build Coastguard Worker vand q8,q8,q9 33*8fb009dcSAndroid Build Coastguard Worker vorr q3,q3,q10 @ H<<<=1 34*8fb009dcSAndroid Build Coastguard Worker veor q12,q3,q8 @ twisted H 35*8fb009dcSAndroid Build Coastguard Worker vst1.64 {q12},[r0]! @ store Htable[0] 36*8fb009dcSAndroid Build Coastguard Worker 37*8fb009dcSAndroid Build Coastguard Worker @ calculate H^2 38*8fb009dcSAndroid Build Coastguard Worker vext.8 q8,q12,q12,#8 @ Karatsuba pre-processing 39*8fb009dcSAndroid Build Coastguard Worker.byte 0xa8,0x0e,0xa8,0xf2 @ pmull q0,q12,q12 40*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q12 41*8fb009dcSAndroid Build Coastguard Worker.byte 0xa9,0x4e,0xa9,0xf2 @ pmull2 q2,q12,q12 42*8fb009dcSAndroid Build Coastguard Worker.byte 0xa0,0x2e,0xa0,0xf2 @ pmull q1,q8,q8 43*8fb009dcSAndroid Build Coastguard Worker 44*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q2,#8 @ Karatsuba post-processing 45*8fb009dcSAndroid Build Coastguard Worker veor q10,q0,q2 46*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q9 47*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q10 48*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x4e,0xe0,0xf2 @ pmull q10,q0,q11 @ 1st phase 49*8fb009dcSAndroid Build Coastguard Worker 50*8fb009dcSAndroid Build Coastguard Worker vmov d4,d3 @ Xh|Xm - 256-bit result 51*8fb009dcSAndroid Build Coastguard Worker vmov d3,d0 @ Xm is rotated Xl 52*8fb009dcSAndroid Build Coastguard Worker veor q0,q1,q10 53*8fb009dcSAndroid Build Coastguard Worker 54*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q0,q0,#8 @ 2nd phase 55*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x0e,0xa0,0xf2 @ pmull q0,q0,q11 56*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q2 57*8fb009dcSAndroid Build Coastguard Worker veor q14,q0,q10 58*8fb009dcSAndroid Build Coastguard Worker 59*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q14,q14,#8 @ Karatsuba pre-processing 60*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q14 61*8fb009dcSAndroid Build Coastguard Worker vext.8 q13,q8,q9,#8 @ pack Karatsuba pre-processed 62*8fb009dcSAndroid Build Coastguard Worker vst1.64 {q13,q14},[r0]! @ store Htable[1..2] 63*8fb009dcSAndroid Build Coastguard Worker bx lr 64*8fb009dcSAndroid Build Coastguard Worker.size gcm_init_v8,.-gcm_init_v8 65*8fb009dcSAndroid Build Coastguard Worker.globl gcm_gmult_v8 66*8fb009dcSAndroid Build Coastguard Worker.hidden gcm_gmult_v8 67*8fb009dcSAndroid Build Coastguard Worker.type gcm_gmult_v8,%function 68*8fb009dcSAndroid Build Coastguard Worker.align 4 69*8fb009dcSAndroid Build Coastguard Workergcm_gmult_v8: 70*8fb009dcSAndroid Build Coastguard Worker AARCH64_VALID_CALL_TARGET 71*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q9},[r0] @ load Xi 72*8fb009dcSAndroid Build Coastguard Worker vmov.i8 q11,#0xe1 73*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q12,q13},[r1] @ load twisted H, ... 74*8fb009dcSAndroid Build Coastguard Worker vshl.u64 q11,q11,#57 75*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 76*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q9,q9 77*8fb009dcSAndroid Build Coastguard Worker#endif 78*8fb009dcSAndroid Build Coastguard Worker vext.8 q3,q9,q9,#8 79*8fb009dcSAndroid Build Coastguard Worker 80*8fb009dcSAndroid Build Coastguard Worker.byte 0x86,0x0e,0xa8,0xf2 @ pmull q0,q12,q3 @ H.lo·Xi.lo 81*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q3 @ Karatsuba pre-processing 82*8fb009dcSAndroid Build Coastguard Worker.byte 0x87,0x4e,0xa9,0xf2 @ pmull2 q2,q12,q3 @ H.hi·Xi.hi 83*8fb009dcSAndroid Build Coastguard Worker.byte 0xa2,0x2e,0xaa,0xf2 @ pmull q1,q13,q9 @ (H.lo+H.hi)·(Xi.lo+Xi.hi) 84*8fb009dcSAndroid Build Coastguard Worker 85*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q2,#8 @ Karatsuba post-processing 86*8fb009dcSAndroid Build Coastguard Worker veor q10,q0,q2 87*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q9 88*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q10 89*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x4e,0xe0,0xf2 @ pmull q10,q0,q11 @ 1st phase of reduction 90*8fb009dcSAndroid Build Coastguard Worker 91*8fb009dcSAndroid Build Coastguard Worker vmov d4,d3 @ Xh|Xm - 256-bit result 92*8fb009dcSAndroid Build Coastguard Worker vmov d3,d0 @ Xm is rotated Xl 93*8fb009dcSAndroid Build Coastguard Worker veor q0,q1,q10 94*8fb009dcSAndroid Build Coastguard Worker 95*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q0,q0,#8 @ 2nd phase of reduction 96*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x0e,0xa0,0xf2 @ pmull q0,q0,q11 97*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q2 98*8fb009dcSAndroid Build Coastguard Worker veor q0,q0,q10 99*8fb009dcSAndroid Build Coastguard Worker 100*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 101*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q0,q0 102*8fb009dcSAndroid Build Coastguard Worker#endif 103*8fb009dcSAndroid Build Coastguard Worker vext.8 q0,q0,q0,#8 104*8fb009dcSAndroid Build Coastguard Worker vst1.64 {q0},[r0] @ write out Xi 105*8fb009dcSAndroid Build Coastguard Worker 106*8fb009dcSAndroid Build Coastguard Worker bx lr 107*8fb009dcSAndroid Build Coastguard Worker.size gcm_gmult_v8,.-gcm_gmult_v8 108*8fb009dcSAndroid Build Coastguard Worker.globl gcm_ghash_v8 109*8fb009dcSAndroid Build Coastguard Worker.hidden gcm_ghash_v8 110*8fb009dcSAndroid Build Coastguard Worker.type gcm_ghash_v8,%function 111*8fb009dcSAndroid Build Coastguard Worker.align 4 112*8fb009dcSAndroid Build Coastguard Workergcm_ghash_v8: 113*8fb009dcSAndroid Build Coastguard Worker AARCH64_VALID_CALL_TARGET 114*8fb009dcSAndroid Build Coastguard Worker vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ 32-bit ABI says so 115*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q0},[r0] @ load [rotated] Xi 116*8fb009dcSAndroid Build Coastguard Worker @ "[rotated]" means that 117*8fb009dcSAndroid Build Coastguard Worker @ loaded value would have 118*8fb009dcSAndroid Build Coastguard Worker @ to be rotated in order to 119*8fb009dcSAndroid Build Coastguard Worker @ make it appear as in 120*8fb009dcSAndroid Build Coastguard Worker @ algorithm specification 121*8fb009dcSAndroid Build Coastguard Worker subs r3,r3,#32 @ see if r3 is 32 or larger 122*8fb009dcSAndroid Build Coastguard Worker mov r12,#16 @ r12 is used as post- 123*8fb009dcSAndroid Build Coastguard Worker @ increment for input pointer; 124*8fb009dcSAndroid Build Coastguard Worker @ as loop is modulo-scheduled 125*8fb009dcSAndroid Build Coastguard Worker @ r12 is zeroed just in time 126*8fb009dcSAndroid Build Coastguard Worker @ to preclude overstepping 127*8fb009dcSAndroid Build Coastguard Worker @ inp[len], which means that 128*8fb009dcSAndroid Build Coastguard Worker @ last block[s] are actually 129*8fb009dcSAndroid Build Coastguard Worker @ loaded twice, but last 130*8fb009dcSAndroid Build Coastguard Worker @ copy is not processed 131*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q12,q13},[r1]! @ load twisted H, ..., H^2 132*8fb009dcSAndroid Build Coastguard Worker vmov.i8 q11,#0xe1 133*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q14},[r1] 134*8fb009dcSAndroid Build Coastguard Worker moveq r12,#0 @ is it time to zero r12? 135*8fb009dcSAndroid Build Coastguard Worker vext.8 q0,q0,q0,#8 @ rotate Xi 136*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q8},[r2]! @ load [rotated] I[0] 137*8fb009dcSAndroid Build Coastguard Worker vshl.u64 q11,q11,#57 @ compose 0xc2.0 constant 138*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 139*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q8,q8 140*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q0,q0 141*8fb009dcSAndroid Build Coastguard Worker#endif 142*8fb009dcSAndroid Build Coastguard Worker vext.8 q3,q8,q8,#8 @ rotate I[0] 143*8fb009dcSAndroid Build Coastguard Worker blo .Lodd_tail_v8 @ r3 was less than 32 144*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q9},[r2],r12 @ load [rotated] I[1] 145*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 146*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q9,q9 147*8fb009dcSAndroid Build Coastguard Worker#endif 148*8fb009dcSAndroid Build Coastguard Worker vext.8 q7,q9,q9,#8 149*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q0 @ I[i]^=Xi 150*8fb009dcSAndroid Build Coastguard Worker.byte 0x8e,0x8e,0xa8,0xf2 @ pmull q4,q12,q7 @ H·Ii+1 151*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q7 @ Karatsuba pre-processing 152*8fb009dcSAndroid Build Coastguard Worker.byte 0x8f,0xce,0xa9,0xf2 @ pmull2 q6,q12,q7 153*8fb009dcSAndroid Build Coastguard Worker b .Loop_mod2x_v8 154*8fb009dcSAndroid Build Coastguard Worker 155*8fb009dcSAndroid Build Coastguard Worker.align 4 156*8fb009dcSAndroid Build Coastguard Worker.Loop_mod2x_v8: 157*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q3,q3,#8 158*8fb009dcSAndroid Build Coastguard Worker subs r3,r3,#32 @ is there more data? 159*8fb009dcSAndroid Build Coastguard Worker.byte 0x86,0x0e,0xac,0xf2 @ pmull q0,q14,q3 @ H^2.lo·Xi.lo 160*8fb009dcSAndroid Build Coastguard Worker movlo r12,#0 @ is it time to zero r12? 161*8fb009dcSAndroid Build Coastguard Worker 162*8fb009dcSAndroid Build Coastguard Worker.byte 0xa2,0xae,0xaa,0xf2 @ pmull q5,q13,q9 163*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q3 @ Karatsuba pre-processing 164*8fb009dcSAndroid Build Coastguard Worker.byte 0x87,0x4e,0xad,0xf2 @ pmull2 q2,q14,q3 @ H^2.hi·Xi.hi 165*8fb009dcSAndroid Build Coastguard Worker veor q0,q0,q4 @ accumulate 166*8fb009dcSAndroid Build Coastguard Worker.byte 0xa5,0x2e,0xab,0xf2 @ pmull2 q1,q13,q10 @ (H^2.lo+H^2.hi)·(Xi.lo+Xi.hi) 167*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q8},[r2],r12 @ load [rotated] I[i+2] 168*8fb009dcSAndroid Build Coastguard Worker 169*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q6 170*8fb009dcSAndroid Build Coastguard Worker moveq r12,#0 @ is it time to zero r12? 171*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q5 172*8fb009dcSAndroid Build Coastguard Worker 173*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q2,#8 @ Karatsuba post-processing 174*8fb009dcSAndroid Build Coastguard Worker veor q10,q0,q2 175*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q9 176*8fb009dcSAndroid Build Coastguard Worker vld1.64 {q9},[r2],r12 @ load [rotated] I[i+3] 177*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 178*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q8,q8 179*8fb009dcSAndroid Build Coastguard Worker#endif 180*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q10 181*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x4e,0xe0,0xf2 @ pmull q10,q0,q11 @ 1st phase of reduction 182*8fb009dcSAndroid Build Coastguard Worker 183*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 184*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q9,q9 185*8fb009dcSAndroid Build Coastguard Worker#endif 186*8fb009dcSAndroid Build Coastguard Worker vmov d4,d3 @ Xh|Xm - 256-bit result 187*8fb009dcSAndroid Build Coastguard Worker vmov d3,d0 @ Xm is rotated Xl 188*8fb009dcSAndroid Build Coastguard Worker vext.8 q7,q9,q9,#8 189*8fb009dcSAndroid Build Coastguard Worker vext.8 q3,q8,q8,#8 190*8fb009dcSAndroid Build Coastguard Worker veor q0,q1,q10 191*8fb009dcSAndroid Build Coastguard Worker.byte 0x8e,0x8e,0xa8,0xf2 @ pmull q4,q12,q7 @ H·Ii+1 192*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q2 @ accumulate q3 early 193*8fb009dcSAndroid Build Coastguard Worker 194*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q0,q0,#8 @ 2nd phase of reduction 195*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x0e,0xa0,0xf2 @ pmull q0,q0,q11 196*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q10 197*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q7 @ Karatsuba pre-processing 198*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q0 199*8fb009dcSAndroid Build Coastguard Worker.byte 0x8f,0xce,0xa9,0xf2 @ pmull2 q6,q12,q7 200*8fb009dcSAndroid Build Coastguard Worker bhs .Loop_mod2x_v8 @ there was at least 32 more bytes 201*8fb009dcSAndroid Build Coastguard Worker 202*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q10 203*8fb009dcSAndroid Build Coastguard Worker vext.8 q3,q8,q8,#8 @ re-construct q3 204*8fb009dcSAndroid Build Coastguard Worker adds r3,r3,#32 @ re-construct r3 205*8fb009dcSAndroid Build Coastguard Worker veor q0,q0,q2 @ re-construct q0 206*8fb009dcSAndroid Build Coastguard Worker beq .Ldone_v8 @ is r3 zero? 207*8fb009dcSAndroid Build Coastguard Worker.Lodd_tail_v8: 208*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q0,q0,#8 209*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q0 @ inp^=Xi 210*8fb009dcSAndroid Build Coastguard Worker veor q9,q8,q10 @ q9 is rotated inp^Xi 211*8fb009dcSAndroid Build Coastguard Worker 212*8fb009dcSAndroid Build Coastguard Worker.byte 0x86,0x0e,0xa8,0xf2 @ pmull q0,q12,q3 @ H.lo·Xi.lo 213*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q3 @ Karatsuba pre-processing 214*8fb009dcSAndroid Build Coastguard Worker.byte 0x87,0x4e,0xa9,0xf2 @ pmull2 q2,q12,q3 @ H.hi·Xi.hi 215*8fb009dcSAndroid Build Coastguard Worker.byte 0xa2,0x2e,0xaa,0xf2 @ pmull q1,q13,q9 @ (H.lo+H.hi)·(Xi.lo+Xi.hi) 216*8fb009dcSAndroid Build Coastguard Worker 217*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q2,#8 @ Karatsuba post-processing 218*8fb009dcSAndroid Build Coastguard Worker veor q10,q0,q2 219*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q9 220*8fb009dcSAndroid Build Coastguard Worker veor q1,q1,q10 221*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x4e,0xe0,0xf2 @ pmull q10,q0,q11 @ 1st phase of reduction 222*8fb009dcSAndroid Build Coastguard Worker 223*8fb009dcSAndroid Build Coastguard Worker vmov d4,d3 @ Xh|Xm - 256-bit result 224*8fb009dcSAndroid Build Coastguard Worker vmov d3,d0 @ Xm is rotated Xl 225*8fb009dcSAndroid Build Coastguard Worker veor q0,q1,q10 226*8fb009dcSAndroid Build Coastguard Worker 227*8fb009dcSAndroid Build Coastguard Worker vext.8 q10,q0,q0,#8 @ 2nd phase of reduction 228*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x0e,0xa0,0xf2 @ pmull q0,q0,q11 229*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q2 230*8fb009dcSAndroid Build Coastguard Worker veor q0,q0,q10 231*8fb009dcSAndroid Build Coastguard Worker 232*8fb009dcSAndroid Build Coastguard Worker.Ldone_v8: 233*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 234*8fb009dcSAndroid Build Coastguard Worker vrev64.8 q0,q0 235*8fb009dcSAndroid Build Coastguard Worker#endif 236*8fb009dcSAndroid Build Coastguard Worker vext.8 q0,q0,q0,#8 237*8fb009dcSAndroid Build Coastguard Worker vst1.64 {q0},[r0] @ write out Xi 238*8fb009dcSAndroid Build Coastguard Worker 239*8fb009dcSAndroid Build Coastguard Worker vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ 32-bit ABI says so 240*8fb009dcSAndroid Build Coastguard Worker bx lr 241*8fb009dcSAndroid Build Coastguard Worker.size gcm_ghash_v8,.-gcm_ghash_v8 242*8fb009dcSAndroid Build Coastguard Worker.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 243*8fb009dcSAndroid Build Coastguard Worker.align 2 244*8fb009dcSAndroid Build Coastguard Worker.align 2 245*8fb009dcSAndroid Build Coastguard Worker#endif 246*8fb009dcSAndroid Build Coastguard Worker#endif // !OPENSSL_NO_ASM && defined(OPENSSL_ARM) && defined(__ELF__) 247