Unified · Split
| @@ -1493,15 +1493,12 @@ gopcode64(int o, Node *f1, Node *f2, Node *t) · 1492 unmodified lines | |||
| 1493 | f2 = t; | 1493 | f2 = t; |
| 1494 | regalloc(&nod, ®node, Z); | 1494 | regalloc(&nod, ®node, Z); |
| 1495 | gins3(AMULLW, f1->right, f2->right, &nod); /* lo(f2.low*f1.low) */ | 1495 | gins3(AMULLW, f1->right, f2->right, &nod); /* lo(f2.low*f1.low) */ |
| 1496 | a1 = AMULHW; | ||
| 1497 | if(o == OLMUL || o == OASLMUL) | ||
| 1498 | a1 = AMULHWU; | ||
| 1499 | regalloc(&nod1, ®node, Z); | 1496 | regalloc(&nod1, ®node, Z); |
| 1500 | gins3(a1, f1->right, f2->right, &nod1); /* hi(f2.low*f1.low) */ | 1497 | gins3(AMULHWU, f1->right, f2->right, &nod1); /* hi(f2.low*f1.low) */ |
| 1501 | regalloc(&nod2, ®node, Z); | 1498 | regalloc(&nod2, ®node, Z); |
| 1502 | gins3(AMULLW, f2->right, f1->left, &nod2); /* lo(f2.low*f1.high) */ | 1499 | gins3(AMULLW, f2->right, f1->left, &nod2); /* lo(f2.low*f1.high) */ |
| 1503 | gins(AADD, &nod2, &nod1); | 1500 | gins(AADD, &nod2, &nod1); |
| 1504 | gins3(AMULLW, f1->right, f2->left, &nod2); /* hi(f2.high*f1.low) */ | 1501 | gins3(AMULLW, f1->right, f2->left, &nod2); /* lo(f2.high*f1.low) */ |
| 1505 | gins(AADD, &nod2, &nod1); | 1502 | gins(AADD, &nod2, &nod1); |
| 1506 | regfree(&nod2); | 1503 | regfree(&nod2); |
| 1507 | gmove(&nod, t->right); | 1504 | gmove(&nod, t->right); |