diff --git a/sparc/aes.asm b/sparc/aes.asm index 59e18683b7fdeb2e3ea33e39cb8270403c87e27b..108c69d0e8b09be00bbd15bfc967d641b3042c7a 100644 --- a/sparc/aes.asm +++ b/sparc/aes.asm @@ -123,7 +123,10 @@ _aes_crypt: ld [idx-32], t1 ! 1 ! AES_SIDX2 - ld [idx-16], t2 ! 2 + ! ld [idx-16], t2 ! 2 + ! IDX2(j) = j XOR 2 + xor i, 8, t2 + ! wtxt[IDX1...] add wtxt, t1, t1 ! 1 ldub [t1+2], t1 ! 1 @@ -162,6 +165,9 @@ _aes_crypt: add idx, 4, idx ! Fetch roundkey + ! FIXME: We could save one instruction + ! if we kept a pointer to the current subkey, + ! indexed by i. ld [ctx+round], t1 add round, 4, round @@ -290,3 +296,36 @@ _aes_crypt: ! aes256 (ECB decrypt): 14.81s, 0.675MB/s ! aes256 (CBC encrypt): 22.65s, 0.442MB/s ! aes256 (CBC decrypt): 16.46s, 0.608MB/s + + ! After implementing double buffering + ! aes128 (ECB encrypt): 12.59s, 0.794MB/s + ! aes128 (ECB decrypt): 10.56s, 0.947MB/s + ! aes128 (CBC encrypt): 17.91s, 0.558MB/s + ! aes128 (CBC decrypt): 12.30s, 0.813MB/s + ! + ! aes192 (ECB encrypt): 15.03s, 0.665MB/s + ! aes192 (ECB decrypt): 12.56s, 0.796MB/s + ! aes192 (CBC encrypt): 20.30s, 0.493MB/s + ! aes192 (CBC decrypt): 14.26s, 0.701MB/s + ! + ! aes256 (ECB encrypt): 17.30s, 0.578MB/s + ! aes256 (ECB decrypt): 14.51s, 0.689MB/s + ! aes256 (CBC encrypt): 22.75s, 0.440MB/s + ! aes256 (CBC decrypt): 16.35s, 0.612MB/s + + ! After reordering aes-encrypt.c and aes-decypt.c + ! (the order probably causes strange cache-effects): + ! aes128 (ECB encrypt): 9.21s, 1.086MB/s + ! aes128 (ECB decrypt): 11.13s, 0.898MB/s + ! aes128 (CBC encrypt): 14.12s, 0.708MB/s + ! aes128 (CBC decrypt): 13.77s, 0.726MB/s + ! + ! aes192 (ECB encrypt): 10.86s, 0.921MB/s + ! aes192 (ECB decrypt): 13.17s, 0.759MB/s + ! aes192 (CBC encrypt): 15.74s, 0.635MB/s + ! aes192 (CBC decrypt): 15.91s, 0.629MB/s + ! + ! aes256 (ECB encrypt): 12.71s, 0.787MB/s + ! aes256 (ECB decrypt): 15.38s, 0.650MB/s + ! aes256 (CBC encrypt): 17.49s, 0.572MB/s + ! aes256 (CBC decrypt): 17.87s, 0.560MB/s