authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-06 10:30:40+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-15 19:29:56+02:00
logd289dba125c128bf03309957fee948fba32b8852
tree34d9499ef3c9abb69c0cea21812e605d77951c16
parent7b8fc18c666ba6952ad1571fbed4cc48e81f647d
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

llvm: Fix ilp32e/lp64e and ilp32f/lp64f ABI selection for riscv.


1 files changed, 8 insertions(+), 11 deletions(-)

src/target.zig+8-11
...@@ -427,17 +427,14 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {...@@ -427,17 +427,14 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {
427 // Once our self-hosted linker can handle both ABIs, this hack should go away.427 // Once our self-hosted linker can handle both ABIs, this hack should go away.
428 if (target.cpu.arch == .powerpc64) return "elfv2";428 if (target.cpu.arch == .powerpc64) return "elfv2";
429429
430 const have_float = switch (target.abi) {
431 .gnueabihf, .musleabihf, .eabihf => true,
432 else => false,
433 };
434
435 switch (target.cpu.arch) {430 switch (target.cpu.arch) {
436 .riscv64 => {431 .riscv64 => {
437 const featureSetHas = std.Target.riscv.featureSetHas;432 const featureSetHas = std.Target.riscv.featureSetHas;
438 if (featureSetHas(target.cpu.features, .d)) {433 if (featureSetHas(target.cpu.features, .e)) {
434 return "lp64e";
435 } else if (featureSetHas(target.cpu.features, .d)) {
439 return "lp64d";436 return "lp64d";
440 } else if (have_float) {437 } else if (featureSetHas(target.cpu.features, .f)) {
441 return "lp64f";438 return "lp64f";
442 } else {439 } else {
443 return "lp64";440 return "lp64";
...@@ -445,12 +442,12 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {...@@ -445,12 +442,12 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {
445 },442 },
446 .riscv32 => {443 .riscv32 => {
447 const featureSetHas = std.Target.riscv.featureSetHas;444 const featureSetHas = std.Target.riscv.featureSetHas;
448 if (featureSetHas(target.cpu.features, .d)) {445 if (featureSetHas(target.cpu.features, .e)) {
446 return "ilp32e";
447 } else if (featureSetHas(target.cpu.features, .d)) {
449 return "ilp32d";448 return "ilp32d";
450 } else if (have_float) {449 } else if (featureSetHas(target.cpu.features, .f)) {
451 return "ilp32f";450 return "ilp32f";
452 } else if (featureSetHas(target.cpu.features, .e)) {
453 return "ilp32e";
454 } else {451 } else {
455 return "ilp32";452 return "ilp32";
456 }453 }