From 19f9ea99114e9c1819239508f812d6521661f7bb Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Tue, 27 Oct 2026 19:06:47 -0700 Subject: Backport a bunch of fixes ARM encoding Extra fidx burned with no constructor Getting types during a parse to avoid a whole-program walk later --- .../main/java/com/seaofnodes/simple/node/cpus/arm/CallRRARM.java | 7 +++++-- .../main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java | 7 +++++-- .../java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) (limited to 'chapter20/src/main/java/com') diff --git a/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/arm/CallRRARM.java b/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/arm/CallRRARM.java index db85a9a9..ee49df41 100644 --- a/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/arm/CallRRARM.java +++ b/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/arm/CallRRARM.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple.node.cpus.arm; +import com.seaofnodes.simple.type.TypeFunPtr; import com.seaofnodes.simple.*; import com.seaofnodes.simple.codegen.CodeGen; import com.seaofnodes.simple.codegen.RegMask; @@ -7,12 +8,14 @@ import com.seaofnodes.simple.node.*; import java.io.ByteArrayOutputStream; public class CallRRARM extends CallNode implements MachNode { - CallRRARM(CallNode call) {super(call);} + final TypeFunPtr _tfp; + CallRRARM( CallNode call ) { super(call); _tfp = call.tfp(); } + @Override public TypeFunPtr tfp() { return _tfp; } @Override public String op() { return "callr"; } @Override public String label() { return op(); } @Override public RegMask regmap(int i) { // Todo: float or int? - return i==_inputs._len + return i==_inputs._len-1 ? arm.RMASK // Function call target : arm.callInMask(tfp(),i); // Normal argument } diff --git a/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java b/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java index 3bae656d..621e4ad4 100644 --- a/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java +++ b/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple.node.cpus.riscv; +import com.seaofnodes.simple.type.TypeFunPtr; import com.seaofnodes.simple.*; import com.seaofnodes.simple.codegen.CodeGen; import com.seaofnodes.simple.codegen.RegMask; @@ -7,12 +8,14 @@ import com.seaofnodes.simple.node.*; import java.io.ByteArrayOutputStream; public class CallRRISC extends CallNode implements MachNode{ - CallRRISC( CallNode call ) { super(call); } + final TypeFunPtr _tfp; + CallRRISC( CallNode call ) { super(call); _tfp = call.tfp(); } + @Override public TypeFunPtr tfp() { return _tfp; } @Override public String label() { return op(); } @Override public RegMask regmap(int i) { // Todo: float or int? - return i==_inputs._len + return i==_inputs._len-1 ? riscv.RMASK // Function call target : riscv.callInMask(tfp(),i); // Normal argument } diff --git a/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java b/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java index ac35d17b..254bf6fa 100644 --- a/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java +++ b/chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple.node.cpus.x86_64_v2; +import com.seaofnodes.simple.type.TypeFunPtr; import com.seaofnodes.simple.SB; import com.seaofnodes.simple.Utils; import com.seaofnodes.simple.codegen.CodeGen; @@ -9,11 +10,13 @@ import com.seaofnodes.simple.node.MachNode; import java.io.ByteArrayOutputStream; public class CallRX86 extends CallNode implements MachNode { - CallRX86( CallNode call ) { super(call); } + final TypeFunPtr _tfp; + CallRX86( CallNode call ) { super(call); _tfp = call.tfp(); } + @Override public TypeFunPtr tfp() { return _tfp; } @Override public String label() { return op(); } @Override public RegMask regmap(int i) { - return i==_inputs._len + return i==_inputs._len-1 ? x86_64_v2.WMASK // Function call target : x86_64_v2.callInMask(tfp(),i); // Normal argument } -- cgit v1.2.3