diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-22 21:10:22 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-22 21:10:22 +0000 |
| commit | c4cddcf037a57078452fe282b8527bffb4edde4e (patch) | |
| tree | cba619e4897444ca3ec73800ce073534e7df29f6 /src/main/java | |
| parent | ec1382f68d1132071b357c2aa3b89bc8a2017d67 (diff) | |
Use jmp_buf size for LLVM target
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java index 75d66773..d8ef66af 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java @@ -16,7 +16,6 @@ import org.shedlang.compiler.patio.instructions.*; import org.shedlang.compiler.patio.operands.*; import org.shedlang.compiler.patio.types.*; import org.shedlang.compiler.patio.values.*; -import org.shedlang.compiler.util.Lazy; import org.shedlang.compiler.util.Lists; import org.shedlang.compiler.util.P; @@ -25,6 +24,8 @@ import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.stream.StreamSupport; public class PatioToLlvm { @@ -34,13 +35,15 @@ public class PatioToLlvm { return target.patioIntType(); } - private static final Lazy<Integer> JMP_BUF_SIZE = Lazy.of(() -> readJmpBufSize()); + private static final ConcurrentMap<LlvmTarget, Integer> JMP_BUF_SIZE = new ConcurrentHashMap<>(); - private static int readJmpBufSize() { + private static int readJmpBufSize(LlvmTarget target) { try { var sizeofJmpBufString = Files.readString( - // TODO: use jmp_buf size for target - ShedCompilerFiles.getRoot().resolve("runtime/target/amd64/sizeof_jmp_buf.txt") + ShedCompilerFiles.getRoot() + .resolve("runtime/target") + .resolve(target.targetName()) + .resolve("sizeof_jmp_buf.txt") ); return Integer.parseInt(sizeofJmpBufString.strip()); } catch (IOException e) { @@ -48,8 +51,12 @@ public class PatioToLlvm { } } - private static LlvmType jmpBufType() { - return LlvmTypes.array(JMP_BUF_SIZE.get(), LlvmTypes.INT_8); + private static LlvmType jmpBufType(LlvmTarget target) { + if (!JMP_BUF_SIZE.containsKey(target)) { + JMP_BUF_SIZE.put(target, readJmpBufSize(target)); + } + + return LlvmTypes.array(JMP_BUF_SIZE.get(target), LlvmTypes.INT_8); } private static LlvmFunctionDeclaration setjmpDeclaration(LlvmTarget target) { @@ -695,7 +702,7 @@ public class PatioToLlvm { context = context.addInstruction(new LlvmAlloca( jmpBuf, - jmpBufType() + jmpBufType(context.target()) )); var previousExceptionHandlerResult = context.allocateLocalName(LlvmCodeGenLocalVariableSpace.TRY_PREVIOUS_EXCEPTION_HANDLER); |
