aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-06-04 21:54:07 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-06-05 13:43:35 -0400
commitac3faa6cb3244a5db26b4fd5b114da23208e2239 (patch)
tree654d7b95c0ed568e5d6758289286ea94692180a1 /src/codegen
parent332fbb4b027a5529e58b1e46d785718a7faa75e6 (diff)
downloadzig-ac3faa6cb3244a5db26b4fd5b114da23208e2239.tar.gz
zig-ac3faa6cb3244a5db26b4fd5b114da23208e2239.zip
LLVM backend: loongarch64 support
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm.zig22
-rw-r--r--src/codegen/llvm/bindings.zig5
2 files changed, 24 insertions, 3 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 9e51417ab6..77b9d74fdc 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -426,7 +426,9 @@ const DataLayoutBuilder = struct {
};
if (self.target.cpu.arch == .aarch64_32) continue;
if (!info.force_in_data_layout and matches_default and
- self.target.cpu.arch != .riscv64 and !(self.target.cpu.arch == .aarch64 and
+ self.target.cpu.arch != .riscv64 and
+ self.target.cpu.arch != .loongarch64 and
+ !(self.target.cpu.arch == .aarch64 and
(self.target.os.tag == .uefi or self.target.os.tag == .windows)) and
self.target.cpu.arch != .bpfeb and self.target.cpu.arch != .bpfel) continue;
try writer.writeAll("-p");
@@ -535,6 +537,7 @@ const DataLayoutBuilder = struct {
.nvptx64,
=> &.{ 16, 32, 64 },
.x86_64 => &.{ 8, 16, 32, 64 },
+ .loongarch64 => &.{64},
else => &.{},
}), 0..) |natural, index| switch (index) {
0 => try writer.print("-n{d}", .{natural}),
@@ -686,6 +689,14 @@ const DataLayoutBuilder = struct {
},
else => {},
},
+ .loongarch64 => switch (size) {
+ 128 => {
+ abi = size;
+ pref = size;
+ force_abi = true;
+ },
+ else => {},
+ },
else => {},
}
},
@@ -12039,6 +12050,13 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
// There is no LLVMInitializeARCAsmParser function.
}
},
+ .loongarch32, .loongarch64 => {
+ llvm.LLVMInitializeLoongArchTarget();
+ llvm.LLVMInitializeLoongArchTargetInfo();
+ llvm.LLVMInitializeLoongArchTargetMC();
+ llvm.LLVMInitializeLoongArchAsmPrinter();
+ llvm.LLVMInitializeLoongArchAsmParser();
+ },
// LLVM backends that have no initialization functions.
.tce,
@@ -12060,8 +12078,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
.renderscript32,
.renderscript64,
.dxil,
- .loongarch32,
- .loongarch64,
=> {},
.spu_2 => unreachable, // LLVM does not support this backend
diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig
index 99a3de043e..a32f1d74bc 100644
--- a/src/codegen/llvm/bindings.zig
+++ b/src/codegen/llvm/bindings.zig
@@ -177,6 +177,7 @@ pub extern fn LLVMInitializeM68kTargetInfo() void;
pub extern fn LLVMInitializeCSKYTargetInfo() void;
pub extern fn LLVMInitializeVETargetInfo() void;
pub extern fn LLVMInitializeARCTargetInfo() void;
+pub extern fn LLVMInitializeLoongArchTargetInfo() void;
pub extern fn LLVMInitializeAArch64Target() void;
pub extern fn LLVMInitializeAMDGPUTarget() void;
@@ -200,6 +201,7 @@ pub extern fn LLVMInitializeM68kTarget() void;
pub extern fn LLVMInitializeVETarget() void;
pub extern fn LLVMInitializeCSKYTarget() void;
pub extern fn LLVMInitializeARCTarget() void;
+pub extern fn LLVMInitializeLoongArchTarget() void;
pub extern fn LLVMInitializeAArch64TargetMC() void;
pub extern fn LLVMInitializeAMDGPUTargetMC() void;
@@ -223,6 +225,7 @@ pub extern fn LLVMInitializeM68kTargetMC() void;
pub extern fn LLVMInitializeCSKYTargetMC() void;
pub extern fn LLVMInitializeVETargetMC() void;
pub extern fn LLVMInitializeARCTargetMC() void;
+pub extern fn LLVMInitializeLoongArchTargetMC() void;
pub extern fn LLVMInitializeAArch64AsmPrinter() void;
pub extern fn LLVMInitializeAMDGPUAsmPrinter() void;
@@ -244,6 +247,7 @@ pub extern fn LLVMInitializeXCoreAsmPrinter() void;
pub extern fn LLVMInitializeM68kAsmPrinter() void;
pub extern fn LLVMInitializeVEAsmPrinter() void;
pub extern fn LLVMInitializeARCAsmPrinter() void;
+pub extern fn LLVMInitializeLoongArchAsmPrinter() void;
pub extern fn LLVMInitializeAArch64AsmParser() void;
pub extern fn LLVMInitializeAMDGPUAsmParser() void;
@@ -264,6 +268,7 @@ pub extern fn LLVMInitializeXtensaAsmParser() void;
pub extern fn LLVMInitializeM68kAsmParser() void;
pub extern fn LLVMInitializeCSKYAsmParser() void;
pub extern fn LLVMInitializeVEAsmParser() void;
+pub extern fn LLVMInitializeLoongArchAsmParser() void;
extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;
extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;