diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-12-03 17:33:20 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-12-03 17:33:20 -0700 |
| commit | 4c1a62326b5090fad67c004a6e58a6e4265a77ad (patch) | |
| tree | 922d865e78b10012f773c292795b9d7479894bdd /src/target.zig | |
| parent | 9ede943e0753b250cb9a60a5b9b66ba9bff4a694 (diff) | |
| download | zig-4c1a62326b5090fad67c004a6e58a6e4265a77ad.tar.gz zig-4c1a62326b5090fad67c004a6e58a6e4265a77ad.zip | |
stage2: use Target.Abi instead of introducing Target.TargetAbi
This branch introduced std.Target.TargetAbi when we already had
std.Target.Abi which was, unsurprisingly, already suited for this task.
Also pull out the -mabi= cc flag addition to the common area instead of
duplicating it for assembly and c files.
Diffstat (limited to 'src/target.zig')
| -rw-r--r-- | src/target.zig | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/target.zig b/src/target.zig index 9d22feff66..5b2f6f5978 100644 --- a/src/target.zig +++ b/src/target.zig @@ -599,3 +599,38 @@ pub fn defaultAddressSpace( _ = context; return .generic; } + +pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 { + const have_float = switch (target.abi) { + .gnuilp32 => return "ilp32", + .gnueabihf, .musleabihf, .eabihf => true, + else => false, + }; + + switch (target.cpu.arch) { + .riscv64 => { + const featureSetHas = std.Target.riscv.featureSetHas; + if (featureSetHas(target.cpu.features, .d)) { + return "lp64d"; + } else if (have_float) { + return "lp64f"; + } else { + return "lp64"; + } + }, + .riscv32 => { + const featureSetHas = std.Target.riscv.featureSetHas; + if (featureSetHas(target.cpu.features, .d)) { + return "ilp32d"; + } else if (have_float) { + return "ilp32f"; + } else if (featureSetHas(target.cpu.features, .e)) { + return "ilp32e"; + } else { + return "ilp32"; + } + }, + //TODO add ARM, Mips, and PowerPC + else => return null, + } +} |
