aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-27 16:07:04 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-27 16:07:04 +0000
commit2dcdafd76ea85f03254b05d6d337d2cb99b58b98 (patch)
tree095cd31659d6028e0d4a40f45bb58a5417803b32 /src/main/java
parent12f23b59acc5ce9bfbf48accc71f32f282371e00 (diff)
Support bool-to-int and int-to-bool on wasm64
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java34
1 files changed, 22 insertions, 12 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 b1ac6248..cdc18039 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -202,12 +202,17 @@ public class PatioToWasm {
case PatioBlock patioBlock ->
generateInstructions(patioBlock.body(), context);
- case PatioBoolToInt patioBoolToInt ->
- generateOperandToPatioLocal(
- patioBoolToInt.target(),
- patioBoolToInt.value(),
- context
- );
+ case PatioBoolToInt patioBoolToInt -> {
+ context = generateOperand(patioBoolToInt.value(), context);
+
+ if (platformTarget == WasmTarget.WASM64) {
+ context = context.addInstruction(new WasmI64ExtendI32Unsigned());
+ }
+
+ context = popIntoPatioLocal(patioBoolToInt.target(), context);
+
+ yield context;
+ }
case PatioCall patioCall -> {
for (var patioArg : patioCall.args()) {
@@ -305,12 +310,17 @@ public class PatioToWasm {
context
);
- case PatioIntToBool patioIntToBool ->
- generateOperandToPatioLocal(
- patioIntToBool.target(),
- patioIntToBool.value(),
- context
- );
+ case PatioIntToBool patioIntToBool -> {
+ context = generateOperand(patioIntToBool.value(), context);
+
+ if (platformTarget == WasmTarget.WASM64) {
+ context = context.addInstruction(new WasmI32WrapI64());
+ }
+
+ context = popIntoPatioLocal(patioIntToBool.target(), context);
+
+ yield context;
+ }
case PatioIntToDataPtr patioIntToDataPtr ->
generateOperandToPatioLocal(