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 {
427427 // Once our self-hosted linker can handle both ABIs, this hack should go away.
428428 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
435430 switch (target.cpu.arch) {
436431 .riscv64 => {
437432 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)) {
439436 return "lp64d";
440 } else if (have_float) {
437 } else if (featureSetHas(target.cpu.features, .f)) {
441438 return "lp64f";
442439 } else {
443440 return "lp64";
......@@ -445,12 +442,12 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {
445442 },
446443 .riscv32 => {
447444 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)) {
449448 return "ilp32d";
450 } else if (have_float) {
449 } else if (featureSetHas(target.cpu.features, .f)) {
451450 return "ilp32f";
452 } else if (featureSetHas(target.cpu.features, .e)) {
453 return "ilp32e";
454451 } else {
455452 return "ilp32";
456453 }