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