authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-16 18:54:38+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-18 00:36:52+02:00
log727942bc03a2cd74d10c80894816456f9f66e977
tree8381e05a4293b10609804c1d9185a275e11b5f9e
parent1f15e265fe0861cbfad4479c69b79b46158d8d16
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.debug.cpu_context: let the compiler deal with clobbers

Otherwise we might be restoring registers we don't even need to.

1 files changed, 8 insertions(+), 21 deletions(-)

lib/std/debug/cpu_context.zig+8-21
...@@ -242,10 +242,9 @@ const Aarch64 = extern struct {...@@ -242,10 +242,9 @@ const Aarch64 = extern struct {
242 \\ str x1, [x0, #0x0f8]242 \\ str x1, [x0, #0x0f8]
243 \\ adr x1, .243 \\ adr x1, .
244 \\ str x1, [x0, #0x100]244 \\ str x1, [x0, #0x100]
245 \\ ldr x1, [x0, #0x008]
246 :245 :
247 : [ctx] "{x0}" (&ctx),246 : [ctx] "{x0}" (&ctx),
248 : .{ .memory = true });247 : .{ .x1 = true, .memory = true });
249 return ctx;248 return ctx;
250 }249 }
251250
...@@ -469,10 +468,9 @@ const Hexagon = extern struct {...@@ -469,10 +468,9 @@ const Hexagon = extern struct {
469 \\ memw(r0 + #124) = r31468 \\ memw(r0 + #124) = r31
470 \\ r1 = pc469 \\ r1 = pc
471 \\ memw(r0 + #128) = r1470 \\ memw(r0 + #128) = r1
472 \\ r1 = memw(r0 + #4)
473 :471 :
474 : [ctx] "{r0}" (&ctx),472 : [ctx] "{r0}" (&ctx),
475 : .{ .memory = true });473 : .{ .r1 = true, .memory = true });
476 return ctx;474 return ctx;
477 }475 }
478476
...@@ -594,7 +592,6 @@ const LoongArch = extern struct {...@@ -594,7 +592,6 @@ const LoongArch = extern struct {
594 \\ bl 1f592 \\ bl 1f
595 \\1:593 \\1:
596 \\ st.d $ra, $t0, 256594 \\ st.d $ra, $t0, 256
597 \\ ld.d $ra, $t0, 8
598 else595 else
599 \\ st.w $zero, $t0, 0596 \\ st.w $zero, $t0, 0
600 \\ st.w $ra, $t0, 4597 \\ st.w $ra, $t0, 4
...@@ -631,10 +628,9 @@ const LoongArch = extern struct {...@@ -631,10 +628,9 @@ const LoongArch = extern struct {
631 \\ bl 1f628 \\ bl 1f
632 \\1:629 \\1:
633 \\ st.w $ra, $t0, 128630 \\ st.w $ra, $t0, 128
634 \\ ld.w $ra, $t0, 4
635 :631 :
636 : [ctx] "{$r12}" (&ctx),632 : [ctx] "{$r12}" (&ctx),
637 : .{ .memory = true });633 : .{ .r1 = true, .memory = true });
638 return ctx;634 return ctx;
639 }635 }
640636
...@@ -734,7 +730,6 @@ const Mips = extern struct {...@@ -734,7 +730,6 @@ const Mips = extern struct {
734 \\ bal 1f730 \\ bal 1f
735 \\1:731 \\1:
736 \\ sd $ra, 256($t0)732 \\ sd $ra, 256($t0)
737 \\ ld $ra, 248($t0)
738 \\ .set pop733 \\ .set pop
739 else734 else
740 \\ .set push735 \\ .set push
...@@ -776,11 +771,10 @@ const Mips = extern struct {...@@ -776,11 +771,10 @@ const Mips = extern struct {
776 \\ bal 1f771 \\ bal 1f
777 \\1:772 \\1:
778 \\ sw $ra, 128($t4)773 \\ sw $ra, 128($t4)
779 \\ lw $ra, 124($t4)
780 \\ .set pop774 \\ .set pop
781 :775 :
782 : [ctx] "{$12}" (&ctx),776 : [ctx] "{$12}" (&ctx),
783 : .{ .memory = true });777 : .{ .r31 = true, .memory = true });
784 return ctx;778 return ctx;
785 }779 }
786780
...@@ -916,7 +910,6 @@ const Powerpc = extern struct {...@@ -916,7 +910,6 @@ const Powerpc = extern struct {
916 \\1:910 \\1:
917 \\ mflr 8911 \\ mflr 8
918 \\ std 8, 256(10)912 \\ std 8, 256(10)
919 \\ ld 8, 64(10)
920 else913 else
921 \\ stw 0, 0(10)914 \\ stw 0, 0(10)
922 \\ stw 1, 4(10)915 \\ stw 1, 4(10)
...@@ -956,10 +949,9 @@ const Powerpc = extern struct {...@@ -956,10 +949,9 @@ const Powerpc = extern struct {
956 \\1:949 \\1:
957 \\ mflr 8950 \\ mflr 8
958 \\ stw 8, 128(10)951 \\ stw 8, 128(10)
959 \\ lwz 8, 32(10)
960 :952 :
961 : [ctx] "{r10}" (&ctx),953 : [ctx] "{r10}" (&ctx),
962 : .{ .lr = true, .memory = true });954 : .{ .r8 = true, .lr = true, .memory = true });
963 return ctx;955 return ctx;
964 }956 }
965957
...@@ -1068,7 +1060,6 @@ const Riscv = extern struct {...@@ -1068,7 +1060,6 @@ const Riscv = extern struct {
1068 \\ jal ra, 1f1060 \\ jal ra, 1f
1069 \\1:1061 \\1:
1070 \\ sd ra, 256(t0)1062 \\ sd ra, 256(t0)
1071 \\ ld ra, 8(t0)
1072 else1063 else
1073 \\ sw zero, 0(t0)1064 \\ sw zero, 0(t0)
1074 \\ sw ra, 4(t0)1065 \\ sw ra, 4(t0)
...@@ -1105,10 +1096,9 @@ const Riscv = extern struct {...@@ -1105,10 +1096,9 @@ const Riscv = extern struct {
1105 \\ jal ra, 1f1096 \\ jal ra, 1f
1106 \\1:1097 \\1:
1107 \\ sw ra, 128(t0)1098 \\ sw ra, 128(t0)
1108 \\ lw ra, 4(t0)
1109 :1099 :
1110 : [ctx] "{t0}" (&ctx),1100 : [ctx] "{t0}" (&ctx),
1111 : .{ .memory = true });1101 : .{ .x1 = true, .memory = true });
1112 return ctx;1102 return ctx;
1113 }1103 }
11141104
...@@ -1146,11 +1136,9 @@ const S390x = extern struct {...@@ -1146,11 +1136,9 @@ const S390x = extern struct {
1146 \\ stm %%r0, %%r1, 128(%%r2)1136 \\ stm %%r0, %%r1, 128(%%r2)
1147 \\ larl %%r0, .1137 \\ larl %%r0, .
1148 \\ stg %%r0, 136(%%r2)1138 \\ stg %%r0, 136(%%r2)
1149 \\ lg %%r0, 0(%%r2)
1150 \\ lg %%r1, 8(%%r2)
1151 :1139 :
1152 : [ctx] "{r2}" (&ctx),1140 : [ctx] "{r2}" (&ctx),
1153 : .{ .memory = true });1141 : .{ .r0 = true, .r1 = true, .memory = true });
1154 return ctx;1142 return ctx;
1155 }1143 }
11561144
...@@ -1458,10 +1446,9 @@ const X86_64 = struct {...@@ -1458,10 +1446,9 @@ const X86_64 = struct {
1458 \\ movq %%r15, 0x78(%%rdi)1446 \\ movq %%r15, 0x78(%%rdi)
1459 \\ leaq (%%rip), %%rax1447 \\ leaq (%%rip), %%rax
1460 \\ movq %%rax, 0x80(%%rdi)1448 \\ movq %%rax, 0x80(%%rdi)
1461 \\ movq 0x00(%%rdi), %%rax
1462 :1449 :
1463 : [gprs] "{rdi}" (&ctx.gprs.values),1450 : [gprs] "{rdi}" (&ctx.gprs.values),
1464 : .{ .memory = true });1451 : .{ .rax = true, .memory = true });
1465 return ctx;1452 return ctx;
1466 }1453 }
14671454