1#!/usr/local/bin/perl 2# alpha assember 3 4# upto 5 6sub mul_add_c 7 { 8 local($a,$b,$c0,$c1,$c2)=@_; 9 local($l1,$h1,$t1,$t2); 10 11 &mul($a,$b,($l1)=&NR(1)); 12 &muh($a,$b,($h1)=&NR(1)); 13 &add($c0,$l1,$c0); 14 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1); 15 &add($t1,$h1,$h1); &FR($t1); 16 &add($c1,$h1,$c1); 17 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1); 18 &add($c2,$t2,$c2); &FR($t2); 19 } 20 21sub bn_mul_comba4 22 { 23 local($name)=@_; 24 local(@a,@b,$r,$c0,$c1,$c2); 25 26 $cnt=1; 27 &init_pool(3); 28 29 $rp=&wparam(0); 30 $ap=&wparam(1); 31 $bp=&wparam(2); 32 33 &function_begin($name,""); 34 35 &comment(""); 36 37 &ld(($a[0])=&NR(1),&QWPw(0,$ap)); 38 &ld(($b[0])=&NR(1),&QWPw(0,$bp)); 39 &ld(($a[1])=&NR(1),&QWPw(1,$ap)); 40 &ld(($b[1])=&NR(1),&QWPw(1,$bp)); 41 &mul($a[0],$b[0],($r00)=&NR(1)); 42 &ld(($a[2])=&NR(1),&QWPw(2,$ap)); 43 &ld(($b[2])=&NR(1),&QWPw(2,$bp)); 44 &muh($a[0],$b[0],($r01)=&NR(1)); 45 &FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap)); 46 &FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp)); 47 &mul($a[0],$b[1],($r02)=&NR(1)); 48 49 ($R,$H1,$H2)=&NR(3); 50 51 &st($r00,&QWPw(0,$rp)); &FR($r00); 52 53 &mov("zero",$R); 54 &mul($a[1],$b[0],($r03)=&NR(1)); 55 56 &mov("zero",$H1); 57 &mov("zero",$H0); 58 &add($R,$r01,$R); 59 &muh($a[0],$b[1],($r04)=&NR(1)); 60 &cmpult($R,$r01,($t01)=&NR(1)); &FR($r01); 61 &add($R,$r02,$R); 62 &add($H1,$t01,$H1) &FR($t01); 63 &muh($a[1],$b[0],($r05)=&NR(1)); 64 &cmpult($R,$r02,($t02)=&NR(1)); &FR($r02); 65 &add($R,$r03,$R); 66 &add($H2,$t02,$H2) &FR($t02); 67 &mul($a[0],$b[2],($r06)=&NR(1)); 68 &cmpult($R,$r03,($t03)=&NR(1)); &FR($r03); 69 &add($H1,$t03,$H1) &FR($t03); 70 &st($R,&QWPw(1,$rp)); 71 &add($H1,$H2,$R); 72 73 &mov("zero",$H1); 74 &add($R,$r04,$R); 75 &mov("zero",$H2); 76 &mul($a[1],$b[1],($r07)=&NR(1)); 77 &cmpult($R,$r04,($t04)=&NR(1)); &FR($r04); 78 &add($R,$r05,$R); 79 &add($H1,$t04,$H1) &FR($t04); 80 &mul($a[2],$b[0],($r08)=&NR(1)); 81 &cmpult($R,$r05,($t05)=&NR(1)); &FR($r05); 82 &add($R,$r01,$R); 83 &add($H2,$t05,$H2) &FR($t05); 84 &muh($a[0],$b[2],($r09)=&NR(1)); 85 &cmpult($R,$r06,($t06)=&NR(1)); &FR($r06); 86 &add($R,$r07,$R); 87 &add($H1,$t06,$H1) &FR($t06); 88 &muh($a[1],$b[1],($r10)=&NR(1)); 89 &cmpult($R,$r07,($t07)=&NR(1)); &FR($r07); 90 &add($R,$r08,$R); 91 &add($H2,$t07,$H2) &FR($t07); 92 &muh($a[2],$b[0],($r11)=&NR(1)); 93 &cmpult($R,$r08,($t08)=&NR(1)); &FR($r08); 94 &add($H1,$t08,$H1) &FR($t08); 95 &st($R,&QWPw(2,$rp)); 96 &add($H1,$H2,$R); 97 98 &mov("zero",$H1); 99 &add($R,$r09,$R); 100 &mov("zero",$H2); 101 &mul($a[0],$b[3],($r12)=&NR(1)); 102 &cmpult($R,$r09,($t09)=&NR(1)); &FR($r09); 103 &add($R,$r10,$R); 104 &add($H1,$t09,$H1) &FR($t09); 105 &mul($a[1],$b[2],($r13)=&NR(1)); 106 &cmpult($R,$r10,($t10)=&NR(1)); &FR($r10); 107 &add($R,$r11,$R); 108 &add($H1,$t10,$H1) &FR($t10); 109 &mul($a[2],$b[1],($r14)=&NR(1)); 110 &cmpult($R,$r11,($t11)=&NR(1)); &FR($r11); 111 &add($R,$r12,$R); 112 &add($H1,$t11,$H1) &FR($t11); 113 &mul($a[3],$b[0],($r15)=&NR(1)); 114 &cmpult($R,$r12,($t12)=&NR(1)); &FR($r12); 115 &add($R,$r13,$R); 116 &add($H1,$t12,$H1) &FR($t12); 117 &muh($a[0],$b[3],($r16)=&NR(1)); 118 &cmpult($R,$r13,($t13)=&NR(1)); &FR($r13); 119 &add($R,$r14,$R); 120 &add($H1,$t13,$H1) &FR($t13); 121 &muh($a[1],$b[2],($r17)=&NR(1)); 122 &cmpult($R,$r14,($t14)=&NR(1)); &FR($r14); 123 &add($R,$r15,$R); 124 &add($H1,$t14,$H1) &FR($t14); 125 &muh($a[2],$b[1],($r18)=&NR(1)); 126 &cmpult($R,$r15,($t15)=&NR(1)); &FR($r15); 127 &add($H1,$t15,$H1) &FR($t15); 128 &st($R,&QWPw(3,$rp)); 129 &add($H1,$H2,$R); 130 131 &mov("zero",$H1); 132 &add($R,$r16,$R); 133 &mov("zero",$H2); 134 &muh($a[3],$b[0],($r19)=&NR(1)); 135 &cmpult($R,$r16,($t16)=&NR(1)); &FR($r16); 136 &add($R,$r17,$R); 137 &add($H1,$t16,$H1) &FR($t16); 138 &mul($a[1],$b[3],($r20)=&NR(1)); 139 &cmpult($R,$r17,($t17)=&NR(1)); &FR($r17); 140 &add($R,$r18,$R); 141 &add($H1,$t17,$H1) &FR($t17); 142 &mul($a[2],$b[2],($r21)=&NR(1)); 143 &cmpult($R,$r18,($t18)=&NR(1)); &FR($r18); 144 &add($R,$r19,$R); 145 &add($H1,$t18,$H1) &FR($t18); 146 &mul($a[3],$b[1],($r22)=&NR(1)); 147 &cmpult($R,$r19,($t19)=&NR(1)); &FR($r19); 148 &add($R,$r20,$R); 149 &add($H1,$t19,$H1) &FR($t19); 150 &muh($a[1],$b[3],($r23)=&NR(1)); 151 &cmpult($R,$r20,($t20)=&NR(1)); &FR($r20); 152 &add($R,$r21,$R); 153 &add($H1,$t20,$H1) &FR($t20); 154 &muh($a[2],$b[2],($r24)=&NR(1)); 155 &cmpult($R,$r21,($t21)=&NR(1)); &FR($r21); 156 &add($R,$r22,$R); 157 &add($H1,$t21,$H1) &FR($t21); 158 &muh($a[3],$b[1],($r25)=&NR(1)); 159 &cmpult($R,$r22,($t22)=&NR(1)); &FR($r22); 160 &add($H1,$t22,$H1) &FR($t22); 161 &st($R,&QWPw(4,$rp)); 162 &add($H1,$H2,$R); 163 164 &mov("zero",$H1); 165 &add($R,$r23,$R); 166 &mov("zero",$H2); 167 &mul($a[2],$b[3],($r26)=&NR(1)); 168 &cmpult($R,$r23,($t23)=&NR(1)); &FR($r23); 169 &add($R,$r24,$R); 170 &add($H1,$t23,$H1) &FR($t23); 171 &mul($a[3],$b[2],($r27)=&NR(1)); 172 &cmpult($R,$r24,($t24)=&NR(1)); &FR($r24); 173 &add($R,$r25,$R); 174 &add($H1,$t24,$H1) &FR($t24); 175 &muh($a[2],$b[3],($r28)=&NR(1)); 176 &cmpult($R,$r25,($t25)=&NR(1)); &FR($r25); 177 &add($R,$r26,$R); 178 &add($H1,$t25,$H1) &FR($t25); 179 &muh($a[3],$b[2],($r29)=&NR(1)); 180 &cmpult($R,$r26,($t26)=&NR(1)); &FR($r26); 181 &add($R,$r27,$R); 182 &add($H1,$t26,$H1) &FR($t26); 183 &mul($a[3],$b[3],($r30)=&NR(1)); 184 &cmpult($R,$r27,($t27)=&NR(1)); &FR($r27); 185 &add($H1,$t27,$H1) &FR($t27); 186 &st($R,&QWPw(5,$rp)); 187 &add($H1,$H2,$R); 188 189 &mov("zero",$H1); 190 &add($R,$r28,$R); 191 &mov("zero",$H2); 192 &muh($a[3],$b[3],($r31)=&NR(1)); 193 &cmpult($R,$r28,($t28)=&NR(1)); &FR($r28); 194 &add($R,$r29,$R); 195 &add($H1,$t28,$H1) &FR($t28); 196 ############ 197 &cmpult($R,$r29,($t29)=&NR(1)); &FR($r29); 198 &add($R,$r30,$R); 199 &add($H1,$t29,$H1) &FR($t29); 200 ############ 201 &cmpult($R,$r30,($t30)=&NR(1)); &FR($r30); 202 &add($H1,$t30,$H1) &FR($t30); 203 &st($R,&QWPw(6,$rp)); 204 &add($H1,$H2,$R); 205 206 &add($R,$r31,$R); &FR($r31); 207 &st($R,&QWPw(7,$rp)); 208 209 &FR($R,$H1,$H2); 210 &function_end($name); 211 212 &fin_pool; 213 } 214 2151; 216