Re: [PATCH v2 07/38] target/i386: Use aesenc_SB_SR_AK

2023-06-19 Thread Philippe Mathieu-Daudé

On 19/6/23 12:43, Philippe Mathieu-Daudé wrote:

On 9/6/23 04:23, Richard Henderson wrote:

This implements the AESENCLAST instruction.

Signed-off-by: Richard Henderson 
---
  target/i386/ops_sse.h | 11 ++-
  1 file changed, 6 insertions(+), 5 deletions(-)



  void glue(helper_aesenclast, SUFFIX)(CPUX86State *env, Reg *d, Reg 
*v, Reg *s)

  {
-    int i;
-    Reg st = *v;
-    Reg rk = *s;
+    for (int i = 0; i < SHIFT; i++) {
+    AESState *ad = (AESState *)>ZMM_X(i);
+    AESState *st = (AESState *)>ZMM_X(i);
+    AESState *rk = (AESState *)>ZMM_X(i);
-    for (i = 0; i < 8 << SHIFT; i++) {
-    d->B(i) = rk.B(i) ^ (AES_sbox[st.B(AES_shifts[i & 15] + (i & 
~15))]);

+    aesenc_SB_SR_AK(ad, st, rk, false);


Why not use aesenc_SB_SR_AK_gen(ad, st, rk)?


Whatever, I misread the last 'be' boolean as 'swap', so this is perfect.


Regardless:
Reviewed-by: Philippe Mathieu-Daudé 


  }
  }







Re: [PATCH v2 07/38] target/i386: Use aesenc_SB_SR_AK

2023-06-19 Thread Philippe Mathieu-Daudé

On 9/6/23 04:23, Richard Henderson wrote:

This implements the AESENCLAST instruction.

Signed-off-by: Richard Henderson 
---
  target/i386/ops_sse.h | 11 ++-
  1 file changed, 6 insertions(+), 5 deletions(-)




  void glue(helper_aesenclast, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s)
  {
-int i;
-Reg st = *v;
-Reg rk = *s;
+for (int i = 0; i < SHIFT; i++) {
+AESState *ad = (AESState *)>ZMM_X(i);
+AESState *st = (AESState *)>ZMM_X(i);
+AESState *rk = (AESState *)>ZMM_X(i);
  
-for (i = 0; i < 8 << SHIFT; i++) {

-d->B(i) = rk.B(i) ^ (AES_sbox[st.B(AES_shifts[i & 15] + (i & ~15))]);
+aesenc_SB_SR_AK(ad, st, rk, false);


Why not use aesenc_SB_SR_AK_gen(ad, st, rk)?

Regardless:
Reviewed-by: Philippe Mathieu-Daudé 


  }
  }
  





[PATCH v2 07/38] target/i386: Use aesenc_SB_SR_AK

2023-06-08 Thread Richard Henderson
This implements the AESENCLAST instruction.

Signed-off-by: Richard Henderson 
---
 target/i386/ops_sse.h | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/target/i386/ops_sse.h b/target/i386/ops_sse.h
index fb63af7afa..63fdecbe03 100644
--- a/target/i386/ops_sse.h
+++ b/target/i386/ops_sse.h
@@ -19,6 +19,7 @@
  */
 
 #include "crypto/aes.h"
+#include "crypto/aes-round.h"
 
 #if SHIFT == 0
 #define Reg MMXReg
@@ -2202,12 +2203,12 @@ void glue(helper_aesenc, SUFFIX)(CPUX86State *env, Reg 
*d, Reg *v, Reg *s)
 
 void glue(helper_aesenclast, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s)
 {
-int i;
-Reg st = *v;
-Reg rk = *s;
+for (int i = 0; i < SHIFT; i++) {
+AESState *ad = (AESState *)>ZMM_X(i);
+AESState *st = (AESState *)>ZMM_X(i);
+AESState *rk = (AESState *)>ZMM_X(i);
 
-for (i = 0; i < 8 << SHIFT; i++) {
-d->B(i) = rk.B(i) ^ (AES_sbox[st.B(AES_shifts[i & 15] + (i & ~15))]);
+aesenc_SB_SR_AK(ad, st, rk, false);
 }
 }
 
-- 
2.34.1