| author | |
| committer | |
| log | ac3faa6cb3244a5db26b4fd5b114da23208e2239 |
| tree | 654d7b95c0ed568e5d6758289286ea94692180a1 |
| parent | 332fbb4b027a5529e58b1e46d785718a7faa75e6 |
3 files changed, 26 insertions(+), 3 deletions(-)
lib/std/Target.zig+2| ... | @@ -1537,6 +1537,7 @@ pub const Cpu = struct { | ... | @@ -1537,6 +1537,7 @@ pub const Cpu = struct { |
| 1537 | .x86 => &x86.cpu.pentium4, | 1537 | .x86 => &x86.cpu.pentium4, |
| 1538 | .nvptx, .nvptx64 => &nvptx.cpu.sm_20, | 1538 | .nvptx, .nvptx64 => &nvptx.cpu.sm_20, |
| 1539 | .sparc, .sparcel => &sparc.cpu.v8, | 1539 | .sparc, .sparcel => &sparc.cpu.v8, |
| 1540 | .loongarch64 => &loongarch.cpu.loongarch64, | ||
| 1540 | 1541 | ||
| 1541 | else => generic(arch), | 1542 | else => generic(arch), |
| 1542 | }; | 1543 | }; |
| ... | @@ -1986,6 +1987,7 @@ pub fn stackAlignment(target: Target) u16 { | ... | @@ -1986,6 +1987,7 @@ pub fn stackAlignment(target: Target) u16 { |
| 1986 | .ve, | 1987 | .ve, |
| 1987 | .wasm32, | 1988 | .wasm32, |
| 1988 | .wasm64, | 1989 | .wasm64, |
| 1990 | .loongarch64, | ||
| 1989 | => 16, | 1991 | => 16, |
| 1990 | .powerpc64, | 1992 | .powerpc64, |
| 1991 | .powerpc64le, | 1993 | .powerpc64le, |
src/codegen/llvm.zig+19-3| ... | @@ -426,7 +426,9 @@ const DataLayoutBuilder = struct { | ... | @@ -426,7 +426,9 @@ const DataLayoutBuilder = struct { |
| 426 | }; | 426 | }; |
| 427 | if (self.target.cpu.arch == .aarch64_32) continue; | 427 | if (self.target.cpu.arch == .aarch64_32) continue; |
| 428 | if (!info.force_in_data_layout and matches_default and | 428 | 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 | ||
| 430 | (self.target.os.tag == .uefi or self.target.os.tag == .windows)) and | 432 | (self.target.os.tag == .uefi or self.target.os.tag == .windows)) and |
| 431 | self.target.cpu.arch != .bpfeb and self.target.cpu.arch != .bpfel) continue; | 433 | self.target.cpu.arch != .bpfeb and self.target.cpu.arch != .bpfel) continue; |
| 432 | try writer.writeAll("-p"); | 434 | try writer.writeAll("-p"); |
| ... | @@ -535,6 +537,7 @@ const DataLayoutBuilder = struct { | ... | @@ -535,6 +537,7 @@ const DataLayoutBuilder = struct { |
| 535 | .nvptx64, | 537 | .nvptx64, |
| 536 | => &.{ 16, 32, 64 }, | 538 | => &.{ 16, 32, 64 }, |
| 537 | .x86_64 => &.{ 8, 16, 32, 64 }, | 539 | .x86_64 => &.{ 8, 16, 32, 64 }, |
| 540 | .loongarch64 => &.{64}, | ||
| 538 | else => &.{}, | 541 | else => &.{}, |
| 539 | }), 0..) |natural, index| switch (index) { | 542 | }), 0..) |natural, index| switch (index) { |
| 540 | 0 => try writer.print("-n{d}", .{natural}), | 543 | 0 => try writer.print("-n{d}", .{natural}), |
| ... | @@ -686,6 +689,14 @@ const DataLayoutBuilder = struct { | ... | @@ -686,6 +689,14 @@ const DataLayoutBuilder = struct { |
| 686 | }, | 689 | }, |
| 687 | else => {}, | 690 | else => {}, |
| 688 | }, | 691 | }, |
| 692 | .loongarch64 => switch (size) { | ||
| 693 | 128 => { | ||
| 694 | abi = size; | ||
| 695 | pref = size; | ||
| 696 | force_abi = true; | ||
| 697 | }, | ||
| 698 | else => {}, | ||
| 699 | }, | ||
| 689 | else => {}, | 700 | else => {}, |
| 690 | } | 701 | } |
| 691 | }, | 702 | }, |
| ... | @@ -12039,6 +12050,13 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { | ... | @@ -12039,6 +12050,13 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { |
| 12039 | // There is no LLVMInitializeARCAsmParser function. | 12050 | // There is no LLVMInitializeARCAsmParser function. |
| 12040 | } | 12051 | } |
| 12041 | }, | 12052 | }, |
| 12053 | .loongarch32, .loongarch64 => { | ||
| 12054 | llvm.LLVMInitializeLoongArchTarget(); | ||
| 12055 | llvm.LLVMInitializeLoongArchTargetInfo(); | ||
| 12056 | llvm.LLVMInitializeLoongArchTargetMC(); | ||
| 12057 | llvm.LLVMInitializeLoongArchAsmPrinter(); | ||
| 12058 | llvm.LLVMInitializeLoongArchAsmParser(); | ||
| 12059 | }, | ||
| 12042 | 12060 | ||
| 12043 | // LLVM backends that have no initialization functions. | 12061 | // LLVM backends that have no initialization functions. |
| 12044 | .tce, | 12062 | .tce, |
| ... | @@ -12060,8 +12078,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { | ... | @@ -12060,8 +12078,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { |
| 12060 | .renderscript32, | 12078 | .renderscript32, |
| 12061 | .renderscript64, | 12079 | .renderscript64, |
| 12062 | .dxil, | 12080 | .dxil, |
| 12063 | .loongarch32, | ||
| 12064 | .loongarch64, | ||
| 12065 | => {}, | 12081 | => {}, |
| 12066 | 12082 | ||
| 12067 | .spu_2 => unreachable, // LLVM does not support this backend | 12083 | .spu_2 => unreachable, // LLVM does not support this backend |
src/codegen/llvm/bindings.zig+5| ... | @@ -177,6 +177,7 @@ pub extern fn LLVMInitializeM68kTargetInfo() void; | ... | @@ -177,6 +177,7 @@ pub extern fn LLVMInitializeM68kTargetInfo() void; |
| 177 | pub extern fn LLVMInitializeCSKYTargetInfo() void; | 177 | pub extern fn LLVMInitializeCSKYTargetInfo() void; |
| 178 | pub extern fn LLVMInitializeVETargetInfo() void; | 178 | pub extern fn LLVMInitializeVETargetInfo() void; |
| 179 | pub extern fn LLVMInitializeARCTargetInfo() void; | 179 | pub extern fn LLVMInitializeARCTargetInfo() void; |
| 180 | pub extern fn LLVMInitializeLoongArchTargetInfo() void; | ||
| 180 | 181 | ||
| 181 | pub extern fn LLVMInitializeAArch64Target() void; | 182 | pub extern fn LLVMInitializeAArch64Target() void; |
| 182 | pub extern fn LLVMInitializeAMDGPUTarget() void; | 183 | pub extern fn LLVMInitializeAMDGPUTarget() void; |
| ... | @@ -200,6 +201,7 @@ pub extern fn LLVMInitializeM68kTarget() void; | ... | @@ -200,6 +201,7 @@ pub extern fn LLVMInitializeM68kTarget() void; |
| 200 | pub extern fn LLVMInitializeVETarget() void; | 201 | pub extern fn LLVMInitializeVETarget() void; |
| 201 | pub extern fn LLVMInitializeCSKYTarget() void; | 202 | pub extern fn LLVMInitializeCSKYTarget() void; |
| 202 | pub extern fn LLVMInitializeARCTarget() void; | 203 | pub extern fn LLVMInitializeARCTarget() void; |
| 204 | pub extern fn LLVMInitializeLoongArchTarget() void; | ||
| 203 | 205 | ||
| 204 | pub extern fn LLVMInitializeAArch64TargetMC() void; | 206 | pub extern fn LLVMInitializeAArch64TargetMC() void; |
| 205 | pub extern fn LLVMInitializeAMDGPUTargetMC() void; | 207 | pub extern fn LLVMInitializeAMDGPUTargetMC() void; |
| ... | @@ -223,6 +225,7 @@ pub extern fn LLVMInitializeM68kTargetMC() void; | ... | @@ -223,6 +225,7 @@ pub extern fn LLVMInitializeM68kTargetMC() void; |
| 223 | pub extern fn LLVMInitializeCSKYTargetMC() void; | 225 | pub extern fn LLVMInitializeCSKYTargetMC() void; |
| 224 | pub extern fn LLVMInitializeVETargetMC() void; | 226 | pub extern fn LLVMInitializeVETargetMC() void; |
| 225 | pub extern fn LLVMInitializeARCTargetMC() void; | 227 | pub extern fn LLVMInitializeARCTargetMC() void; |
| 228 | pub extern fn LLVMInitializeLoongArchTargetMC() void; | ||
| 226 | 229 | ||
| 227 | pub extern fn LLVMInitializeAArch64AsmPrinter() void; | 230 | pub extern fn LLVMInitializeAArch64AsmPrinter() void; |
| 228 | pub extern fn LLVMInitializeAMDGPUAsmPrinter() void; | 231 | pub extern fn LLVMInitializeAMDGPUAsmPrinter() void; |
| ... | @@ -244,6 +247,7 @@ pub extern fn LLVMInitializeXCoreAsmPrinter() void; | ... | @@ -244,6 +247,7 @@ pub extern fn LLVMInitializeXCoreAsmPrinter() void; |
| 244 | pub extern fn LLVMInitializeM68kAsmPrinter() void; | 247 | pub extern fn LLVMInitializeM68kAsmPrinter() void; |
| 245 | pub extern fn LLVMInitializeVEAsmPrinter() void; | 248 | pub extern fn LLVMInitializeVEAsmPrinter() void; |
| 246 | pub extern fn LLVMInitializeARCAsmPrinter() void; | 249 | pub extern fn LLVMInitializeARCAsmPrinter() void; |
| 250 | pub extern fn LLVMInitializeLoongArchAsmPrinter() void; | ||
| 247 | 251 | ||
| 248 | pub extern fn LLVMInitializeAArch64AsmParser() void; | 252 | pub extern fn LLVMInitializeAArch64AsmParser() void; |
| 249 | pub extern fn LLVMInitializeAMDGPUAsmParser() void; | 253 | pub extern fn LLVMInitializeAMDGPUAsmParser() void; |
| ... | @@ -264,6 +268,7 @@ pub extern fn LLVMInitializeXtensaAsmParser() void; | ... | @@ -264,6 +268,7 @@ pub extern fn LLVMInitializeXtensaAsmParser() void; |
| 264 | pub extern fn LLVMInitializeM68kAsmParser() void; | 268 | pub extern fn LLVMInitializeM68kAsmParser() void; |
| 265 | pub extern fn LLVMInitializeCSKYAsmParser() void; | 269 | pub extern fn LLVMInitializeCSKYAsmParser() void; |
| 266 | pub extern fn LLVMInitializeVEAsmParser() void; | 270 | pub extern fn LLVMInitializeVEAsmParser() void; |
| 271 | pub extern fn LLVMInitializeLoongArchAsmParser() void; | ||
| 267 | 272 | ||
| 268 | extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; | 273 | extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; |
| 269 | extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; | 274 | extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; |