authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-16 09:13:51+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-10-16 09:13:51+02:00
logbdd3bc056ee998770ea48a93b4ec99521f069aed
tree761f67d3d1ef3f9d98678abe859b4f8abe889463
parentecd5878b74940852e8a63154aba165047bca0e0a
parent7a3626d1c683aff6ba048bee19622a6a02df334a
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #21715 from alexrp/loongarch-porting

Some miscellaneous LoongArch port work

5 files changed, 13 insertions(+), 11 deletions(-)

lib/compiler_rt/clear_cache.zig+5-3
...@@ -28,8 +28,10 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {...@@ -28,8 +28,10 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {
28 .aarch64, .aarch64_be => true,28 .aarch64, .aarch64_be => true,
29 else => false,29 else => false,
30 };30 };
31 const loongarch64 = switch (arch) {31 const loongarch = switch (arch) {
32 .loongarch64 => true,32 .loongarch32,
33 .loongarch64,
34 => true,
33 else => false,35 else => false,
34 };36 };
35 const mips = switch (arch) {37 const mips = switch (arch) {
...@@ -163,7 +165,7 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {...@@ -163,7 +165,7 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {
163 // On Darwin, sys_icache_invalidate() provides this functionality165 // On Darwin, sys_icache_invalidate() provides this functionality
164 sys_icache_invalidate(start, end - start);166 sys_icache_invalidate(start, end - start);
165 exportIt();167 exportIt();
166 } else if (os == .linux and loongarch64) {168 } else if (os == .linux and loongarch) {
167 // See: https://github.com/llvm/llvm-project/blob/cf54cae26b65fc3201eff7200ffb9b0c9e8f9a13/compiler-rt/lib/builtins/clear_cache.c#L94-L95169 // See: https://github.com/llvm/llvm-project/blob/cf54cae26b65fc3201eff7200ffb9b0c9e8f9a13/compiler-rt/lib/builtins/clear_cache.c#L94-L95
168 asm volatile (170 asm volatile (
169 \\ ibar 0171 \\ ibar 0
lib/std/Target.zig+2-2
...@@ -2711,7 +2711,6 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {...@@ -2711,7 +2711,6 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {
2711 .csky,2711 .csky,
2712 .x86,2712 .x86,
2713 .xcore,2713 .xcore,
2714 .loongarch32,
2715 .kalimba,2714 .kalimba,
2716 .spu_2,2715 .spu_2,
2717 .xtensa,2716 .xtensa,
...@@ -2735,6 +2734,7 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {...@@ -2735,6 +2734,7 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {
27352734
2736 .aarch64,2735 .aarch64,
2737 .aarch64_be,2736 .aarch64_be,
2737 .loongarch32,
2738 .loongarch64,2738 .loongarch64,
2739 .mips64,2739 .mips64,
2740 .mips64el,2740 .mips64el,
...@@ -2815,7 +2815,6 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {...@@ -2815,7 +2815,6 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
28152815
2816 .csky,2816 .csky,
2817 .xcore,2817 .xcore,
2818 .loongarch32,
2819 .kalimba,2818 .kalimba,
2820 .spu_2,2819 .spu_2,
2821 .xtensa,2820 .xtensa,
...@@ -2845,6 +2844,7 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {...@@ -2845,6 +2844,7 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
28452844
2846 .aarch64,2845 .aarch64,
2847 .aarch64_be,2846 .aarch64_be,
2847 .loongarch32,
2848 .loongarch64,2848 .loongarch64,
2849 .mips64,2849 .mips64,
2850 .mips64el,2850 .mips64el,
lib/std/Thread.zig+1-1
...@@ -1338,7 +1338,7 @@ const LinuxThreadImpl = struct {...@@ -1338,7 +1338,7 @@ const LinuxThreadImpl = struct {
1338 [len] "r" (self.mapped.len),1338 [len] "r" (self.mapped.len),
1339 : "memory"1339 : "memory"
1340 ),1340 ),
1341 .loongarch64 => asm volatile (1341 .loongarch32, .loongarch64 => asm volatile (
1342 \\ or $a0, $zero, %[ptr]1342 \\ or $a0, $zero, %[ptr]
1343 \\ or $a1, $zero, %[len]1343 \\ or $a1, $zero, %[len]
1344 \\ ori $a7, $zero, 215 # SYS_munmap1344 \\ ori $a7, $zero, 215 # SYS_munmap
src/codegen/llvm.zig+5-1
...@@ -520,6 +520,7 @@ const DataLayoutBuilder = struct {...@@ -520,6 +520,7 @@ const DataLayoutBuilder = struct {
520 .arm,520 .arm,
521 .armeb,521 .armeb,
522 .csky,522 .csky,
523 .loongarch32,
523 .mips,524 .mips,
524 .mipsel,525 .mipsel,
525 .powerpc,526 .powerpc,
...@@ -535,6 +536,7 @@ const DataLayoutBuilder = struct {...@@ -535,6 +536,7 @@ const DataLayoutBuilder = struct {
535 .amdgcn,536 .amdgcn,
536 .bpfeb,537 .bpfeb,
537 .bpfel,538 .bpfel,
539 .loongarch64,
538 .mips64,540 .mips64,
539 .mips64el,541 .mips64el,
540 .powerpc64,542 .powerpc64,
...@@ -554,7 +556,6 @@ const DataLayoutBuilder = struct {...@@ -554,7 +556,6 @@ const DataLayoutBuilder = struct {
554 .nvptx64,556 .nvptx64,
555 => &.{ 16, 32, 64 },557 => &.{ 16, 32, 64 },
556 .x86_64 => &.{ 8, 16, 32, 64 },558 .x86_64 => &.{ 8, 16, 32, 64 },
557 .loongarch64 => &.{64},
558 else => &.{},559 else => &.{},
559 }), 0..) |natural, index| switch (index) {560 }), 0..) |natural, index| switch (index) {
560 0 => try writer.print("-n{d}", .{natural}),561 0 => try writer.print("-n{d}", .{natural}),
...@@ -12452,6 +12453,9 @@ fn backendSupportsF80(target: std.Target) bool {...@@ -12452,6 +12453,9 @@ fn backendSupportsF80(target: std.Target) bool {
12452/// if it produces miscompilations.12453/// if it produces miscompilations.
12453fn backendSupportsF16(target: std.Target) bool {12454fn backendSupportsF16(target: std.Target) bool {
12454 return switch (target.cpu.arch) {12455 return switch (target.cpu.arch) {
12456 // LoongArch can be removed from this list with LLVM 20.
12457 .loongarch32,
12458 .loongarch64,
12455 .hexagon,12459 .hexagon,
12456 .powerpc,12460 .powerpc,
12457 .powerpcle,12461 .powerpcle,
test/llvm_targets.zig-4
...@@ -108,10 +108,6 @@ const targets = [_]std.Target.Query{...@@ -108,10 +108,6 @@ const targets = [_]std.Target.Query{
108 .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none },108 .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none },
109109
110 .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none },110 .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none },
111 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnu },
112 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnuf32 },
113 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnusf },
114 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .musl },
115 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none },111 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none },
116 .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none },112 .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none },
117113