summaryrefslogtreecommitdiff
path: root/sys/src/cmd/8l/obj.c
diff options
context:
space:
mode:
authorjpathy <jpathy@mail.nanosouffle.net>2013-05-21 23:15:13 +0530
committerjpathy <jpathy@mail.nanosouffle.net>2013-05-21 23:15:13 +0530
commit213bf5089365d00d9d40635bcfe62e197d548c1b (patch)
treef50a0a7847731cf19718ba2104e73c3fea0f0920 /sys/src/cmd/8l/obj.c
parente3883b050e1784f97bd6474c6af73023fe3bbe44 (diff)
add 6(a|l) sse support to 8(a|l)
Diffstat (limited to 'sys/src/cmd/8l/obj.c')
-rw-r--r--sys/src/cmd/8l/obj.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/sys/src/cmd/8l/obj.c b/sys/src/cmd/8l/obj.c
index 97d4ba090..a6aec8d85 100644
--- a/sys/src/cmd/8l/obj.c
+++ b/sys/src/cmd/8l/obj.c
@@ -195,11 +195,14 @@ main(int argc, char *argv[])
Bprint(&bso, "HEADER = -H0x%ld -T0x%lux -D0x%lux -R0x%lux\n",
HEADTYPE, INITTEXT, INITDAT, INITRND);
Bflush(&bso);
- for(i=1; optab[i].as; i++)
- if(i != optab[i].as) {
- diag("phase error in optab: %d", i);
+ for(i=1; optab[i].as; i++) {
+ c = optab[i].as;
+ if(opindex[c] != nil) {
+ diag("phase error in optab: %d (%A)", i, c);
errorexit();
}
+ opindex[c] = &optab[i];
+ }
for(i=0; i<Ymax; i++)
ycover[i*Ymax + i] = 1;
@@ -240,7 +243,13 @@ main(int argc, char *argv[])
ycover[Yrl*Ymax + Yml] = 1;
ycover[Ym*Ymax + Yml] = 1;
- for(i=0; i<D_NONE; i++) {
+ ycover[Ym*Ymax + Ymm] = 1;
+ ycover[Ymr*Ymax + Ymm] = 1;
+
+ ycover[Ym*Ymax + Yxm] = 1;
+ ycover[Yxr*Ymax + Yxm] = 1;
+
+ for(i=0; i<D_XNONE; i++) {
reg[i] = -1;
if(i >= D_AL && i <= D_BH)
reg[i] = (i-D_AL) & 7;
@@ -248,6 +257,10 @@ main(int argc, char *argv[])
reg[i] = (i-D_AX) & 7;
if(i >= D_F0 && i <= D_F0+7)
reg[i] = (i-D_F0) & 7;
+ if(i >= D_M0 && i <= D_M0+7)
+ reg[i] = (i-D_M0) & 7;
+ if(i >= D_X0 && i <= D_X0+7)
+ reg[i] = (i-D_X0) & 7;
}
zprg.link = P;
@@ -988,6 +1001,13 @@ loop:
case AFDIVRF:
case AFCOMF:
case AFCOMFP:
+ case AMOVSS:
+ case AADDSS:
+ case ASUBSS:
+ case AMULSS:
+ case ADIVSS:
+ case ACOMISS:
+ case AUCOMISS:
if(skip)
goto casdef;
if(p->from.type == D_FCONST) {
@@ -1026,6 +1046,13 @@ loop:
case AFDIVRD:
case AFCOMD:
case AFCOMDP:
+ case AMOVSD:
+ case AADDSD:
+ case ASUBSD:
+ case AMULSD:
+ case ADIVSD:
+ case ACOMISD:
+ case AUCOMISD:
if(skip)
goto casdef;
if(p->from.type == D_FCONST) {