an old fix made for inferno on nintendo that i made in 5l locally but apparently didn't pass on. in the mov/mvn instructions there's a field that must be zero. Reference: /n/sources/patch/applied/5l-mbz Date: Sun Feb 7 17:43:29 CET 2010 Signed-off-by: forsyth@terzarima.net --- /sys/src/cmd/5l/asm.c Sun Feb 7 17:41:48 2010 +++ /sys/src/cmd/5l/asm.c Sun Feb 7 17:41:44 2010 @@ -638,7 +638,9 @@ r = p->reg; if(p->to.type == D_NONE) rt = 0; - if(r == NREG) + if(p->as == AMOVW || p->as == AMVN) + r = 0; + else if(r == NREG) r = rt; o1 |= rf | (r<<16) | (rt<<12); break; @@ -651,7 +653,9 @@ r = p->reg; if(p->to.type == D_NONE) rt = 0; - if(r == NREG) + if(p->as == AMOVW || p->as == AMVN) + r = 0; + else if(r == NREG) r = rt; o1 |= (r<<16) | (rt<<12); break; @@ -665,7 +669,9 @@ r = p->reg; if(p->to.type == D_NONE) rt = 0; - if(r == NREG) + if(p->as == AMOVW || p->as == AMVN) + r = 0; + else if(r == NREG) r = rt; o1 |= (r<<16) | (rt<<12); break; @@ -772,7 +778,9 @@ o2 = oprrr(p->as, p->scond); o2 |= REGTMP; r = p->reg; - if(r == NREG) + if(p->as == AMOVW || p->as == AMVN) + r = 0; + else if(r == NREG) r = p->to.reg; o2 |= r << 16; if(p->to.type != D_NONE)