diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-01-24 04:01:18 +0100 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2025-01-25 14:56:59 +0100 |
| commit | b95081209a83be39b52b3f304387f75cfab22e9e (patch) | |
| tree | cc1fe29ac1da3fb2b92f8a10ba2a1a222296ea7d /src | |
| parent | 673544b783fb81d5fd970e132e0d78f234498603 (diff) | |
| download | zig-b95081209a83be39b52b3f304387f75cfab22e9e.tar.gz zig-b95081209a83be39b52b3f304387f75cfab22e9e.zip | |
compiler: Explicitly specify loongarch ABI when talking to LLVM.
Necessary because of: https://github.com/llvm/llvm-project/commit/dc665fa5f5b8b572479ceac6bf32e0174de65f1e
Diffstat (limited to 'src')
| -rw-r--r-- | src/target.zig | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/src/target.zig b/src/target.zig index 99e0fd1faa..b7e1c73ef1 100644 --- a/src/target.zig +++ b/src/target.zig @@ -500,33 +500,42 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 { // Once our self-hosted linker can handle both ABIs, this hack should go away. if (target.cpu.arch == .powerpc64) return "elfv2"; - switch (target.cpu.arch) { - .riscv64 => { + return switch (target.cpu.arch) { + // TODO: `muslsf` and `muslf32` in LLVM 20. + .loongarch64 => switch (target.abi) { + .gnusf => "lp64s", + .gnuf32 => "lp64f", + else => "lp64d", + }, + .loongarch32 => switch (target.abi) { + .gnusf => "ilp32s", + .gnuf32 => "ilp32f", + else => "ilp32d", + }, + .riscv64 => b: { const featureSetHas = std.Target.riscv.featureSetHas; - if (featureSetHas(target.cpu.features, .e)) { - return "lp64e"; - } else if (featureSetHas(target.cpu.features, .d)) { - return "lp64d"; - } else if (featureSetHas(target.cpu.features, .f)) { - return "lp64f"; - } else { - return "lp64"; - } + break :b if (featureSetHas(target.cpu.features, .e)) + "lp64e" + else if (featureSetHas(target.cpu.features, .d)) + "lp64d" + else if (featureSetHas(target.cpu.features, .f)) + "lp64f" + else + "lp64"; }, - .riscv32 => { + .riscv32 => b: { const featureSetHas = std.Target.riscv.featureSetHas; - if (featureSetHas(target.cpu.features, .e)) { - return "ilp32e"; - } else if (featureSetHas(target.cpu.features, .d)) { - return "ilp32d"; - } else if (featureSetHas(target.cpu.features, .f)) { - return "ilp32f"; - } else { - return "ilp32"; - } + break :b if (featureSetHas(target.cpu.features, .e)) + "ilp32e" + else if (featureSetHas(target.cpu.features, .d)) + "ilp32d" + else if (featureSetHas(target.cpu.features, .f)) + "ilp32f" + else + "ilp32"; }, - else => return null, - } + else => null, + }; } /// This function returns 1 if function alignment is not observable or settable. Note that this |
