vpaes-x86.pl: revert previous commit and solve the problem through x86masm.pl.
authorAndy Polyakov <appro@openssl.org>
Thu, 15 Dec 2011 22:20:05 +0000 (22:20 +0000)
committerAndy Polyakov <appro@openssl.org>
Thu, 15 Dec 2011 22:20:05 +0000 (22:20 +0000)
PR: 2657

crypto/aes/asm/vpaes-x86.pl
crypto/perlasm/x86masm.pl

index 30446e60db3fa16880494296a8af75ab2fa331cd..84a6f6d336ca421b9e22de2515b5dbef6e6f45db 100644 (file)
@@ -762,7 +762,7 @@ $k_dsbo=0x2c0;              # decryption sbox final output
        &mov    ($magic,0x30);
        &mov    ($out,0);
 
        &mov    ($magic,0x30);
        &mov    ($out,0);
 
-       &mov    ($const,&label("_vpaes_consts")."+0x30-".&label("pic_point"));
+       &lea    ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point")));
        &call   ("_vpaes_schedule_core");
 &set_label("pic_point");
 
        &call   ("_vpaes_schedule_core");
 &set_label("pic_point");
 
@@ -792,7 +792,7 @@ $k_dsbo=0x2c0;              # decryption sbox final output
        &and    ($magic,32);
        &xor    ($magic,32);                    # nbist==192?0:32;
 
        &and    ($magic,32);
        &xor    ($magic,32);                    # nbist==192?0:32;
 
-       &mov    ($const,&label("_vpaes_consts")."+0x30-".&label("pic_point"));
+       &lea    ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point")));
        &call   ("_vpaes_schedule_core");
 &set_label("pic_point");
 
        &call   ("_vpaes_schedule_core");
 &set_label("pic_point");
 
@@ -801,7 +801,7 @@ $k_dsbo=0x2c0;              # decryption sbox final output
 &function_end("${PREFIX}_set_decrypt_key");
 
 &function_begin("${PREFIX}_encrypt");
 &function_end("${PREFIX}_set_decrypt_key");
 
 &function_begin("${PREFIX}_encrypt");
-       &mov    ($const,&label("_vpaes_consts")."+0x30-".&label("pic_point"));
+       &lea    ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point")));
        &call   ("_vpaes_preheat");
 &set_label("pic_point");
        &mov    ($inp,&wparam(0));              # inp
        &call   ("_vpaes_preheat");
 &set_label("pic_point");
        &mov    ($inp,&wparam(0));              # inp
@@ -820,7 +820,7 @@ $k_dsbo=0x2c0;              # decryption sbox final output
 &function_end("${PREFIX}_encrypt");
 
 &function_begin("${PREFIX}_decrypt");
 &function_end("${PREFIX}_encrypt");
 
 &function_begin("${PREFIX}_decrypt");
-       &mov    ($const,&label("_vpaes_consts")."+0x30-".&label("pic_point"));
+       &lea    ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point")));
        &call   ("_vpaes_preheat");
 &set_label("pic_point");
        &mov    ($inp,&wparam(0));              # inp
        &call   ("_vpaes_preheat");
 &set_label("pic_point");
        &mov    ($inp,&wparam(0));              # inp
@@ -858,7 +858,7 @@ $k_dsbo=0x2c0;              # decryption sbox final output
        &mov    (&DWP(8,"esp"),$const);         # save ivp
        &mov    ($out,$round);                  # $out works as $len
 
        &mov    (&DWP(8,"esp"),$const);         # save ivp
        &mov    ($out,$round);                  # $out works as $len
 
-       &mov    ($const,&label("_vpaes_consts")."+0x30-".&label("pic_point"));
+       &lea    ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point")));
        &call   ("_vpaes_preheat");
 &set_label("pic_point");
        &cmp    ($magic,0);
        &call   ("_vpaes_preheat");
 &set_label("pic_point");
        &cmp    ($magic,0);
index ee446de5c1d036544a5a543a66367a03a2717413..328ca2e23fd6012a549618260d8c2d606c066036 100644 (file)
@@ -16,7 +16,9 @@ sub ::generic
     # fix hexadecimal constants
     for (@arg) { s/(?<![\w\$\.])0x([0-9a-f]+)/0$1h/oi; }
 
     # fix hexadecimal constants
     for (@arg) { s/(?<![\w\$\.])0x([0-9a-f]+)/0$1h/oi; }
 
-    if ($opcode !~ /movq/)
+    if ($opcode =~ /lea/ && @arg[1] =~ s/.*PTR\s+([^\[]+)$/$1/)        # no []
+    {  $opcode="mov";  }
+    elsif ($opcode !~ /movq/)
     {  # fix xmm references
        $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
        $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
     {  # fix xmm references
        $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
        $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);