authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-06-04 21:54:07-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-06-05 13:43:35-04:00
logac3faa6cb3244a5db26b4fd5b114da23208e2239
tree654d7b95c0ed568e5d6758289286ea94692180a1
parent332fbb4b027a5529e58b1e46d785718a7faa75e6

LLVM backend: loongarch64 support


3 files changed, 26 insertions(+), 3 deletions(-)

lib/std/Target.zig+2
......@@ -1537,6 +1537,7 @@ pub const Cpu = struct {
15371537 .x86 => &x86.cpu.pentium4,
15381538 .nvptx, .nvptx64 => &nvptx.cpu.sm_20,
15391539 .sparc, .sparcel => &sparc.cpu.v8,
1540 .loongarch64 => &loongarch.cpu.loongarch64,
15401541
15411542 else => generic(arch),
15421543 };
......@@ -1986,6 +1987,7 @@ pub fn stackAlignment(target: Target) u16 {
19861987 .ve,
19871988 .wasm32,
19881989 .wasm64,
1990 .loongarch64,
19891991 => 16,
19901992 .powerpc64,
19911993 .powerpc64le,
src/codegen/llvm.zig+19-3
......@@ -426,7 +426,9 @@ const DataLayoutBuilder = struct {
426426 };
427427 if (self.target.cpu.arch == .aarch64_32) continue;
428428 if (!info.force_in_data_layout and matches_default and
429 self.target.cpu.arch != .riscv64 and !(self.target.cpu.arch == .aarch64 and
429 self.target.cpu.arch != .riscv64 and
430 self.target.cpu.arch != .loongarch64 and
431 !(self.target.cpu.arch == .aarch64 and
430432 (self.target.os.tag == .uefi or self.target.os.tag == .windows)) and
431433 self.target.cpu.arch != .bpfeb and self.target.cpu.arch != .bpfel) continue;
432434 try writer.writeAll("-p");
......@@ -535,6 +537,7 @@ const DataLayoutBuilder = struct {
535537 .nvptx64,
536538 => &.{ 16, 32, 64 },
537539 .x86_64 => &.{ 8, 16, 32, 64 },
540 .loongarch64 => &.{64},
538541 else => &.{},
539542 }), 0..) |natural, index| switch (index) {
540543 0 => try writer.print("-n{d}", .{natural}),
......@@ -686,6 +689,14 @@ const DataLayoutBuilder = struct {
686689 },
687690 else => {},
688691 },
692 .loongarch64 => switch (size) {
693 128 => {
694 abi = size;
695 pref = size;
696 force_abi = true;
697 },
698 else => {},
699 },
689700 else => {},
690701 }
691702 },
......@@ -12039,6 +12050,13 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
1203912050 // There is no LLVMInitializeARCAsmParser function.
1204012051 }
1204112052 },
12053 .loongarch32, .loongarch64 => {
12054 llvm.LLVMInitializeLoongArchTarget();
12055 llvm.LLVMInitializeLoongArchTargetInfo();
12056 llvm.LLVMInitializeLoongArchTargetMC();
12057 llvm.LLVMInitializeLoongArchAsmPrinter();
12058 llvm.LLVMInitializeLoongArchAsmParser();
12059 },
1204212060
1204312061 // LLVM backends that have no initialization functions.
1204412062 .tce,
......@@ -12060,8 +12078,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
1206012078 .renderscript32,
1206112079 .renderscript64,
1206212080 .dxil,
12063 .loongarch32,
12064 .loongarch64,
1206512081 => {},
1206612082
1206712083 .spu_2 => unreachable, // LLVM does not support this backend
src/codegen/llvm/bindings.zig+5
......@@ -177,6 +177,7 @@ pub extern fn LLVMInitializeM68kTargetInfo() void;
177177pub extern fn LLVMInitializeCSKYTargetInfo() void;
178178pub extern fn LLVMInitializeVETargetInfo() void;
179179pub extern fn LLVMInitializeARCTargetInfo() void;
180pub extern fn LLVMInitializeLoongArchTargetInfo() void;
180181
181182pub extern fn LLVMInitializeAArch64Target() void;
182183pub extern fn LLVMInitializeAMDGPUTarget() void;
......@@ -200,6 +201,7 @@ pub extern fn LLVMInitializeM68kTarget() void;
200201pub extern fn LLVMInitializeVETarget() void;
201202pub extern fn LLVMInitializeCSKYTarget() void;
202203pub extern fn LLVMInitializeARCTarget() void;
204pub extern fn LLVMInitializeLoongArchTarget() void;
203205
204206pub extern fn LLVMInitializeAArch64TargetMC() void;
205207pub extern fn LLVMInitializeAMDGPUTargetMC() void;
......@@ -223,6 +225,7 @@ pub extern fn LLVMInitializeM68kTargetMC() void;
223225pub extern fn LLVMInitializeCSKYTargetMC() void;
224226pub extern fn LLVMInitializeVETargetMC() void;
225227pub extern fn LLVMInitializeARCTargetMC() void;
228pub extern fn LLVMInitializeLoongArchTargetMC() void;
226229
227230pub extern fn LLVMInitializeAArch64AsmPrinter() void;
228231pub extern fn LLVMInitializeAMDGPUAsmPrinter() void;
......@@ -244,6 +247,7 @@ pub extern fn LLVMInitializeXCoreAsmPrinter() void;
244247pub extern fn LLVMInitializeM68kAsmPrinter() void;
245248pub extern fn LLVMInitializeVEAsmPrinter() void;
246249pub extern fn LLVMInitializeARCAsmPrinter() void;
250pub extern fn LLVMInitializeLoongArchAsmPrinter() void;
247251
248252pub extern fn LLVMInitializeAArch64AsmParser() void;
249253pub extern fn LLVMInitializeAMDGPUAsmParser() void;
......@@ -264,6 +268,7 @@ pub extern fn LLVMInitializeXtensaAsmParser() void;
264268pub extern fn LLVMInitializeM68kAsmParser() void;
265269pub extern fn LLVMInitializeCSKYAsmParser() void;
266270pub extern fn LLVMInitializeVEAsmParser() void;
271pub extern fn LLVMInitializeLoongArchAsmParser() void;
267272
268273extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;
269274extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;