aboutsummaryrefslogtreecommitdiff
path: root/src/target.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-12-03 17:33:20 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-12-03 17:33:20 -0700
commit4c1a62326b5090fad67c004a6e58a6e4265a77ad (patch)
tree922d865e78b10012f773c292795b9d7479894bdd /src/target.zig
parent9ede943e0753b250cb9a60a5b9b66ba9bff4a694 (diff)
downloadzig-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.zig35
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,
+ }
+}