summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaamoun TK <maamoun.tk@googlemail.com>2022-11-08 08:19:33 +0200
committerMaamoun TK <maamoun.tk@googlemail.com>2022-11-08 08:19:33 +0200
commite021a31c54777576e80643afcf925b791479943e (patch)
tree4600f8b85a2bc02d33741bae1ed8d09d6b1a13ad
parent58f20edd7b0f7a3831335973b0cb1275fec96381 (diff)
downloadnettle-e021a31c54777576e80643afcf925b791479943e.tar.gz
[PowerPC] Use INC_GPR/INC_VR marcos and define HAVE_NATIVE_poly1305_blocks in fat build
-rw-r--r--poly1305-update.c2
-rw-r--r--powerpc64/fat/poly1305-blocks.asm4
-rw-r--r--powerpc64/machine.m412
-rw-r--r--powerpc64/p9/poly1305.m448
4 files changed, 40 insertions, 26 deletions
diff --git a/poly1305-update.c b/poly1305-update.c
index 5493e17b..15ee3231 100644
--- a/poly1305-update.c
+++ b/poly1305-update.c
@@ -64,7 +64,7 @@ _nettle_poly1305_update (struct poly1305_ctx *ctx,
length, m);
_nettle_poly1305_block(ctx, block, 1);
}
-#if HAVE_NATIVE_poly1305_blocks || HAVE_NATIVE_fat_poly1305_blocks
+#if HAVE_NATIVE_poly1305_blocks
m = _nettle_poly1305_blocks (ctx, length >> 4, m);
length &= 15;
#else
diff --git a/powerpc64/fat/poly1305-blocks.asm b/powerpc64/fat/poly1305-blocks.asm
index e6435f44..9efef0a0 100644
--- a/powerpc64/fat/poly1305-blocks.asm
+++ b/powerpc64/fat/poly1305-blocks.asm
@@ -30,7 +30,9 @@ ifelse(`
not, see http://www.gnu.org/licenses/.
')
-dnl PROLOGUE(_nettle_fat_poly1305_blocks) picked up by configure
+dnl picked up by configure
+dnl PROLOGUE(_nettle_poly1305_blocks)
+dnl PROLOGUE(_nettle_fat_poly1305_blocks)
define(`fat_transform', `$1_ppc64')
include_src(`powerpc64/p9/poly1305-blocks.asm')
diff --git a/powerpc64/machine.m4 b/powerpc64/machine.m4
index b59f0863..8f28f295 100644
--- a/powerpc64/machine.m4
+++ b/powerpc64/machine.m4
@@ -51,3 +51,15 @@ forloop(i,0,63,`deflit(`vs'i,i)')
forloop(i,0,31,`deflit(`f'i,i)')
forloop(i,0,7, `deflit(`cr'i,i)')
')
+
+C Increase index of general-purpose register by specific value
+C INC_GPR(GPR, INC)
+define(`INC_GPR',`ifelse(substr($1,0,1),`r',
+``r'eval($2+substr($1,1,len($1)))',
+`eval($2+$1)')')
+
+C Increase index of vector register by specific value
+C INC_VR(VR, INC)
+define(`INC_VR',`ifelse(substr($1,0,1),`v',
+``v'eval($2+substr($1,1,len($1)))',
+`eval($2+$1)')')
diff --git a/powerpc64/p9/poly1305.m4 b/powerpc64/p9/poly1305.m4
index 265035fa..7fc495b4 100644
--- a/powerpc64/p9/poly1305.m4
+++ b/powerpc64/p9/poly1305.m4
@@ -4,34 +4,34 @@ define(`POLY1305_BLOCK_THRESHOLD', `12')
C DEFINES_BLOCK_R64(GPR0, VR0)
define(`DEFINES_BLOCK_R64', `
- define(`H0', `eval(0+$1)')
- define(`H1', `eval(1+$1)')
- define(`H2', `eval(2+$1)')
+ define(`H0', `$1')
+ define(`H1', `INC_GPR($1,1)')
+ define(`H2', `INC_GPR($1,2)')
- define(`T0', `eval(3+$1)')
- define(`T1', `eval(4+$1)')
- define(`T2', `eval(2+$1)')
- define(`T2A', `eval(3+$1)')
- define(`T2S', `eval(4+$1)')
- define(`RZ', `eval(0+$1)')
- define(`IDX', `eval(4+$1)')
+ define(`T0', `INC_GPR($1,3)')
+ define(`T1', `INC_GPR($1,4)')
+ define(`T2', `H2')
+ define(`T2A', `INC_GPR($1,3)')
+ define(`T2S', `INC_GPR($1,4)')
+ define(`RZ', `H0')
+ define(`IDX', `INC_GPR($1,4)')
- define(`F0', `eval(0+$2)')
- define(`F1', `eval(1+$2)')
+ define(`F0', `$2')
+ define(`F1', `INC_VR($2,1)')
- define(`ZERO', `eval(2+$2)')
- define(`F0S', `eval(3+$2)')
- define(`F11', `eval(4+$2)')
- define(`T', `eval(5+$2)')
+ define(`ZERO', `INC_VR($2,2)')
+ define(`F0S', `INC_VR($2,3)')
+ define(`F11', `INC_VR($2,4)')
+ define(`T', `INC_VR($2,5)')
- define(`R', `eval(6+$2)')
- define(`S', `eval(7+$2)')
+ define(`R', `INC_VR($2,6)')
+ define(`S', `INC_VR($2,7)')
- define(`T00', `eval(8+$2)')
- define(`T10', `eval(9+$2)')
- define(`T11', `eval(10+$2)')
- define(`MU0', `eval(11+$2)')
- define(`MU1', `eval(12+$2)')
+ define(`T00', `INC_VR($2,8)')
+ define(`T10', `INC_VR($2,9)')
+ define(`T11', `INC_VR($2,10)')
+ define(`MU0', `INC_VR($2,11)')
+ define(`MU1', `INC_VR($2,12)')
')
C CTX is the address of context where key and pre-computed values are stored
@@ -85,7 +85,7 @@ IF_BE(`
mtvsrdd VSR(T00), T2S, RZ
mtvsrdd VSR(T10), 0, T2
- C Mutiplicate key by combined state and block
+ C Multiply key by combined state and block
vmsumudm F0, T, MU0, ZERO
vmsumudm F1, T, MU1, ZERO
vmsumudm F11, T11, MU1, ZERO