diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-06-04 21:54:07 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-06-05 13:43:35 -0400 |
| commit | ac3faa6cb3244a5db26b4fd5b114da23208e2239 (patch) | |
| tree | 654d7b95c0ed568e5d6758289286ea94692180a1 /src/codegen | |
| parent | 332fbb4b027a5529e58b1e46d785718a7faa75e6 (diff) | |
| download | zig-ac3faa6cb3244a5db26b4fd5b114da23208e2239.tar.gz zig-ac3faa6cb3244a5db26b4fd5b114da23208e2239.zip | |
LLVM backend: loongarch64 support
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/llvm.zig | 22 | ||||
| -rw-r--r-- | src/codegen/llvm/bindings.zig | 5 |
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; |
