diff options
author | Maamoun TK <maamoun.tk@googlemail.com> | 2022-11-08 08:19:33 +0200 |
---|---|---|
committer | Maamoun TK <maamoun.tk@googlemail.com> | 2022-11-08 08:19:33 +0200 |
commit | e021a31c54777576e80643afcf925b791479943e (patch) | |
tree | 4600f8b85a2bc02d33741bae1ed8d09d6b1a13ad | |
parent | 58f20edd7b0f7a3831335973b0cb1275fec96381 (diff) | |
download | nettle-e021a31c54777576e80643afcf925b791479943e.tar.gz |
[PowerPC] Use INC_GPR/INC_VR marcos and define HAVE_NATIVE_poly1305_blocks in fat build
-rw-r--r-- | poly1305-update.c | 2 | ||||
-rw-r--r-- | powerpc64/fat/poly1305-blocks.asm | 4 | ||||
-rw-r--r-- | powerpc64/machine.m4 | 12 | ||||
-rw-r--r-- | powerpc64/p9/poly1305.m4 | 48 |
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 |