summaryrefslogtreecommitdiff
path: root/chapter19/src/main/java/com/seaofnodes
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-27 19:06:47 -0700
committerCliff Click <cliffc@acm.org>2026-10-27 19:06:47 -0700
commit19f9ea99114e9c1819239508f812d6521661f7bb (patch)
treedf8b80611f04faceb0e64880bb70eaf17a08c2b6 /chapter19/src/main/java/com/seaofnodes
parenteb9f6b86720c8a5c6c66e1c1837c65a4637aabee (diff)
downloadSimple-19f9ea99114e9c1819239508f812d6521661f7bb.tar.gz
Simple-19f9ea99114e9c1819239508f812d6521661f7bb.zip
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
Diffstat (limited to 'chapter19/src/main/java/com/seaofnodes')
-rw-r--r--chapter19/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java7
-rw-r--r--chapter19/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java6
2 files changed, 9 insertions, 4 deletions
diff --git a/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java b/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java
index 02850582..09855b7d 100644
--- a/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java
+++ b/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/riscv/CallRRISC.java
@@ -1,17 +1,20 @@
package com.seaofnodes.simple.node.cpus.riscv;
+import com.seaofnodes.simple.type.TypeFunPtr;
import com.seaofnodes.simple.*;
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.callInMaskInt(i); // Normal argument
}
diff --git a/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java b/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java
index 99260a27..c170d7e4 100644
--- a/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java
+++ b/chapter19/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java
@@ -7,11 +7,13 @@ import com.seaofnodes.simple.type.TypeFunPtr;
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
}