diff options
| author | Cliff Click <cliffc@acm.org> | 2025-05-09 13:09:14 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-05-09 13:09:14 -0700 |
| commit | 05c529f379c9c82387916aba7f83f7a215829e37 (patch) | |
| tree | e6de0b24fe0783db0fb0536ce9658483715457cc /chapter22/src/main/java | |
| parent | 239d52984594c2011ea3093e90a3aa68faad6fbd (diff) | |
| download | Simple-05c529f379c9c82387916aba7f83f7a215829e37.tar.gz Simple-05c529f379c9c82387916aba7f83f7a215829e37.zip | |
muli & setx86 encoding bugs
Missed lazy-default-mem-phi fixup
Diffstat (limited to 'chapter22/src/main/java')
3 files changed, 4 insertions, 4 deletions
diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/MemMergeNode.java b/chapter22/src/main/java/com/seaofnodes/simple/node/MemMergeNode.java index 3fc69be0..e936ee58 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/node/MemMergeNode.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/node/MemMergeNode.java @@ -117,7 +117,7 @@ public class MemMergeNode extends Node { void _merge( MemMergeNode that, RegionNode r) { int len = Math.max(nIns(),that.nIns()); - for( int i = 2; i < len; i++) + for( int i = 1; i < len; i++) if( alias(i) != that.alias(i) ) { // No need for redundant Phis // If we are in lazy phi mode we need to a lookup // by alias as it will trigger a phi creation diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulIX86.java b/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulIX86.java index d1056787..b1d81983 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulIX86.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulIX86.java @@ -18,13 +18,13 @@ public class MulIX86 extends MachConcreteNode implements MachNode { enc.add1(x86_64_v2.rex(src, dst, 0)); // opcode; 0x69 or 0x6B enc.add1( 0x69 + (x86_64_v2.imm8(_imm) ? 2 : 0) ); - enc.add1( x86_64_v2.modrm(x86_64_v2.MOD.DIRECT, src, dst) ); + enc.add1( x86_64_v2.modrm(x86_64_v2.MOD.DIRECT, dst, src) ); // immediate(4 bytes) 32 bits or (1 byte)8 bits if( x86_64_v2.imm8(_imm) ) enc.add1(_imm); else enc.add4(_imm); } // General form: "addi dst += #imm" @Override public void asm(CodeGen code, SB sb) { - sb.p(code.reg(this)).p(" ").p(glabel()).p("= #").p(_imm); + sb.p(code.reg(this)).p(" = ").p(code.reg(in(1))).p(" * #").p(_imm); } } diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SetX86.java b/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SetX86.java index b8279da4..775ea8eb 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SetX86.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SetX86.java @@ -39,7 +39,7 @@ public class SetX86 extends MachConcreteNode implements MachNode { enc.add1(x86_64_v2.modrm(x86_64_v2.MOD.DIRECT, 0, dst)); // low 8 bites are set, now zero extend for next instruction - if( dst >= 8 ) enc.add1(x86_64_v2.rex(dst, dst, 0, false)); + if( dst >= 4 ) enc.add1(x86_64_v2.rex(dst, dst, 0, false)); enc.add1(0x0F); // opcode enc.add1(0xB6); // opcode enc.add1(x86_64_v2.modrm(x86_64_v2.MOD.DIRECT, dst, dst)); |
