diff options
author | Parménides GV <parmegv@sdf.org> | 2014-04-09 17:07:48 +0200 |
---|---|---|
committer | Parménides GV <parmegv@sdf.org> | 2014-04-09 17:15:17 +0200 |
commit | 51ff5a18f1f074e27e97d822745551a7e8fa068d (patch) | |
tree | 402e7dd42778a218635bb29a4c2dff93ea7f6525 /app/openssl/crypto/bn/asm/x86/sqr.pl | |
parent | 910b0e1746ab3f63e63808b198ad51fec5b635e5 (diff) | |
parent | b5ba0abc1610dd4bf573ebcabc5e8f6ab0c9528f (diff) |
Merge branch 'feature/implement-gradle-build-system-#4676' into develop
Diffstat (limited to 'app/openssl/crypto/bn/asm/x86/sqr.pl')
-rw-r--r-- | app/openssl/crypto/bn/asm/x86/sqr.pl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/app/openssl/crypto/bn/asm/x86/sqr.pl b/app/openssl/crypto/bn/asm/x86/sqr.pl new file mode 100644 index 00000000..1f90993c --- /dev/null +++ b/app/openssl/crypto/bn/asm/x86/sqr.pl @@ -0,0 +1,60 @@ +#!/usr/local/bin/perl +# x86 assember + +sub bn_sqr_words + { + local($name)=@_; + + &function_begin($name,""); + + &comment(""); + $r="esi"; + $a="edi"; + $num="ebx"; + + &mov($r,&wparam(0)); # + &mov($a,&wparam(1)); # + &mov($num,&wparam(2)); # + + &and($num,0xfffffff8); # num / 8 + &jz(&label("sw_finish")); + + &set_label("sw_loop",0); + for ($i=0; $i<32; $i+=4) + { + &comment("Round $i"); + &mov("eax",&DWP($i,$a,"",0)); # *a + # XXX + &mul("eax"); # *a * *a + &mov(&DWP($i*2,$r,"",0),"eax"); # + &mov(&DWP($i*2+4,$r,"",0),"edx");# + } + + &comment(""); + &add($a,32); + &add($r,64); + &sub($num,8); + &jnz(&label("sw_loop")); + + &set_label("sw_finish",0); + &mov($num,&wparam(2)); # get num + &and($num,7); + &jz(&label("sw_end")); + + for ($i=0; $i<7; $i++) + { + &comment("Tail Round $i"); + &mov("eax",&DWP($i*4,$a,"",0)); # *a + # XXX + &mul("eax"); # *a * *a + &mov(&DWP($i*8,$r,"",0),"eax"); # + &dec($num) if ($i != 7-1); + &mov(&DWP($i*8+4,$r,"",0),"edx"); + &jz(&label("sw_end")) if ($i != 7-1); + } + &set_label("sw_end",0); + + &function_end($name); + } + +1; |