diff --git a/sparc/aes.asm b/sparc/aes.asm index 51021a90690d29ef19dc6867143572385f342692..851f46d5594ec49a2b0b6c02385b2e950aa9548b 100644 --- a/sparc/aes.asm +++ b/sparc/aes.asm @@ -110,9 +110,6 @@ C Input in wtxt, output stored in tmp + i. C C The comments mark which j in T->table[j][ Bj(wtxt[IDXi(i)]) ] C the instruction is a part of. -C -C The code uses the register %o[j], aka tj, as the primary -C register for that sub-expression. True for j==1,3. define(<AES_FINAL_ROUND>, < ld [IDX1+$1], t1 ! 1 ldub [wtxt+t1], t1 ! 1 @@ -238,173 +235,12 @@ _aes_crypt: bne .Lround_loop add key, 16, key - ! Final round - - ! Comments mark which j in T->sbox[Bj(wtxt[IDXj(i)])] - ! the instruction is part of. - - C Unrolled final loop begins + C Final round - C i = 0 - AES_FINAL_ROUND(0) -C ld [IDX1+0], t1 ! 1 -C ldub [wtxt+t1], t1 ! 1 -C -C ld [wtxt+0], t0 ! 0 -C ! IDX2(j) = j XOR 2 -C lduh [wtxt+8], t2 ! 2 -C and t0, 255, t0 ! 0 -C ld [IDX3 + 0], t3 ! 3 -C -C and t2, 255, t2 ! 2 -C ldub [T+t1], t1 ! 1 -C ldub [T+t0], t0 ! 0 -C sll t1, 8, t1 ! 1 -C -C ldub [wtxt+t3], t3 ! 3 -C or t0, t1, t0 ! 0, 1 -C ldub [T+t2], t2 ! 2 -C ldub [T+t3], t3 ! 3 -C -C sll t2, 16, t2 ! 2 -C or t0, t2, t0 ! 0, 1, 2 -C ld [key + 0], t2 -C sll t3, 24, t3 ! 3 -C -C or t0, t3, t0 ! 0, 1, 2, 3 -C xor t0, t2, t0 -C -C srl t0, 24, t3 -C srl t0, 16, t2 -C srl t0, 8, t1 -C stb t1, [dst+1] -C -C stb t3, [dst+3] -C stb t2, [dst+2] -C stb t0, [dst] -C add dst, 4, dst - - C i = 1 + AES_FINAL_ROUND(0) ! i = 0 AES_FINAL_ROUND(4) ! i = 1 -C ld [IDX1+4], t1 ! 1 -C -C ldub [wtxt+t1], t1 ! 1 -C -C ld [wtxt+4], t0 ! 0 -C ! IDX2(j) = j XOR 2 -C lduh [wtxt+12], t2 ! 2 -C and t0, 255, t0 ! 0 -C ld [IDX3 + 4], t3 ! 3 -C -C and t2, 255, t2 ! 2 -C ldub [T+t1], t1 ! 1 -C ldub [T+t0], t0 ! 0 -C sll t1, 8, t1 ! 1 -C -C ldub [wtxt+t3], t3 ! 3 -C or t0, t1, t0 ! 0, 1 -C ldub [T+t2], t2 ! 2 -C ldub [T+t3], t3 ! 3 -C -C sll t2, 16, t2 ! 2 -C or t0, t2, t0 ! 0, 1, 2 -C ld [key + 4], t2 -C sll t3, 24, t3 ! 3 -C -C or t0, t3, t0 ! 0, 1, 2, 3 -C xor t0, t2, t0 -C -C srl t0, 24, t3 -C srl t0, 16, t2 -C srl t0, 8, t1 -C stb t1, [dst+1] -C -C stb t3, [dst+3] -C stb t2, [dst+2] -C stb t0, [dst] -C add dst, 4, dst - - C i = 2 AES_FINAL_ROUND(8) ! i = 2 -C ld [IDX1+8], t1 ! 1 -C -C ldub [wtxt+t1], t1 ! 1 -C -C ld [wtxt+8], t0 ! 0 -C ! IDX2(j) = j XOR 2 -C lduh [wtxt+0], t2 ! 2 -C and t0, 255, t0 ! 0 -C ld [IDX3 + 8], t3 ! 3 -C -C and t2, 255, t2 ! 2 -C ldub [T+t1], t1 ! 1 -C ldub [T+t0], t0 ! 0 -C sll t1, 8, t1 ! 1 -C -C ldub [wtxt+t3], t3 ! 3 -C or t0, t1, t0 ! 0, 1 -C ldub [T+t2], t2 ! 2 -C ldub [T+t3], t3 ! 3 -C -C sll t2, 16, t2 ! 2 -C or t0, t2, t0 ! 0, 1, 2 -C ld [key + 8], t2 -C sll t3, 24, t3 ! 3 -C -C or t0, t3, t0 ! 0, 1, 2, 3 -C xor t0, t2, t0 -C -C srl t0, 24, t3 -C srl t0, 16, t2 -C srl t0, 8, t1 -C stb t1, [dst+1] -C -C stb t3, [dst+3] -C stb t2, [dst+2] -C stb t0, [dst] -C add dst, 4, dst - - C i = 3 AES_FINAL_ROUND(12) ! i = 3 -C ld [IDX1+12], t1 ! 1 -C -C ldub [wtxt+t1], t1 ! 1 -C -C ld [wtxt+12], t0 ! 0 -C ! IDX2(j) = j XOR 2 -C lduh [wtxt+4], t2 ! 2 -C and t0, 255, t0 ! 0 -C ld [IDX3 + 12], t3 ! 3 -C -C and t2, 255, t2 ! 2 -C ldub [T+t1], t1 ! 1 -C ldub [T+t0], t0 ! 0 -C sll t1, 8, t1 ! 1 -C -C ldub [wtxt+t3], t3 ! 3 -C or t0, t1, t0 ! 0, 1 -C ldub [T+t2], t2 ! 2 -C ldub [T+t3], t3 ! 3 -C -C sll t2, 16, t2 ! 2 -C or t0, t2, t0 ! 0, 1, 2 -C ld [key + 12], t2 -C sll t3, 24, t3 ! 3 -C -C or t0, t3, t0 ! 0, 1, 2, 3 -C xor t0, t2, t0 -C -C srl t0, 24, t3 -C srl t0, 16, t2 -C srl t0, 8, t1 -C stb t1, [dst+1] -C -C stb t3, [dst+3] -C stb t2, [dst+2] -C stb t0, [dst] -C add dst, 4, dst - - C Unrolled final loop ends addcc length, -16, length sub ctx, src, %g2