1#!/usr/local/bin/perl 2# alpha assember 3 4sub bn_sqr_words 5 { 6 local($name)=@_; 7 local($cc,$a,$b,$r,$couny); 8 9 &init_pool(3); 10 ($cc)=GR("r0"); 11 12 $rp=&wparam(0); 13 $ap=&wparam(1); 14 $count=&wparam(2); 15 16 &function_begin($name,""); 17 18 &comment(""); 19 &sub($count,4,$count); 20 &mov("zero",$cc); 21 &br(&label("finish")); 22 &blt($count,&label("finish")); 23 24 ($a0,$r0)=&NR(2); 25 &ld($a0,&QWPw(0,$ap)); 26 &ld($r0,&QWPw(0,$rp)); 27 28$a=<<'EOF'; 29########################################################## 30 &set_label("loop"); 31 32 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap)); 33 ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp)); 34 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap)); 35 ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp)); 36 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap)); 37 ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp)); 38 39 ($o0,$t0)=&NR(2); 40 &add($a0,$b0,$o0); 41 &cmpult($o0,$b0,$t0); 42 &add($o0,$cc,$o0); 43 &cmpult($o0,$cc,$cc); 44 &add($cc,$t0,$cc); &FR($t0); 45 46 ($t1,$o1)=&NR(2); 47 48 &add($a1,$b1,$o1); &FR($a1); 49 &cmpult($o1,$b1,$t1); &FR($b1); 50 &add($o1,$cc,$o1); 51 &cmpult($o1,$cc,$cc); 52 &add($cc,$t1,$cc); &FR($t1); 53 54 ($t2,$o2)=&NR(2); 55 56 &add($a2,$b2,$o2); &FR($a2); 57 &cmpult($o2,$b2,$t2); &FR($b2); 58 &add($o2,$cc,$o2); 59 &cmpult($o2,$cc,$cc); 60 &add($cc,$t2,$cc); &FR($t2); 61 62 ($t3,$o3)=&NR(2); 63 64 &add($a3,$b3,$o3); &FR($a3); 65 &cmpult($o3,$b3,$t3); &FR($b3); 66 &add($o3,$cc,$o3); 67 &cmpult($o3,$cc,$cc); 68 &add($cc,$t3,$cc); &FR($t3); 69 70 &st($o0,&QWPw(0,$rp)); &FR($o0); 71 &st($o1,&QWPw(0,$rp)); &FR($o1); 72 &st($o2,&QWPw(0,$rp)); &FR($o2); 73 &st($o3,&QWPw(0,$rp)); &FR($o3); 74 75 &sub($count,4,$count); # count-=4 76 &add($ap,4*$QWS,$ap); # count+=4 77 &add($bp,4*$QWS,$bp); # count+=4 78 &add($rp,4*$QWS,$rp); # count+=4 79 80 &blt($count,&label("finish")); 81 &ld($a0,&QWPw(0,$ap)); 82 &ld($b0,&QWPw(0,$bp)); 83 &br(&label("loop")); 84EOF 85################################################## 86 # Do the last 0..3 words 87 88 &set_label("last_loop"); 89 90 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a 91 &mul($a0,$a0,($l0)=&NR(1)); 92 &add($ap,$QWS,$ap); 93 &add($rp,2*$QWS,$rp); 94 &sub($count,1,$count); 95 &muh($a0,$a0,($h0)=&NR(1)); &FR($a0); 96 &st($l0,&QWPw(-2,$rp)); &FR($l0); 97 &st($h0,&QWPw(-1,$rp)); &FR($h0); 98 99 &bgt($count,&label("last_loop")); 100 &function_end_A($name); 101 102###################################################### 103 &set_label("finish"); 104 &add($count,4,$count); 105 &bgt($count,&label("last_loop")); 106 107 &set_label("end"); 108 &function_end($name); 109 110 &fin_pool; 111 } 112 1131; 114