Loading crypto/alphacpuid.pl +28 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,34 @@ OPENSSL_cleanse: bne $17,.Little .Ldone: ret ($26) .end OPENSSL_cleanse .globl CRYPTO_memcmp .ent CRYPTO_memcmp CRYPTO_memcmp: .frame $30,0,$26 .prologue 0 xor $0,$0,$0 beq $18,.Lno_data xor $1,$1,$1 nop .Loop_cmp: ldq_u $2,0($16) subq $18,1,$18 ldq_u $3,0($17) extbl $2,$16,$2 lda $16,1($16) extbl $3,$17,$3 lda $17,1($17) xor $3,$2,$2 or $2,$0,$0 bne $18,.Loop_cmp subq $31,$0,$0 srl $0,63,$0 .Lno_data: ret ($26) .end CRYPTO_memcmp ___ { my ($out,$cnt,$max)=("\$16","\$17","\$18"); Loading crypto/arm64cpuid.pl +20 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,26 @@ OPENSSL_cleanse: cbnz x1,.Little // len!=0? ret .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,%function .align 4 CRYPTO_memcmp: eor w3,w3,w3 cbz x2,.Lno_data // len==0? .Loop_cmp: ldrb w4,[x0],#1 ldrb w5,[x1],#1 eor w4,w4,w5 orr w3,w3,w4 subs x2,x2,#1 b.ne .Loop_cmp .Lno_data: neg w0,w3 lsr w0,w0,#31 ret .size CRYPTO_memcmp,.-CRYPTO_memcmp ___ print $code; Loading crypto/armv4cpuid.pl +30 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,36 @@ OPENSSL_cleanse: #endif .size OPENSSL_cleanse,.-OPENSSL_cleanse .global CRYPTO_memcmp .type CRYPTO_memcmp,%function .align 4 CRYPTO_memcmp: eor ip,ip,ip cmp r2,#0 beq .Lno_data stmdb sp!,{r4,r5} .Loop_cmp: ldrb r4,[r0],#1 ldrb r5,[r1],#1 eor r4,r4,r5 orr ip,ip,r4 subs r2,r2,#1 bne .Loop_cmp ldmia sp!,{r4,r5} .Lno_data: neg r0,ip mov r0,r0,lsr#31 #if __ARM_ARCH__>=5 bx lr #else tst lr,#1 moveq pc,lr .word 0xe12fff1e @ bx lr #endif .size CRYPTO_memcmp,.-CRYPTO_memcmp #if __ARM_MAX_ARCH__>=7 .arch armv7-a .fpu neon Loading crypto/c64xpluscpuid.pl +24 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ $code.=<<___; .if __TI_EABI__ .asg OPENSSL_rdtsc,_OPENSSL_rdtsc .asg OPENSSL_cleanse,_OPENSSL_cleanse .asg CRYPTO_memcmp,_CRYPTO_memcmp .asg OPENSSL_atomic_add,_OPENSSL_atomic_add .asg OPENSSL_wipe_cpu,_OPENSSL_wipe_cpu .asg OPENSSL_instrument_bus,_OPENSSL_instrument_bus Loading Loading @@ -87,6 +88,29 @@ _OPENSSL_cleanse: [A1] STB A2,*A4++[2] .endasmfunc .global _CRYPTO_memcmp _CRYPTO_memcmp: .asmfunc MV A6,B0 [!B0] BNOP RA ||[!B0] ZERO A4 [B0] MVC B0,ILC || [B0] ZERO A0 NOP 4 SPLOOP 1 LDBU *A4++,A1 || LDBU *B4++,B1 NOP 4 XOR.L B1,A1,A2 SPKERNEL 1,0 || OR.S A2,A0,A0 BNOP RA,3 ZERO.L A4 [A0] MVK 1,A4 .endasmfunc .global _OPENSSL_atomic_add _OPENSSL_atomic_add: .asmfunc Loading crypto/cryptlib.c +2 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,7 @@ void OPENSSL_die(const char *message, const char *file, int line) #endif } #if !defined(OPENSSL_CPUID_OBJ) /* volatile unsigned char* pointers are there because * 1. Accessing a variable declared volatile via a pointer * that lacks a volatile qualifier causes undefined behavior. Loading Loading @@ -347,3 +348,4 @@ int CRYPTO_memcmp(const volatile void * volatile in_a, return x; } #endif Loading
crypto/alphacpuid.pl +28 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,34 @@ OPENSSL_cleanse: bne $17,.Little .Ldone: ret ($26) .end OPENSSL_cleanse .globl CRYPTO_memcmp .ent CRYPTO_memcmp CRYPTO_memcmp: .frame $30,0,$26 .prologue 0 xor $0,$0,$0 beq $18,.Lno_data xor $1,$1,$1 nop .Loop_cmp: ldq_u $2,0($16) subq $18,1,$18 ldq_u $3,0($17) extbl $2,$16,$2 lda $16,1($16) extbl $3,$17,$3 lda $17,1($17) xor $3,$2,$2 or $2,$0,$0 bne $18,.Loop_cmp subq $31,$0,$0 srl $0,63,$0 .Lno_data: ret ($26) .end CRYPTO_memcmp ___ { my ($out,$cnt,$max)=("\$16","\$17","\$18"); Loading
crypto/arm64cpuid.pl +20 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,26 @@ OPENSSL_cleanse: cbnz x1,.Little // len!=0? ret .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,%function .align 4 CRYPTO_memcmp: eor w3,w3,w3 cbz x2,.Lno_data // len==0? .Loop_cmp: ldrb w4,[x0],#1 ldrb w5,[x1],#1 eor w4,w4,w5 orr w3,w3,w4 subs x2,x2,#1 b.ne .Loop_cmp .Lno_data: neg w0,w3 lsr w0,w0,#31 ret .size CRYPTO_memcmp,.-CRYPTO_memcmp ___ print $code; Loading
crypto/armv4cpuid.pl +30 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,36 @@ OPENSSL_cleanse: #endif .size OPENSSL_cleanse,.-OPENSSL_cleanse .global CRYPTO_memcmp .type CRYPTO_memcmp,%function .align 4 CRYPTO_memcmp: eor ip,ip,ip cmp r2,#0 beq .Lno_data stmdb sp!,{r4,r5} .Loop_cmp: ldrb r4,[r0],#1 ldrb r5,[r1],#1 eor r4,r4,r5 orr ip,ip,r4 subs r2,r2,#1 bne .Loop_cmp ldmia sp!,{r4,r5} .Lno_data: neg r0,ip mov r0,r0,lsr#31 #if __ARM_ARCH__>=5 bx lr #else tst lr,#1 moveq pc,lr .word 0xe12fff1e @ bx lr #endif .size CRYPTO_memcmp,.-CRYPTO_memcmp #if __ARM_MAX_ARCH__>=7 .arch armv7-a .fpu neon Loading
crypto/c64xpluscpuid.pl +24 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ $code.=<<___; .if __TI_EABI__ .asg OPENSSL_rdtsc,_OPENSSL_rdtsc .asg OPENSSL_cleanse,_OPENSSL_cleanse .asg CRYPTO_memcmp,_CRYPTO_memcmp .asg OPENSSL_atomic_add,_OPENSSL_atomic_add .asg OPENSSL_wipe_cpu,_OPENSSL_wipe_cpu .asg OPENSSL_instrument_bus,_OPENSSL_instrument_bus Loading Loading @@ -87,6 +88,29 @@ _OPENSSL_cleanse: [A1] STB A2,*A4++[2] .endasmfunc .global _CRYPTO_memcmp _CRYPTO_memcmp: .asmfunc MV A6,B0 [!B0] BNOP RA ||[!B0] ZERO A4 [B0] MVC B0,ILC || [B0] ZERO A0 NOP 4 SPLOOP 1 LDBU *A4++,A1 || LDBU *B4++,B1 NOP 4 XOR.L B1,A1,A2 SPKERNEL 1,0 || OR.S A2,A0,A0 BNOP RA,3 ZERO.L A4 [A0] MVK 1,A4 .endasmfunc .global _OPENSSL_atomic_add _OPENSSL_atomic_add: .asmfunc Loading
crypto/cryptlib.c +2 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,7 @@ void OPENSSL_die(const char *message, const char *file, int line) #endif } #if !defined(OPENSSL_CPUID_OBJ) /* volatile unsigned char* pointers are there because * 1. Accessing a variable declared volatile via a pointer * that lacks a volatile qualifier causes undefined behavior. Loading Loading @@ -347,3 +348,4 @@ int CRYPTO_memcmp(const volatile void * volatile in_a, return x; } #endif