summaryrefslogtreecommitdiff
path: root/sys/src/cmd
diff options
context:
space:
mode:
authorSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2023-05-10 17:01:37 +0000
committerSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2023-05-10 17:01:37 +0000
commit9702f740ab5532e392fc9c1fd83000d206af4dc5 (patch)
tree5c43e6c44351ed73b84f2aeec4ad128402b8c287 /sys/src/cmd
parent91ae69be3306c807ae5bfa7d1b7ced8c239f9214 (diff)
7c, 7l: revert CASE change, fix linker clobbering offset if given the same register twice
Diffstat (limited to 'sys/src/cmd')
-rw-r--r--sys/src/cmd/7c/peep.c4
-rw-r--r--sys/src/cmd/7l/asmout.c8
2 files changed, 4 insertions, 8 deletions
diff --git a/sys/src/cmd/7c/peep.c b/sys/src/cmd/7c/peep.c
index d010058c0..0126725e0 100644
--- a/sys/src/cmd/7c/peep.c
+++ b/sys/src/cmd/7c/peep.c
@@ -1122,6 +1122,7 @@ copyu(Prog *p, Adr *v, Adr *s)
case AFABSS:
case AFSQRTD:
case AFSQRTS:
+ case ACASE:
#ifdef YYY
if(p->scond&(C_WBIT|C_PBIT))
if(v->type == D_REG) {
@@ -1303,9 +1304,6 @@ copyu(Prog *p, Adr *v, Adr *s)
if(v->reg == REGARG)
return 3;
return 0;
-
- case ACASE:
- return 0;
}
}
diff --git a/sys/src/cmd/7l/asmout.c b/sys/src/cmd/7l/asmout.c
index 2c4a98bd5..cc55729a4 100644
--- a/sys/src/cmd/7l/asmout.c
+++ b/sys/src/cmd/7l/asmout.c
@@ -817,11 +817,9 @@ asmout(Prog *p, Optab *o)
o1 = ADR(0, d, p->to.reg);
break;
- case 62: /* case Rv, Rt -> adr tab, Rt; movw Rt[R<<2], Rl; add Rt, Rl; br (Rl) */
- if(p->from.reg == p->to.reg)
- diag("invalid SWITCH\n%P", p);
- o1 = ADR(0, 4*4, p->to.reg); /* adr 4(pc), Rt */
- o2 = (2<<30)|(7<<27)|(2<<22)|(1<<21)|(3<<13)|(1<<12)|(2<<10)|(p->from.reg<<16)|(p->to.reg<<5)|REGTMP; /* movw Rt[Rv<<2], REGTMP */
+ case 62: /* case Rv, Rt -> adr tab, Rl; movw Rl[R<<2], Rt; add Rt, Rl; br (Rl) */
+ o1 = ADR(0, 4*4, REGTMP); /* adr 4(pc), REGTMP */
+ o2 = (2<<30)|(7<<27)|(2<<22)|(1<<21)|(3<<13)|(1<<12)|(2<<10)|(p->from.reg<<16)|(REGTMP<<5)|p->to.reg; /* movw REGTMP[Rv<<2], Rt */
o3 = oprrr(AADD) | (p->to.reg<<16) | (REGTMP<<5) | REGTMP; /* add Rt, REGTMP */
o4 = (0x6b<<25)|(0x1F<<16)|(REGTMP<<5); /* br (REGTMP) */
lastcase = p;