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 {
2828 .aarch64, .aarch64_be => true,
2929 else => false,
3030 };
31 const loongarch64 = switch (arch) {
32 .loongarch64 => true,
31 const loongarch = switch (arch) {
32 .loongarch32,
33 .loongarch64,
34 => true,
3335 else => false,
3436 };
3537 const mips = switch (arch) {
......@@ -163,7 +165,7 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {
163165 // On Darwin, sys_icache_invalidate() provides this functionality
164166 sys_icache_invalidate(start, end - start);
165167 exportIt();
166 } else if (os == .linux and loongarch64) {
168 } else if (os == .linux and loongarch) {
167169 // See: https://github.com/llvm/llvm-project/blob/cf54cae26b65fc3201eff7200ffb9b0c9e8f9a13/compiler-rt/lib/builtins/clear_cache.c#L94-L95
168170 asm volatile (
169171 \\ ibar 0
lib/std/Target.zig+2-2
......@@ -2711,7 +2711,6 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {
27112711 .csky,
27122712 .x86,
27132713 .xcore,
2714 .loongarch32,
27152714 .kalimba,
27162715 .spu_2,
27172716 .xtensa,
......@@ -2735,6 +2734,7 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {
27352734
27362735 .aarch64,
27372736 .aarch64_be,
2737 .loongarch32,
27382738 .loongarch64,
27392739 .mips64,
27402740 .mips64el,
......@@ -2815,7 +2815,6 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
28152815
28162816 .csky,
28172817 .xcore,
2818 .loongarch32,
28192818 .kalimba,
28202819 .spu_2,
28212820 .xtensa,
......@@ -2845,6 +2844,7 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
28452844
28462845 .aarch64,
28472846 .aarch64_be,
2847 .loongarch32,
28482848 .loongarch64,
28492849 .mips64,
28502850 .mips64el,
lib/std/Thread.zig+1-1
......@@ -1338,7 +1338,7 @@ const LinuxThreadImpl = struct {
13381338 [len] "r" (self.mapped.len),
13391339 : "memory"
13401340 ),
1341 .loongarch64 => asm volatile (
1341 .loongarch32, .loongarch64 => asm volatile (
13421342 \\ or $a0, $zero, %[ptr]
13431343 \\ or $a1, $zero, %[len]
13441344 \\ ori $a7, $zero, 215 # SYS_munmap
src/codegen/llvm.zig+5-1
......@@ -520,6 +520,7 @@ const DataLayoutBuilder = struct {
520520 .arm,
521521 .armeb,
522522 .csky,
523 .loongarch32,
523524 .mips,
524525 .mipsel,
525526 .powerpc,
......@@ -535,6 +536,7 @@ const DataLayoutBuilder = struct {
535536 .amdgcn,
536537 .bpfeb,
537538 .bpfel,
539 .loongarch64,
538540 .mips64,
539541 .mips64el,
540542 .powerpc64,
......@@ -554,7 +556,6 @@ const DataLayoutBuilder = struct {
554556 .nvptx64,
555557 => &.{ 16, 32, 64 },
556558 .x86_64 => &.{ 8, 16, 32, 64 },
557 .loongarch64 => &.{64},
558559 else => &.{},
559560 }), 0..) |natural, index| switch (index) {
560561 0 => try writer.print("-n{d}", .{natural}),
......@@ -12452,6 +12453,9 @@ fn backendSupportsF80(target: std.Target) bool {
1245212453/// if it produces miscompilations.
1245312454fn backendSupportsF16(target: std.Target) bool {
1245412455 return switch (target.cpu.arch) {
12456 // LoongArch can be removed from this list with LLVM 20.
12457 .loongarch32,
12458 .loongarch64,
1245512459 .hexagon,
1245612460 .powerpc,
1245712461 .powerpcle,
test/llvm_targets.zig-4
......@@ -108,10 +108,6 @@ const targets = [_]std.Target.Query{
108108 .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none },
109109
110110 .{ .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 },
115111 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none },
116112 .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none },
117113