From 1285d41186451b46cd10e5a69df2873330a8d1a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 24 Nov 2024 06:40:58 +0100 Subject: [PATCH 1/4] compiler-rt: Fix duplicate labels in Hexagon routines. --- lib/compiler_rt/hexagon.zig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/compiler_rt/hexagon.zig b/lib/compiler_rt/hexagon.zig index 73b1cbbbb611..2ee4542925d9 100644 --- a/lib/compiler_rt/hexagon.zig +++ b/lib/compiler_rt/hexagon.zig @@ -938,7 +938,7 @@ fn __hexagon_divdf3() align(32) callconv(.naked) noreturn { \\ } \\ { \\ p0 = cmp.gt(r12,#0) - \\ if (p0.new) jump:nt .Lpossible_unf + \\ if (p0.new) jump:nt .Ldiv_possible_unf \\ } \\ { \\ r13 = add(clb(r7:6),#-1) @@ -981,7 +981,7 @@ fn __hexagon_divdf3() align(32) callconv(.naked) noreturn { \\ } \\ \\ - \\ .Lpossible_unf: + \\ .Ldiv_possible_unf: \\ \\ \\ { @@ -1250,7 +1250,7 @@ fn __hexagon_muldf3() align(32) callconv(.naked) noreturn { \\ } \\ \\ .falign - \\ .Lpossible_unf: + \\ .Lmul_possible_unf: \\ { \\ p0 = cmp.eq(r0,#0) \\ p0 = bitsclr(r1,r4) @@ -1295,7 +1295,7 @@ fn __hexagon_muldf3() align(32) callconv(.naked) noreturn { \\ } \\ { \\ p0 = cmp.gt(r7,#0) - \\ if (p0.new) jump:nt .Lpossible_unf + \\ if (p0.new) jump:nt .Lmul_possible_unf \\ r5 = sub(r6,r5) \\ r28 = #63 \\ } From 47f84acc12e2083a1907bc388587aebc70b9d49a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 24 Nov 2024 06:41:58 +0100 Subject: [PATCH 2/4] compiler-rt: Remove duplicate __hexagon_divsf3 export. --- lib/compiler_rt/hexagon.zig | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/compiler_rt/hexagon.zig b/lib/compiler_rt/hexagon.zig index 2ee4542925d9..229b55d0c7fb 100644 --- a/lib/compiler_rt/hexagon.zig +++ b/lib/compiler_rt/hexagon.zig @@ -1778,7 +1778,6 @@ comptime { @export(__hexagon_sqrtf, .{ .name = "__hexagon_fast2_sqrtf", .linkage = common.linkage, .visibility = common.visibility }); @export(__hexagon_moddi3, .{ .name = "__hexagon_moddi3", .linkage = common.linkage, .visibility = common.visibility }); @export(__hexagon_divdi3, .{ .name = "__hexagon_divdi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divsf3, .{ .name = "__hexagon_divsf3", .linkage = common.linkage, .visibility = common.visibility }); @export(__hexagon_udivdi3, .{ .name = "__hexagon_udivdi3", .linkage = common.linkage, .visibility = common.visibility }); @export(__hexagon_umoddi3, .{ .name = "__hexagon_umoddi3", .linkage = common.linkage, .visibility = common.visibility }); @export(__hexagon_modsi3, .{ .name = "__hexagon_modsi3", .linkage = common.linkage, .visibility = common.visibility }); From 62074ec61b132073106f85fe60386d086bded544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 24 Nov 2024 06:42:16 +0100 Subject: [PATCH 3/4] compiler-rt: Fix Hexagon routines to use the new @export() pointer semantics. --- lib/compiler_rt/hexagon.zig | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/compiler_rt/hexagon.zig b/lib/compiler_rt/hexagon.zig index 229b55d0c7fb..de7fd9649124 100644 --- a/lib/compiler_rt/hexagon.zig +++ b/lib/compiler_rt/hexagon.zig @@ -1759,29 +1759,29 @@ fn __hexagon_sqrtdf2() align(32) callconv(.naked) noreturn { comptime { if (builtin.cpu.arch == .hexagon) { - @export(__hexagon_adddf3, .{ .name = "__hexagon_adddf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_adddf3, .{ .name = "__hexagon_fast_adddf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_subdf3, .{ .name = "__hexagon_subdf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_subdf3, .{ .name = "__hexagon_fast_subdf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divdf3, .{ .name = "__hexagon_divdf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divdf3, .{ .name = "__hexagon_fast_divdf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_muldf3, .{ .name = "__hexagon_muldf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_muldf3, .{ .name = "__hexagon_fast_muldf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_sqrtdf2, .{ .name = "__hexagon_sqrtdf2", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_sqrtdf2, .{ .name = "__hexagon_fast2_sqrtdf2", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_sqrtdf2, .{ .name = "__hexagon_sqrt", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divsf3, .{ .name = "__hexagon_divsf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divsf3, .{ .name = "__hexagon_fast_divsf3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divsi3, .{ .name = "__hexagon_divsi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_umodsi3, .{ .name = "__hexagon_umodsi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_sqrtf, .{ .name = "__hexagon_sqrtf", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_sqrtf, .{ .name = "__hexagon_fast2_sqrtf", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_moddi3, .{ .name = "__hexagon_moddi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_divdi3, .{ .name = "__hexagon_divdi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_udivdi3, .{ .name = "__hexagon_udivdi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_umoddi3, .{ .name = "__hexagon_umoddi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_modsi3, .{ .name = "__hexagon_modsi3", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes, .{ .name = "__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes", .linkage = common.linkage, .visibility = common.visibility }); - @export(__hexagon_udivsi3, .{ .name = "__hexagon_udivsi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_adddf3, .{ .name = "__hexagon_adddf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_adddf3, .{ .name = "__hexagon_fast_adddf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_subdf3, .{ .name = "__hexagon_subdf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_subdf3, .{ .name = "__hexagon_fast_subdf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_divdf3, .{ .name = "__hexagon_divdf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_divdf3, .{ .name = "__hexagon_fast_divdf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_muldf3, .{ .name = "__hexagon_muldf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_muldf3, .{ .name = "__hexagon_fast_muldf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_sqrtdf2, .{ .name = "__hexagon_sqrtdf2", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_sqrtdf2, .{ .name = "__hexagon_fast2_sqrtdf2", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_sqrtdf2, .{ .name = "__hexagon_sqrt", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_divsf3, .{ .name = "__hexagon_divsf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_divsf3, .{ .name = "__hexagon_fast_divsf3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_divsi3, .{ .name = "__hexagon_divsi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_umodsi3, .{ .name = "__hexagon_umodsi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_sqrtf, .{ .name = "__hexagon_sqrtf", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_sqrtf, .{ .name = "__hexagon_fast2_sqrtf", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_moddi3, .{ .name = "__hexagon_moddi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_divdi3, .{ .name = "__hexagon_divdi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_udivdi3, .{ .name = "__hexagon_udivdi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_umoddi3, .{ .name = "__hexagon_umoddi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_modsi3, .{ .name = "__hexagon_modsi3", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes, .{ .name = "__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes", .linkage = common.linkage, .visibility = common.visibility }); + @export(&__hexagon_udivsi3, .{ .name = "__hexagon_udivsi3", .linkage = common.linkage, .visibility = common.visibility }); } } From aa19e71a27a653b01908f334077fd23905a0d291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 24 Nov 2024 08:18:41 +0100 Subject: [PATCH 4/4] zig.h: Add zig_trap() and zig_breakpoint() implementations for Hexagon. --- lib/zig.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/zig.h b/lib/zig.h index 248bb8641cc7..14b50aea47fb 100644 --- a/lib/zig.h +++ b/lib/zig.h @@ -256,6 +256,8 @@ typedef char bool; #define zig_trap() __asm__ volatile("udf #0xfe") #elif defined(__arm__) || defined(__aarch64__) #define zig_trap() __asm__ volatile("udf #0xfdee") +#elif defined(__hexagon__) +#define zig_trap() __asm__ volatile("r27:26 = memd(#0xbadc0fee)") #elif defined(__loongarch__) || defined(__powerpc__) #define zig_trap() __asm__ volatile(".word 0x0") #elif defined(__mips__) @@ -280,6 +282,8 @@ typedef char bool; #define zig_breakpoint() __asm__ volatile("bkpt #0x0") #elif defined(__aarch64__) #define zig_breakpoint() __asm__ volatile("brk #0xf000") +#elif defined(__hexagon__) +#define zig_breakpoint() __asm__ volatile("brkpt") #elif defined(__loongarch__) #define zig_breakpoint() __asm__ volatile("break 0x0") #elif defined(__mips__)