aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-26 23:10:46 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-26 23:10:46 +0000
commit6c229c6b671522edde2f4de041c89449949e0820 (patch)
treea13d0017f909ee4874d8ff690f81521b44854f05 /src/main/java
parent8d7289ae30b41c32a4c8e96d17679210cedcac27 (diff)
Generate correct type for int stores
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java16
1 files changed, 15 insertions, 1 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 00f5cd00..3389bb65 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -366,7 +366,8 @@ public class PatioToWasm {
context = generateOperand(patioMemoryStore.value(), context);
- context = context.addInstruction(new WasmI32Store(
+ context = context.addInstruction(wasmIntStore(
+ patioOperandToWasmValueType(patioMemoryStore.value(), context),
wasmMemoryArg(
patioMemoryStore.layout(),
patioMemoryStore.offset(),
@@ -817,6 +818,19 @@ public class PatioToWasm {
}
}
+ private static WasmInstruction wasmIntStore(
+ WasmValueType wasmValueType,
+ WasmMemoryArg memoryArg
+ ) {
+ if (wasmValueType == WasmValueType.I32) {
+ return new WasmI32Store(memoryArg);
+ } else if (wasmValueType == WasmValueType.I64) {
+ return new WasmI64Store(memoryArg);
+ } else {
+ throw new IllegalArgumentException("Cannot create int store for " + wasmValueType);
+ }
+ }
+
private static class Context {
private record PatioLocalInfo(
WasmLocalIndex wasmLocalIndex,