1#!/usr/local/bin/perl 2# alpha assember 3 4sub sqr_add_c 5 { 6 local($a,$c0,$c1,$c2)=@_; 7 local($l1,$h1,$t1,$t2); 8 9 &mul($a,$a,($l1)=&NR(1)); 10 &muh($a,$a,($h1)=&NR(1)); 11 &add($c0,$l1,$c0); 12 &add($c1,$h1,$c1); 13 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); 14 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); 15 &add($c1,$t1,$c1); &FR($t1); 16 &add($c2,$t2,$c2); &FR($t2); 17 } 18 19sub sqr_add_c2 20 { 21 local($a,$b,$c0,$c1,$c2)=@_; 22 local($l1,$h1,$t1,$t2); 23 24 &mul($a,$b,($l1)=&NR(1)); 25 &muh($a,$b,($h1)=&NR(1)); 26 &cmplt($l1,"zero",($lc1)=&NR(1)); 27 &cmplt($h1,"zero",($hc1)=&NR(1)); 28 &add($l1,$l1,$l1); 29 &add($h1,$h1,$h1); 30 &add($h1,$lc1,$h1); &FR($lc1); 31 &add($c2,$hc1,$c2); &FR($hc1); 32 33 &add($c0,$l1,$c0); 34 &add($c1,$h1,$c1); 35 &cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1); 36 &cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1); 37 38 &add($c1,$lc1,$c1); &FR($lc1); 39 &add($c2,$hc1,$c2); &FR($hc1); 40 } 41 42 43sub bn_sqr_comba4 44 { 45 local($name)=@_; 46 local(@a,@b,$r,$c0,$c1,$c2); 47 48 $cnt=1; 49 &init_pool(2); 50 51 $rp=&wparam(0); 52 $ap=&wparam(1); 53 54 &function_begin($name,""); 55 56 &comment(""); 57 58 &ld(($a[0])=&NR(1),&QWPw(0,$ap)); 59 &ld(($a[1])=&NR(1),&QWPw(1,$ap)); 60 &ld(($a[2])=&NR(1),&QWPw(2,$ap)); 61 &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap); 62 63 ($c0,$c1,$c2)=&NR(3); 64 65 &mov("zero",$c2); 66 &mul($a[0],$a[0],$c0); 67 &muh($a[0],$a[0],$c1); 68 &st($c0,&QWPw(0,$rp)); 69 ($c0,$c1,$c2)=($c1,$c2,$c0); 70 &mov("zero",$c2); 71 72 &sqr_add_c2($a[0],$a[1],$c0,$c1,$c2); 73 &st($c0,&QWPw(1,$rp)); 74 ($c0,$c1,$c2)=($c1,$c2,$c0); 75 &mov("zero",$c2); 76 77 &sqr_add_c($a[1],$c0,$c1,$c2); 78 &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2); 79 &st($c0,&QWPw(2,$rp)); 80 ($c0,$c1,$c2)=($c1,$c2,$c0); 81 &mov("zero",$c2); 82 83 &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2); 84 &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2); 85 &st($c0,&QWPw(3,$rp)); 86 ($c0,$c1,$c2)=($c1,$c2,$c0); 87 &mov("zero",$c2); 88 89 &sqr_add_c($a[2],$c0,$c1,$c2); 90 &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2); 91 &st($c0,&QWPw(4,$rp)); 92 ($c0,$c1,$c2)=($c1,$c2,$c0); 93 &mov("zero",$c2); 94 95 &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2); 96 &st($c0,&QWPw(5,$rp)); 97 ($c0,$c1,$c2)=($c1,$c2,$c0); 98 &mov("zero",$c2); 99 100 &sqr_add_c($a[3],$c0,$c1,$c2); 101 &st($c0,&QWPw(6,$rp)); 102 &st($c1,&QWPw(7,$rp)); 103 104 &function_end($name); 105 106 &fin_pool; 107 } 108 1091; 110