提交 04c3aa5c 编写于 作者: A Andy Polyakov

e_padlock-x86.pl: previous C3-specific fix was incomplete.

上级 3edc26a2
...@@ -177,7 +177,7 @@ my ($mode,$opcode) = @_; ...@@ -177,7 +177,7 @@ my ($mode,$opcode) = @_;
&lea ($ctx,&DWP(16,$ctx)); # control word &lea ($ctx,&DWP(16,$ctx)); # control word
&xor ("eax","eax"); &xor ("eax","eax");
if ($mode eq "ctr16") { if ($mode eq "ctr16") {
&movq ("xmm0",&QWP(-16,$ctx));# load [upper part of] counter &movq ("mm0",&QWP(-16,$ctx)); # load [upper part of] counter
} else { } else {
&xor ("ebx","ebx"); &xor ("ebx","ebx");
&test (&DWP(0,$ctx),1<<5); # align bit in control word &test (&DWP(0,$ctx),1<<5); # align bit in control word
...@@ -216,7 +216,7 @@ my ($mode,$opcode) = @_; ...@@ -216,7 +216,7 @@ my ($mode,$opcode) = @_;
&set_label("${mode}_prepare"); &set_label("${mode}_prepare");
&mov (&DWP(12,"esp",$out),"ecx"); &mov (&DWP(12,"esp",$out),"ecx");
&bswap ("ecx"); &bswap ("ecx");
&movq (&QWP(0,"esp",$out),"xmm0"); &movq (&QWP(0,"esp",$out),"mm0");
&inc ("ecx"); &inc ("ecx");
&mov (&DWP(8,"esp",$out),"eax"); &mov (&DWP(8,"esp",$out),"eax");
&bswap ("ecx"); &bswap ("ecx");
...@@ -304,6 +304,7 @@ my ($mode,$opcode) = @_; ...@@ -304,6 +304,7 @@ my ($mode,$opcode) = @_;
&set_label("${mode}_exit"); } &set_label("${mode}_exit"); }
&mov ("eax",1); &mov ("eax",1);
&lea ("esp",&DWP(4,"esp")); # popf &lea ("esp",&DWP(4,"esp")); # popf
&emms () if ($mode eq "ctr16");
&set_label("${mode}_abort"); &set_label("${mode}_abort");
&function_end("padlock_${mode}_encrypt"); &function_end("padlock_${mode}_encrypt");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册