diff options
| author | Cliff Click <cliffc@acm.org> | 2025-03-18 11:37:26 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-03-18 11:37:26 -0700 |
| commit | 5cab242acdb68045e5993b75fc67b54901002072 (patch) | |
| tree | 0d11800f2c3809d621b09bf194478385a1882a5c /chapter21/src/main/java/com | |
| parent | e625a921d8fc9540a277e5becc8fe49b557c49fc (diff) | |
| download | Simple-5cab242acdb68045e5993b75fc67b54901002072.tar.gz Simple-5cab242acdb68045e5993b75fc67b54901002072.zip | |
Fix comment printing
Minor encoding bugs for large- x86 jumps and arm external call
Diffstat (limited to 'chapter21/src/main/java/com')
6 files changed, 9 insertions, 7 deletions
diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/NewARM.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/NewARM.java index 8a465b66..fff5dac2 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/NewARM.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/NewARM.java @@ -19,6 +19,6 @@ public class NewARM extends NewNode implements MachNode { } @Override public void asm(CodeGen code, SB sb) { - sb.p(code.reg(size())); + sb.p("#calloc, ").p(code.reg(size())); } } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/arm.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/arm.java index d90ea15e..d2f50e45 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/arm.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/arm.java @@ -212,7 +212,7 @@ public class arm extends Machine { public static void imm_inst(Encoding enc, Node n, int opcode, int imm12) { short self = enc.reg(n); short reg1 = enc.reg(n.in(1)); - int body = imm_inst(opcode, imm12, reg1, self); + int body = imm_inst(opcode, imm12&0xFFF, reg1, self); enc.add4(body); } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/JmpX86.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/JmpX86.java index 2d27e5c7..d325189a 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/JmpX86.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/JmpX86.java @@ -48,9 +48,10 @@ public class JmpX86 extends IfNode implements MachNode, RIPRelSize { assert (byte)delta==delta; bits[opStart+1] = (byte)delta; } else { - assert bits[opStart ] == 0x0F; - assert bits[opStart+1] == x86_64_v2.jumpop(_bop); + assert bits[opStart] == x86_64_v2.jumpop(_bop)-16; delta -= 6; // Offset from opcode END + bits[opStart] = 0x0F; + bits[opStart+1] = (byte)x86_64_v2.jumpop(_bop); enc.patch4(opStart+2,delta); } } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/NewX86.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/NewX86.java index c846f341..6263213d 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/NewX86.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/NewX86.java @@ -25,7 +25,7 @@ public class NewX86 extends NewNode implements MachNode { // General form: "alloc #bytes" @Override public void asm(CodeGen code, SB sb) { - sb.p(code.reg(size())); + sb.p("#calloc, ").p(code.reg(size())); } } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/UJmpX86.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/UJmpX86.java index 143383a6..c2c804a2 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/UJmpX86.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/UJmpX86.java @@ -38,7 +38,8 @@ public class UJmpX86 extends CFGNode implements MachNode, RIPRelSize { assert (byte)delta==delta; bits[opStart+1] = (byte)delta; } else { - assert bits[opStart ] == (byte)0xE9; + assert bits[opStart] == (byte)0xEB; + bits[opStart] = (byte)0xE9; // Long form delta -= 5; // Offset from opcode END enc.patch4(opStart+1,delta); } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java b/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java index 9b0074c5..2ac94b46 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java @@ -138,7 +138,7 @@ public abstract class ASMPrinter { mach.asm(code,sb); int len = sb.len(); isMultiOp = isMultiOp(sb,old,len); - sb.fix(argWidth-len,""); // Pad out + sb.fix(argWidth-(len-old),""); // Pad out } else if( !(n._type instanceof TypeMem) ) { // Room for some inputs |
