Index: openssl/crypto/bn/asm/co-586.pl |
diff --git a/openssl/crypto/bn/asm/co-586.pl b/openssl/crypto/bn/asm/co-586.pl |
deleted file mode 100644 |
index 57101a6bd7757f3d8b57671edcb7a67a06f842cc..0000000000000000000000000000000000000000 |
--- a/openssl/crypto/bn/asm/co-586.pl |
+++ /dev/null |
@@ -1,287 +0,0 @@ |
-#!/usr/local/bin/perl |
- |
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; |
-push(@INC,"${dir}","${dir}../../perlasm"); |
-require "x86asm.pl"; |
- |
-&asm_init($ARGV[0],$0); |
- |
-&bn_mul_comba("bn_mul_comba8",8); |
-&bn_mul_comba("bn_mul_comba4",4); |
-&bn_sqr_comba("bn_sqr_comba8",8); |
-&bn_sqr_comba("bn_sqr_comba4",4); |
- |
-&asm_finish(); |
- |
-sub mul_add_c |
- { |
- local($a,$ai,$b,$bi,$c0,$c1,$c2,$pos,$i,$na,$nb)=@_; |
- |
- # pos == -1 if eax and edx are pre-loaded, 0 to load from next |
- # words, and 1 if load return value |
- |
- &comment("mul a[$ai]*b[$bi]"); |
- |
- # "eax" and "edx" will always be pre-loaded. |
- # &mov("eax",&DWP($ai*4,$a,"",0)) ; |
- # &mov("edx",&DWP($bi*4,$b,"",0)); |
- |
- &mul("edx"); |
- &add($c0,"eax"); |
- &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 0; # laod next a |
- &mov("eax",&wparam(0)) if $pos > 0; # load r[] |
- ### |
- &adc($c1,"edx"); |
- &mov("edx",&DWP(($nb)*4,$b,"",0)) if $pos == 0; # laod next b |
- &mov("edx",&DWP(($nb)*4,$b,"",0)) if $pos == 1; # laod next b |
- ### |
- &adc($c2,0); |
- # is pos > 1, it means it is the last loop |
- &mov(&DWP($i*4,"eax","",0),$c0) if $pos > 0; # save r[]; |
- &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # laod next a |
- } |
- |
-sub sqr_add_c |
- { |
- local($r,$a,$ai,$bi,$c0,$c1,$c2,$pos,$i,$na,$nb)=@_; |
- |
- # pos == -1 if eax and edx are pre-loaded, 0 to load from next |
- # words, and 1 if load return value |
- |
- &comment("sqr a[$ai]*a[$bi]"); |
- |
- # "eax" and "edx" will always be pre-loaded. |
- # &mov("eax",&DWP($ai*4,$a,"",0)) ; |
- # &mov("edx",&DWP($bi*4,$b,"",0)); |
- |
- if ($ai == $bi) |
- { &mul("eax");} |
- else |
- { &mul("edx");} |
- &add($c0,"eax"); |
- &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 0; # load next a |
- ### |
- &adc($c1,"edx"); |
- &mov("edx",&DWP(($nb)*4,$a,"",0)) if ($pos == 1) && ($na != $nb); |
- ### |
- &adc($c2,0); |
- # is pos > 1, it means it is the last loop |
- &mov(&DWP($i*4,$r,"",0),$c0) if $pos > 0; # save r[]; |
- &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # load next b |
- } |
- |
-sub sqr_add_c2 |
- { |
- local($r,$a,$ai,$bi,$c0,$c1,$c2,$pos,$i,$na,$nb)=@_; |
- |
- # pos == -1 if eax and edx are pre-loaded, 0 to load from next |
- # words, and 1 if load return value |
- |
- &comment("sqr a[$ai]*a[$bi]"); |
- |
- # "eax" and "edx" will always be pre-loaded. |
- # &mov("eax",&DWP($ai*4,$a,"",0)) ; |
- # &mov("edx",&DWP($bi*4,$a,"",0)); |
- |
- if ($ai == $bi) |
- { &mul("eax");} |
- else |
- { &mul("edx");} |
- &add("eax","eax"); |
- ### |
- &adc("edx","edx"); |
- ### |
- &adc($c2,0); |
- &add($c0,"eax"); |
- &adc($c1,"edx"); |
- &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 0; # load next a |
- &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # load next b |
- &adc($c2,0); |
- &mov(&DWP($i*4,$r,"",0),$c0) if $pos > 0; # save r[]; |
- &mov("edx",&DWP(($nb)*4,$a,"",0)) if ($pos <= 1) && ($na != $nb); |
- ### |
- } |
- |
-sub bn_mul_comba |
- { |
- local($name,$num)=@_; |
- local($a,$b,$c0,$c1,$c2); |
- local($i,$as,$ae,$bs,$be,$ai,$bi); |
- local($tot,$end); |
- |
- &function_begin_B($name,""); |
- |
- $c0="ebx"; |
- $c1="ecx"; |
- $c2="ebp"; |
- $a="esi"; |
- $b="edi"; |
- |
- $as=0; |
- $ae=0; |
- $bs=0; |
- $be=0; |
- $tot=$num+$num-1; |
- |
- &push("esi"); |
- &mov($a,&wparam(1)); |
- &push("edi"); |
- &mov($b,&wparam(2)); |
- &push("ebp"); |
- &push("ebx"); |
- |
- &xor($c0,$c0); |
- &mov("eax",&DWP(0,$a,"",0)); # load the first word |
- &xor($c1,$c1); |
- &mov("edx",&DWP(0,$b,"",0)); # load the first second |
- |
- for ($i=0; $i<$tot; $i++) |
- { |
- $ai=$as; |
- $bi=$bs; |
- $end=$be+1; |
- |
- &comment("################## Calculate word $i"); |
- |
- for ($j=$bs; $j<$end; $j++) |
- { |
- &xor($c2,$c2) if ($j == $bs); |
- if (($j+1) == $end) |
- { |
- $v=1; |
- $v=2 if (($i+1) == $tot); |
- } |
- else |
- { $v=0; } |
- if (($j+1) != $end) |
- { |
- $na=($ai-1); |
- $nb=($bi+1); |
- } |
- else |
- { |
- $na=$as+($i < ($num-1)); |
- $nb=$bs+($i >= ($num-1)); |
- } |
-#printf STDERR "[$ai,$bi] -> [$na,$nb]\n"; |
- &mul_add_c($a,$ai,$b,$bi,$c0,$c1,$c2,$v,$i,$na,$nb); |
- if ($v) |
- { |
- &comment("saved r[$i]"); |
- # &mov("eax",&wparam(0)); |
- # &mov(&DWP($i*4,"eax","",0),$c0); |
- ($c0,$c1,$c2)=($c1,$c2,$c0); |
- } |
- $ai--; |
- $bi++; |
- } |
- $as++ if ($i < ($num-1)); |
- $ae++ if ($i >= ($num-1)); |
- |
- $bs++ if ($i >= ($num-1)); |
- $be++ if ($i < ($num-1)); |
- } |
- &comment("save r[$i]"); |
- # &mov("eax",&wparam(0)); |
- &mov(&DWP($i*4,"eax","",0),$c0); |
- |
- &pop("ebx"); |
- &pop("ebp"); |
- &pop("edi"); |
- &pop("esi"); |
- &ret(); |
- &function_end_B($name); |
- } |
- |
-sub bn_sqr_comba |
- { |
- local($name,$num)=@_; |
- local($r,$a,$c0,$c1,$c2)=@_; |
- local($i,$as,$ae,$bs,$be,$ai,$bi); |
- local($b,$tot,$end,$half); |
- |
- &function_begin_B($name,""); |
- |
- $c0="ebx"; |
- $c1="ecx"; |
- $c2="ebp"; |
- $a="esi"; |
- $r="edi"; |
- |
- &push("esi"); |
- &push("edi"); |
- &push("ebp"); |
- &push("ebx"); |
- &mov($r,&wparam(0)); |
- &mov($a,&wparam(1)); |
- &xor($c0,$c0); |
- &xor($c1,$c1); |
- &mov("eax",&DWP(0,$a,"",0)); # load the first word |
- |
- $as=0; |
- $ae=0; |
- $bs=0; |
- $be=0; |
- $tot=$num+$num-1; |
- |
- for ($i=0; $i<$tot; $i++) |
- { |
- $ai=$as; |
- $bi=$bs; |
- $end=$be+1; |
- |
- &comment("############### Calculate word $i"); |
- for ($j=$bs; $j<$end; $j++) |
- { |
- &xor($c2,$c2) if ($j == $bs); |
- if (($ai-1) < ($bi+1)) |
- { |
- $v=1; |
- $v=2 if ($i+1) == $tot; |
- } |
- else |
- { $v=0; } |
- if (!$v) |
- { |
- $na=$ai-1; |
- $nb=$bi+1; |
- } |
- else |
- { |
- $na=$as+($i < ($num-1)); |
- $nb=$bs+($i >= ($num-1)); |
- } |
- if ($ai == $bi) |
- { |
- &sqr_add_c($r,$a,$ai,$bi, |
- $c0,$c1,$c2,$v,$i,$na,$nb); |
- } |
- else |
- { |
- &sqr_add_c2($r,$a,$ai,$bi, |
- $c0,$c1,$c2,$v,$i,$na,$nb); |
- } |
- if ($v) |
- { |
- &comment("saved r[$i]"); |
- #&mov(&DWP($i*4,$r,"",0),$c0); |
- ($c0,$c1,$c2)=($c1,$c2,$c0); |
- last; |
- } |
- $ai--; |
- $bi++; |
- } |
- $as++ if ($i < ($num-1)); |
- $ae++ if ($i >= ($num-1)); |
- |
- $bs++ if ($i >= ($num-1)); |
- $be++ if ($i < ($num-1)); |
- } |
- &mov(&DWP($i*4,$r,"",0),$c0); |
- &pop("ebx"); |
- &pop("ebp"); |
- &pop("edi"); |
- &pop("esi"); |
- &ret(); |
- &function_end_B($name); |
- } |