diff options
author | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2023-05-14 00:11:40 +0000 |
---|---|---|
committer | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2023-05-14 00:11:40 +0000 |
commit | cbe4b116989c0bfec49b9ae7a1d9a85ead6648ae (patch) | |
tree | 02940a0aa4d41a5eb4ecc0768e697749695aaf69 /sys/src/cmd/7l/asmout.c | |
parent | 3bb4169be1566faca886b232376e85b1ebf10fb3 (diff) |
7l: allow paired SIMD load/store, correct a few comments
Diffstat (limited to 'sys/src/cmd/7l/asmout.c')
-rw-r--r-- | sys/src/cmd/7l/asmout.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/src/cmd/7l/asmout.c b/sys/src/cmd/7l/asmout.c index 9c3997812..495a4b8e0 100644 --- a/sys/src/cmd/7l/asmout.c +++ b/sys/src/cmd/7l/asmout.c @@ -848,7 +848,7 @@ asmout(Prog *p, Optab *o) o2 = olsr12u(opldr12(p->as), 0, REGTMP, p->to.reg); break; - case 66: /* movpT (R)O!,R; movpT O(R)!, R -> ldrT */ + case 66: /* movpT (R)O!,R,R; movpT O(R)!,R,R; movpT (R)O,R,R -> ldpT */ o1 = opldrpp(p->as); v = p->from.offset >> 2 + ((o1 & S64) != 0); if(v < -128 || v > 127) @@ -859,10 +859,10 @@ asmout(Prog *p, Optab *o) o1 |= 3<<23; else o1 |= 2<<23; - o1 |= ((v&0x7F)<<15) | (p->from.reg<<5) | p->reg | (p->to.reg<<10); + o1 |= (v&0x7F)<<15 | p->from.reg<<5 | p->reg | p->to.reg<<10; break; - case 67: /* movpT R,(R)O!; movpT O(R)!, R -> strT */ + case 67: /* movpT R,R,(R)O!; movpT R,R,O(R)!; movpT R,R,O(R) -> stpT */ o1 = LD2STR(opldrpp(p->as)); v = p->to.offset >> 2 + ((o1 & S64) != 0); if(v < -128 || v > 127) @@ -873,7 +873,7 @@ asmout(Prog *p, Optab *o) o1 |= 3<<23; else o1 |= 2<<23; - o1 |= ((v&0x7F)<<15) | (p->to.reg<<5) | p->from.reg | (p->reg<<10); + o1 |= (v&0x7F)<<15 | p->to.reg<<5 | p->from.reg | p->reg<<10; break; } @@ -1580,9 +1580,11 @@ opldrpp(int a) case AMOVHU: return 1<<30 | 7<<27 | 0<<26 | 0<<24 | 1<<22; case AMOVB: return 0<<30 | 7<<27 | 0<<26 | 0<<24 | 2<<22; case AMOVBU: return 0<<30 | 7<<27 | 0<<26 | 0<<24 | 1<<22; - case AMOVPW: return 0<<30 | 5<<27 | 0<<26 | 0<<23 | 1<<22; + case AMOVPW: return 0<<30 | 5<<27 | 0<<26 | 0<<23 | 1<<22; /* simm7<<15 | Rt2<<10 | Rn<<5 | Rt */ case AMOVPSW: return 1<<30 | 5<<27 | 0<<26 | 0<<23 | 1<<22; case AMOVP: return 2<<30 | 5<<27 | 0<<26 | 0<<23 | 1<<22; + case AMOVPS: return 0<<30 | 5<<27 | 1<<26 | 0<<23 | 1<<22; + case AMOVPD: return 1<<30 | 5<<27 | 1<<26 | 0<<23 | 1<<22; } diag("bad opldr %A\n%P", a, curp); return 0; |