From 06cfa5e830ea3506d66f76e9498d182f5b1c676f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Wed, 15 May 2002 23:39:05 +0200 Subject: [PATCH] * sparc/aes.asm (AES_ROUND): New macro. * (_aes_crypt): Use AES_ROUND for first word of the round function. Rev: src/nettle/sparc/aes.asm:1.95 --- sparc/aes.asm | 118 +++++++++++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 45 deletions(-) diff --git a/sparc/aes.asm b/sparc/aes.asm index c599d6e6..cd752350 100644 --- a/sparc/aes.asm +++ b/sparc/aes.asm @@ -28,12 +28,6 @@ .file "aes.asm" - .section ".text" - .align 16 - .global _aes_crypt - .type _aes_crypt,#function - .proc 020 - ! Arguments define(ctx, %i0) define(T, %i1) @@ -69,6 +63,42 @@ define(t1, %o1) define(t2, %o2) define(t3, %o3) +dnl AES_ROUND(i) +dnl Compute one word in the round function. +dnl Input in wtxt, output stored in tmp + i. +define(<AES_ROUND>, < + ld [IDX1+$1], t1 ! 1 + + ldub [wtxt+t1], t1 ! 1 + ld [IDX3+$1], t3 ! 3 + + sll t1, 2, t1 ! 1 + ld [wtxt+$1], t0 ! 0 + ! IDX2(j) = j XOR 2 + lduh [wtxt+eval($1 ^ 8)], t2 ! 2 + and t0, 255, t0 ! 0 + + ldub [wtxt+t3], t3 ! 3 + sll t0, 2, t0 ! 0 + ld [T0+t0], t0 ! 0 + and t2, 255, t2 ! 2 + + ld [T1+t1], t1 ! 1 + sll t2, 2, t2 ! 2 + ld [T2+t2], t2 ! 2 + sll t3, 2, t3 ! 3 + + ld [T3+t3], t3 ! 3 + xor t0, t1, t0 ! 0, 1 + xor t0, t2, t0 ! 0, 1, 2 + ! Fetch roundkey + ld [key + $1], t1 + + xor t0, t3, t0 ! 0, 1, 2, 3 + xor t0, t1, t0 + st t0, [tmp + $1]>) + + C The stack frame looks like C C %fp - 4: OS-dependent link field @@ -78,6 +108,12 @@ C %fp - 40: wtxt, uint32_t[4] C %fp - 136: OS register save area. define(<FRAME_SIZE>, 136) + .section ".text" + .align 16 + .global _aes_crypt + .type _aes_crypt,#function + .proc 020 + _aes_crypt: save %sp, -FRAME_SIZE, %sp cmp length, 0 @@ -145,42 +181,41 @@ _aes_crypt: C Unrolled inner loop begins C i = 0 - ld [IDX1+0], t1 ! 1 - - C add wtxt, t1, t1 ! 1 - ldub [wtxt+t1], t1 ! 1 - ld [IDX3+0], t3 ! 3 - - sll t1, 2, t1 ! 1 - ld [wtxt], t0 ! 0 - ! IDX2(j) = j XOR 2 - lduh [wtxt+8], t2 ! 2 - and t0, 255, t0 ! 0 - - ldub [wtxt+t3], t3 ! 3 - sll t0, 2, t0 ! 0 - ld [T0+t0], t0 ! 0 - and t2, 255, t2 ! 2 - - ld [T1+t1], t1 ! 1 - sll t2, 2, t2 ! 2 - ld [T2+t2], t2 ! 2 - sll t3, 2, t3 ! 3 - - ld [T3+t3], t3 ! 3 - xor t0, t1, t0 ! 0, 1 - xor t0, t2, t0 ! 0, 1, 2 - ! Fetch roundkey - ld [key], t1 - - xor t0, t3, t0 ! 0, 1, 2, 3 - xor t0, t1, t0 - st t0, [tmp] + AES_ROUND(0) +C ld [IDX1+0], t1 ! 1 +C +C ldub [wtxt+t1], t1 ! 1 +C ld [IDX3+0], t3 ! 3 +C +C sll t1, 2, t1 ! 1 +C ld [wtxt], t0 ! 0 +C ! IDX2(j) = j XOR 2 +C lduh [wtxt+8], t2 ! 2 +C and t0, 255, t0 ! 0 +C +C ldub [wtxt+t3], t3 ! 3 +C sll t0, 2, t0 ! 0 +C ld [T0+t0], t0 ! 0 +C and t2, 255, t2 ! 2 +C +C ld [T1+t1], t1 ! 1 +C sll t2, 2, t2 ! 2 +C ld [T2+t2], t2 ! 2 +C sll t3, 2, t3 ! 3 +C +C ld [T3+t3], t3 ! 3 +C xor t0, t1, t0 ! 0, 1 +C xor t0, t2, t0 ! 0, 1, 2 +C ! Fetch roundkey +C ld [key], t1 +C +C xor t0, t3, t0 ! 0, 1, 2, 3 +C xor t0, t1, t0 +C st t0, [tmp] C i = 1 ld [IDX1+4], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [IDX3+4], t3 ! 3 @@ -213,7 +248,6 @@ _aes_crypt: C = 2 ld [IDX1+8], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [IDX3+8], t3 ! 3 @@ -246,7 +280,6 @@ _aes_crypt: C = 3 ld [IDX1+12], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [IDX3+12], t3 ! 3 @@ -295,7 +328,6 @@ _aes_crypt: C i = 0 ld [IDX1+0], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [wtxt+0], t0 ! 0 @@ -335,7 +367,6 @@ _aes_crypt: C i = 1 ld [IDX1+4], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [wtxt+4], t0 ! 0 @@ -375,7 +406,6 @@ _aes_crypt: C i = 2 ld [IDX1+8], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [wtxt+8], t0 ! 0 @@ -415,7 +445,6 @@ _aes_crypt: C i = 3 ld [IDX1+12], t1 ! 1 - C add wtxt, t1, t1 ! 1 ldub [wtxt+t1], t1 ! 1 ld [wtxt+12], t0 ! 0 @@ -461,7 +490,6 @@ _aes_crypt: sub wtxt, src, %g3 .Lend: - C add %sp, FRAME_SIZE, %fp ret restore .LLFE1: -- GitLab