diff options
author | Andy Polyakov <appro@openssl.org> | 2019-02-15 09:44:39 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2019-02-16 16:59:23 +0100 |
commit | 3405db97e5448c784729b56837f3f8c776a01067 (patch) | |
tree | 3038d1d73fb0964915fdfd6377bb717722c02ea7 /crypto/sha/asm/sha256-armv4.pl | |
parent | b2b580fe445e064da50c13d3e00f71022da16ece (diff) |
ARM assembly pack: make it Windows-friendly.
"Windows friendliness" means a) flipping .thumb and .text directives,
b) always generate Thumb-2 code when asked(*); c) Windows-specific
references to external OPENSSL_armcap_P.
(*) so far *some* modules were compiled as .code 32 even if Thumb-2
was targeted. It works at hardware level because processor can alternate
between the modes with no overhead. But clang --target=arm-windows's
builtin assembler just refuses to compile .code 32...
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8252)
Diffstat (limited to 'crypto/sha/asm/sha256-armv4.pl')
-rw-r--r-- | crypto/sha/asm/sha256-armv4.pl | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/crypto/sha/asm/sha256-armv4.pl b/crypto/sha/asm/sha256-armv4.pl index e0512b4d41..cd01fcb57b 100644 --- a/crypto/sha/asm/sha256-armv4.pl +++ b/crypto/sha/asm/sha256-armv4.pl @@ -181,7 +181,6 @@ $code=<<___; # define __ARM_MAX_ARCH__ 7 #endif -.text #if defined(__thumb2__) .syntax unified .thumb @@ -189,6 +188,8 @@ $code=<<___; .code 32 #endif +.text + .type K256,%object .align 5 K256: @@ -212,7 +213,11 @@ K256: .word 0 @ terminator #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) .LOPENSSL_armcap: +# ifdef _WIN32 +.word OPENSSL_armcap_P +# else .word OPENSSL_armcap_P-.Lsha256_block_data_order +# endif #endif .align 5 @@ -227,10 +232,12 @@ sha256_block_data_order: #endif #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,.LOPENSSL_armcap +# if !defined(_WIN32) ldr r12,[r3,r12] @ OPENSSL_armcap_P -#ifdef __APPLE__ +# endif +# if defined(__APPLE__) || defined(_WIN32) ldr r12,[r12] -#endif +# endif tst r12,#ARMV8_SHA256 bne .LARMv8 tst r12,#ARMV7_NEON @@ -598,14 +605,15 @@ my ($ABCD,$EFGH,$abcd)=map("q$_",(0..2)); my @MSG=map("q$_",(8..11)); my ($W0,$W1,$ABCD_SAVE,$EFGH_SAVE)=map("q$_",(12..15)); my $Ktbl="r3"; +my $_byte = ($flavour =~ /win/ ? "DCB" : ".byte"); $code.=<<___; #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) # if defined(__thumb2__) -# define INST(a,b,c,d) .byte c,d|0xc,a,b +# define INST(a,b,c,d) $_byte c,d|0xc,a,b # else -# define INST(a,b,c,d) .byte a,b,c,d +# define INST(a,b,c,d) $_byte a,b,c,d # endif .type sha256_block_data_order_armv8,%function |