Move constants from .text to .rodata on aarch64
This extends the support for execute-only memory in AArch64 assembly
and uses adrp and add instead of adr.
Change-Id: I388a13ec754e7f179d7a234516f1bb4ff6a5c919
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/57446
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl b/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl
index d4e3a7c..95dc4c8 100644
--- a/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl
+++ b/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl
@@ -56,7 +56,7 @@
$code.=<<___;
#include "openssl/arm_arch.h"
-.text
+.section .rodata
.align 5
.Lpoly:
.quad 0xffffffffffffffff,0x00000000ffffffff,0x0000000000000000,0xffffffff00000001
@@ -71,6 +71,7 @@
.LordK:
.quad 0xccd1c8aaee00bc4f
.asciz "ECP_NISTZ256 for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
+.text
// void ecp_nistz256_mul_mont(BN_ULONG x0[4],const BN_ULONG x1[4],
// const BN_ULONG x2[4]);
@@ -86,8 +87,10 @@
ldr $bi,[$bp] // bp[0]
ldp $a0,$a1,[$ap]
ldp $a2,$a3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
bl __ecp_nistz256_mul_mont
@@ -109,8 +112,10 @@
ldp $a0,$a1,[$ap]
ldp $a2,$a3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
bl __ecp_nistz256_sqr_mont
@@ -131,8 +136,10 @@
ldp $acc0,$acc1,[$ap]
ldp $acc2,$acc3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
bl __ecp_nistz256_div_by_2
@@ -152,8 +159,10 @@
ldp $acc0,$acc1,[$ap]
ldp $acc2,$acc3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
mov $t0,$acc0
mov $t1,$acc1
mov $t2,$acc2
@@ -177,8 +186,10 @@
ldp $acc0,$acc1,[$ap]
ldp $acc2,$acc3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
mov $t0,$acc0
mov $t1,$acc1
mov $t2,$acc2
@@ -214,8 +225,10 @@
ldp $acc0,$acc1,[$ap]
ldp $acc2,$acc3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
bl __ecp_nistz256_sub_from
@@ -238,8 +251,10 @@
mov $acc1,xzr
mov $acc2,xzr
mov $acc3,xzr
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
bl __ecp_nistz256_sub_from
@@ -617,9 +632,11 @@
mov $rp_real,$rp
ldp $acc2,$acc3,[$ap,#48]
mov $ap_real,$ap
- ldr $poly1,.Lpoly+8
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
mov $t0,$acc0
- ldr $poly3,.Lpoly+24
+ ldr $poly3,[$poly3,#24]
mov $t1,$acc1
ldp $a0,$a1,[$ap_real,#64] // forward load for p256_sqr_mont
mov $t2,$acc2
@@ -778,8 +795,10 @@
mov $rp_real,$rp
mov $ap_real,$ap
mov $bp_real,$bp
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
orr $t0,$a0,$a1
orr $t2,$a2,$a3
orr $in2infty,$t0,$t2
@@ -1032,8 +1051,10 @@
mov $rp_real,$rp
mov $ap_real,$ap
mov $bp_real,$bp
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
+ adrp $poly3,:pg_hi21:.Lpoly
+ add $poly3,$poly3,:lo12:.Lpoly
+ ldr $poly1,[$poly3,#8]
+ ldr $poly3,[$poly3,#24]
ldp $a0,$a1,[$ap,#64] // in1_z
ldp $a2,$a3,[$ap,#64+16]
@@ -1184,7 +1205,8 @@
stp $acc2,$acc3,[$rp_real,#$i+16]
___
$code.=<<___ if ($i == 0);
- adr $bp_real,.Lone_mont-64
+ adrp $bp_real,:pg_hi21:.Lone_mont-64
+ add $bp_real,$bp_real,:lo12:.Lone_mont-64
___
}
$code.=<<___;
@@ -1235,7 +1257,8 @@
stp x21,x22,[sp,#32]
stp x23,x24,[sp,#48]
- adr $ordk,.Lord
+ adrp $ordk,:pg_hi21:.Lord
+ add $ordk,$ordk,:lo12:.Lord
ldr $bi,[$bp] // bp[0]
ldp $a0,$a1,[$ap]
ldp $a2,$a3,[$ap,#16]
@@ -1378,7 +1401,8 @@
stp x21,x22,[sp,#32]
stp x23,x24,[sp,#48]
- adr $ordk,.Lord
+ adrp $ordk,:pg_hi21:.Lord
+ add $ordk,$ordk,:lo12:.Lord
ldp $a0,$a1,[$ap]
ldp $a2,$a3,[$ap,#16]