diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java | 13 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java | 4 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java index 96217cc5..bc327aea 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -230,6 +230,10 @@ public class PatioToWasm { context = generateOperand(patioCallPointer.functionPointer(), context); + if (context.platformTarget == WasmTarget.WASM64) { + context = context.addInstruction(new WasmI32WrapI64()); + } + var wasmFuncType = new WasmFuncType( patioOperandsToWasmValueTypes(patioCallPointer.args(), context), List.of(patioOperandToWasmValueType(patioCallPointer.target(), context)) @@ -557,7 +561,14 @@ public class PatioToWasm { case PatioFunctionPtr patioFunctionPtr -> { var wasmFuncName = new WasmFuncName(patioFunctionPtr.name()); - yield context.addInstruction(new WasmTableElementIndexConst(wasmFuncName)); + context = context + .addInstruction(new WasmTableElementIndexConst(wasmFuncName)); + + if (context.platformTarget == WasmTarget.WASM64) { + context = context.addInstruction(new WasmI64ExtendI32Unsigned()); + } + + yield context; } case PatioInt patioInt -> diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java index 6c3dec78..986cf6cd 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java @@ -70,7 +70,9 @@ public enum WasmTarget { // it to a void* on use, or // * Change the Wasm backend to treat Patio function pointers as 64-bit, // and convert from 32-bit to 64-bit when referencing table indices. - return WasmValueType.I32; + // We currently do the latter, but may want to consider the former (or + // some other alternative). + return sizeT; } public WasmValueType patioIntType() { |
