Change ppc64le AES code for FIPS.
The symbol “rcon” should be local in order to avoid collisions and it's
much easier on delocate if some of the expressions are evalulated in
Perl rather than left in the resulting .S file.
Also fix the perlasm style so the symbols are actually local.
Change-Id: Iddfc661fc3a6504bcc5732abaa1174da89ad805e
Reviewed-on: https://boringssl-review.googlesource.com/16524
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 56d9d8b..89a9ff2 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -16,7 +16,7 @@
set(PERLASM_STYLE linux32)
endif()
elseif (${ARCH} STREQUAL "ppc64le")
- set(PERLASM_STYLE ppc64le)
+ set(PERLASM_STYLE linux64le)
else()
if (${ARCH} STREQUAL "x86")
set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2")
diff --git a/crypto/fipsmodule/aes/asm/aesp8-ppc.pl b/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
index fb76d28..201da1a 100644
--- a/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
+++ b/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
@@ -88,7 +88,7 @@
.text
.align 7
-rcon:
+Lrcon:
.long 0x01000000, 0x01000000, 0x01000000, 0x01000000 ?rev
.long 0x1b000000, 0x1b000000, 0x1b000000, 0x1b000000 ?rev
.long 0x0d0e0f0c, 0x0d0e0f0c, 0x0d0e0f0c, 0x0d0e0f0c ?rev
@@ -372,7 +372,7 @@
.${prefix}_set_decrypt_key:
$STU $sp,-$FRAME($sp)
mflr r10
- $PUSH r10,$FRAME+$LRSAVE($sp)
+ $PUSH r10,`$FRAME+$LRSAVE`($sp)
bl Lset_encrypt_key
mtlr r10
@@ -728,7 +728,7 @@
addi $key,$key,0x20
lvx v31,$x00,$key
?vperm $rndkey0,$rndkey0,v30,$keyperm
- addi $key_,$sp,$FRAME+15
+ addi $key_,$sp,`$FRAME+15`
mtctr $rounds
Load_cbc_dec_key:
@@ -749,7 +749,7 @@
?vperm v25,v31,v26,$keyperm
lvx v28,$x30,$key
stvx v25,$x10,$key_ # off-load round[4]
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
?vperm v26,v26,v27,$keyperm
lvx v29,$x40,$key
?vperm v27,v27,v28,$keyperm
@@ -866,7 +866,7 @@
vncipher $out6,$out6,v27
vncipher $out7,$out7,v27
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vncipher $out0,$out0,v28
vncipher $out1,$out1,v28
vncipher $out2,$out2,v28
@@ -1434,7 +1434,7 @@
addi $key,$key,0x20
lvx v31,$x00,$key
?vperm $rndkey0,$rndkey0,v30,$keyperm
- addi $key_,$sp,$FRAME+15
+ addi $key_,$sp,`$FRAME+15`
mtctr $rounds
Load_ctr32_enc_key:
@@ -1455,7 +1455,7 @@
?vperm v25,v31,v26,$keyperm
lvx v28,$x30,$key
stvx v25,$x10,$key_ # off-load round[4]
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
?vperm v26,v26,v27,$keyperm
lvx v29,$x40,$key
?vperm v27,v27,v28,$keyperm
@@ -1542,7 +1542,7 @@
vcipher $out7,$out7,v25
and r0,r0,r11
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vcipher $out0,$out0,v26
vcipher $out1,$out1,v26
vcipher $out2,$out2,v26
@@ -2461,7 +2461,7 @@
addi $key1,$key1,0x20
lvx v31,$x00,$key1
?vperm $rndkey0,$rndkey0,v30,$keyperm
- addi $key_,$sp,$FRAME+15
+ addi $key_,$sp,`$FRAME+15`
mtctr $rounds
Load_xts_enc_key:
@@ -2482,7 +2482,7 @@
?vperm v25,v31,v26,$keyperm
lvx v28,$x30,$key1
stvx v25,$x10,$key_ # off-load round[4]
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
?vperm v26,v26,v27,$keyperm
lvx v29,$x40,$key1
?vperm v27,v27,v28,$keyperm
@@ -2639,7 +2639,7 @@
vcipher $out4,$out4,v27
vcipher $out5,$out5,v27
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vxor $tweak,$tweak,$tmp
vcipher $out0,$out0,v28
vcipher $out1,$out1,v28
@@ -2858,7 +2858,7 @@
lvx_u $in0,0,$inp
vcipher $out0,$out0,v27
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vcipher $out0,$out0,v28
lvx v24,$x00,$key_ # re-pre-load round[1]
@@ -3026,7 +3026,7 @@
vcipher $out4,$out4,v27
vxor $in2,$twk2,v31
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vcipher $out0,$out0,v28
vcipher $out1,$out1,v28
vcipher $out2,$out2,v28
@@ -3113,7 +3113,7 @@
addi $key1,$key1,0x20
lvx v31,$x00,$key1
?vperm $rndkey0,$rndkey0,v30,$keyperm
- addi $key_,$sp,$FRAME+15
+ addi $key_,$sp,`$FRAME+15`
mtctr $rounds
Load_xts_dec_key:
@@ -3134,7 +3134,7 @@
?vperm v25,v31,v26,$keyperm
lvx v28,$x30,$key1
stvx v25,$x10,$key_ # off-load round[4]
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
?vperm v26,v26,v27,$keyperm
lvx v29,$x40,$key1
?vperm v27,v27,v28,$keyperm
@@ -3291,7 +3291,7 @@
vncipher $out4,$out4,v27
vncipher $out5,$out5,v27
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vxor $tweak,$tweak,$tmp
vncipher $out0,$out0,v28
vncipher $out1,$out1,v28
@@ -3512,7 +3512,7 @@
lvx_u $in0,0,$inp
vncipher $out0,$out0,v27
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vncipher $out0,$out0,v28
lvx v24,$x00,$key_ # re-pre-load round[1]
@@ -3564,7 +3564,7 @@
lvsr $inpperm,0,$taillen # $in5 is no more
vncipher $out0,$out0,v27
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vncipher $out0,$out0,v28
lvx v24,$x00,$key_ # re-pre-load round[1]
@@ -3714,7 +3714,7 @@
vncipher $out4,$out4,v27
vxor $in2,$twk2,v31
- addi $key_,$sp,$FRAME+15 # rewind $key_
+ addi $key_,$sp,`$FRAME+15` # rewind $key_
vncipher $out0,$out0,v28
vncipher $out1,$out1,v28
vncipher $out2,$out2,v28
diff --git a/util/generate_build_files.py b/util/generate_build_files.py
index d6d6cc6..6258925 100644
--- a/util/generate_build_files.py
+++ b/util/generate_build_files.py
@@ -26,7 +26,7 @@
OS_ARCH_COMBOS = [
('linux', 'arm', 'linux32', [], 'S'),
('linux', 'aarch64', 'linux64', [], 'S'),
- ('linux', 'ppc64le', 'ppc64le', [], 'S'),
+ ('linux', 'ppc64le', 'linux64le', [], 'S'),
('linux', 'x86', 'elf', ['-fPIC', '-DOPENSSL_IA32_SSE2'], 'S'),
('linux', 'x86_64', 'elf', [], 'S'),
('mac', 'x86', 'macosx', ['-fPIC', '-DOPENSSL_IA32_SSE2'], 'S'),