From 2c1a7017af56de72f53f5ce126ccb5580bc3e42f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 23 Jul 2023 11:39:03 +0100 Subject: Extract WasmPatioCodeGen::generateOperandToLocal() --- .../compiler/backends/wasm/WasmPatioCodeGen.java | 83 +++++++++++----------- 1 file changed, 43 insertions(+), 40 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java index caf7880d..e7735ae3 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java @@ -129,14 +129,12 @@ public class WasmPatioCodeGen { yield context; } - case PatioBoolToInt patioBoolToInt -> { - context = generateOperand(patioBoolToInt.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioBoolToInt.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } + case PatioBoolToInt patioBoolToInt -> + generateOperandToLocal( + patioBoolToInt.target(), + patioBoolToInt.value(), + context + ); case PatioCall patioCall -> { for (var patioArg : patioCall.args()) { @@ -181,14 +179,12 @@ public class WasmPatioCodeGen { yield context; } - case PatioDataPtrToInt patioDataPtrToInt -> { - context = generateOperand(patioDataPtrToInt.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioDataPtrToInt.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } + case PatioDataPtrToInt patioDataPtrToInt -> + generateOperandToLocal( + patioDataPtrToInt.target(), + patioDataPtrToInt.value(), + context + ); case PatioIf patioIf -> { context = generateOperand(patioIf.condition(), context); @@ -238,32 +234,26 @@ public class WasmPatioCodeGen { yield context; } - case PatioIntToBool patioIntToBool -> { - context = generateOperand(patioIntToBool.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioIntToBool.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } - - case PatioIntToDataPtr patioIntToDataPtr -> { - context = generateOperand(patioIntToDataPtr.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioIntToDataPtr.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } - - case PatioLocalStore patioLocalStore -> { - context = generateOperand(patioLocalStore.value(), context); + case PatioIntToBool patioIntToBool -> + generateOperandToLocal( + patioIntToBool.target(), + patioIntToBool.value(), + context + ); - var targetWasmLocalIndex = context.wasmLocalIndex(patioLocalStore.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); + case PatioIntToDataPtr patioIntToDataPtr -> + generateOperandToLocal( + patioIntToDataPtr.target(), + patioIntToDataPtr.value(), + context + ); - yield context; - } + case PatioLocalStore patioLocalStore -> + generateOperandToLocal( + patioLocalStore.target(), + patioLocalStore.value(), + context + ); case PatioMemoryLoad patioMemoryLoad -> { context = generateOperand(patioMemoryLoad.pointer(), context); @@ -300,6 +290,19 @@ public class WasmPatioCodeGen { }; } + private static Context generateOperandToLocal( + PatioLocalRef target, + PatioOperand value, + Context context + ) { + context = generateOperand(value, context); + + var targetWasmLocalIndex = context.wasmLocalIndex(target); + context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); + + return context; + } + private static Context generateOperand( PatioOperand patioOperand, Context context -- cgit v1.2.3