Commit 76d04c1662

Andrew Kelley <andrew@ziglang.org>
2025-07-15 03:00:46
zig fmt
1 parent 87ce83d
lib/compiler_rt/aarch64_outline_atomics.zig
@@ -28,8 +28,7 @@ fn __aarch64_cas1_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp1_relax() align(16) callconv(.naked) void {
@@ -48,8 +47,7 @@ fn __aarch64_swp1_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd1_relax() align(16) callconv(.naked) void {
@@ -69,8 +67,7 @@ fn __aarch64_ldadd1_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr1_relax() align(16) callconv(.naked) void {
@@ -90,8 +87,7 @@ fn __aarch64_ldclr1_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor1_relax() align(16) callconv(.naked) void {
@@ -111,8 +107,7 @@ fn __aarch64_ldeor1_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset1_relax() align(16) callconv(.naked) void {
@@ -132,8 +127,7 @@ fn __aarch64_ldset1_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas1_acq() align(16) callconv(.naked) void {
@@ -154,8 +148,7 @@ fn __aarch64_cas1_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp1_acq() align(16) callconv(.naked) void {
@@ -174,8 +167,7 @@ fn __aarch64_swp1_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd1_acq() align(16) callconv(.naked) void {
@@ -195,8 +187,7 @@ fn __aarch64_ldadd1_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr1_acq() align(16) callconv(.naked) void {
@@ -216,8 +207,7 @@ fn __aarch64_ldclr1_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor1_acq() align(16) callconv(.naked) void {
@@ -237,8 +227,7 @@ fn __aarch64_ldeor1_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset1_acq() align(16) callconv(.naked) void {
@@ -258,8 +247,7 @@ fn __aarch64_ldset1_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas1_rel() align(16) callconv(.naked) void {
@@ -280,8 +268,7 @@ fn __aarch64_cas1_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp1_rel() align(16) callconv(.naked) void {
@@ -300,8 +287,7 @@ fn __aarch64_swp1_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd1_rel() align(16) callconv(.naked) void {
@@ -321,8 +307,7 @@ fn __aarch64_ldadd1_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr1_rel() align(16) callconv(.naked) void {
@@ -342,8 +327,7 @@ fn __aarch64_ldclr1_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor1_rel() align(16) callconv(.naked) void {
@@ -363,8 +347,7 @@ fn __aarch64_ldeor1_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset1_rel() align(16) callconv(.naked) void {
@@ -384,8 +367,7 @@ fn __aarch64_ldset1_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas1_acq_rel() align(16) callconv(.naked) void {
@@ -406,8 +388,7 @@ fn __aarch64_cas1_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp1_acq_rel() align(16) callconv(.naked) void {
@@ -426,8 +407,7 @@ fn __aarch64_swp1_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd1_acq_rel() align(16) callconv(.naked) void {
@@ -447,8 +427,7 @@ fn __aarch64_ldadd1_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr1_acq_rel() align(16) callconv(.naked) void {
@@ -468,8 +447,7 @@ fn __aarch64_ldclr1_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor1_acq_rel() align(16) callconv(.naked) void {
@@ -489,8 +467,7 @@ fn __aarch64_ldeor1_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset1_acq_rel() align(16) callconv(.naked) void {
@@ -510,8 +487,7 @@ fn __aarch64_ldset1_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas2_relax() align(16) callconv(.naked) void {
@@ -532,8 +508,7 @@ fn __aarch64_cas2_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp2_relax() align(16) callconv(.naked) void {
@@ -552,8 +527,7 @@ fn __aarch64_swp2_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd2_relax() align(16) callconv(.naked) void {
@@ -573,8 +547,7 @@ fn __aarch64_ldadd2_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr2_relax() align(16) callconv(.naked) void {
@@ -594,8 +567,7 @@ fn __aarch64_ldclr2_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor2_relax() align(16) callconv(.naked) void {
@@ -615,8 +587,7 @@ fn __aarch64_ldeor2_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset2_relax() align(16) callconv(.naked) void {
@@ -636,8 +607,7 @@ fn __aarch64_ldset2_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas2_acq() align(16) callconv(.naked) void {
@@ -658,8 +628,7 @@ fn __aarch64_cas2_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp2_acq() align(16) callconv(.naked) void {
@@ -678,8 +647,7 @@ fn __aarch64_swp2_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd2_acq() align(16) callconv(.naked) void {
@@ -699,8 +667,7 @@ fn __aarch64_ldadd2_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr2_acq() align(16) callconv(.naked) void {
@@ -720,8 +687,7 @@ fn __aarch64_ldclr2_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor2_acq() align(16) callconv(.naked) void {
@@ -741,8 +707,7 @@ fn __aarch64_ldeor2_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset2_acq() align(16) callconv(.naked) void {
@@ -762,8 +727,7 @@ fn __aarch64_ldset2_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas2_rel() align(16) callconv(.naked) void {
@@ -784,8 +748,7 @@ fn __aarch64_cas2_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp2_rel() align(16) callconv(.naked) void {
@@ -804,8 +767,7 @@ fn __aarch64_swp2_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd2_rel() align(16) callconv(.naked) void {
@@ -825,8 +787,7 @@ fn __aarch64_ldadd2_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr2_rel() align(16) callconv(.naked) void {
@@ -846,8 +807,7 @@ fn __aarch64_ldclr2_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor2_rel() align(16) callconv(.naked) void {
@@ -867,8 +827,7 @@ fn __aarch64_ldeor2_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset2_rel() align(16) callconv(.naked) void {
@@ -888,8 +847,7 @@ fn __aarch64_ldset2_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas2_acq_rel() align(16) callconv(.naked) void {
@@ -910,8 +868,7 @@ fn __aarch64_cas2_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp2_acq_rel() align(16) callconv(.naked) void {
@@ -930,8 +887,7 @@ fn __aarch64_swp2_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd2_acq_rel() align(16) callconv(.naked) void {
@@ -951,8 +907,7 @@ fn __aarch64_ldadd2_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr2_acq_rel() align(16) callconv(.naked) void {
@@ -972,8 +927,7 @@ fn __aarch64_ldclr2_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor2_acq_rel() align(16) callconv(.naked) void {
@@ -993,8 +947,7 @@ fn __aarch64_ldeor2_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset2_acq_rel() align(16) callconv(.naked) void {
@@ -1014,8 +967,7 @@ fn __aarch64_ldset2_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas4_relax() align(16) callconv(.naked) void {
@@ -1036,8 +988,7 @@ fn __aarch64_cas4_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp4_relax() align(16) callconv(.naked) void {
@@ -1056,8 +1007,7 @@ fn __aarch64_swp4_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd4_relax() align(16) callconv(.naked) void {
@@ -1077,8 +1027,7 @@ fn __aarch64_ldadd4_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr4_relax() align(16) callconv(.naked) void {
@@ -1098,8 +1047,7 @@ fn __aarch64_ldclr4_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor4_relax() align(16) callconv(.naked) void {
@@ -1119,8 +1067,7 @@ fn __aarch64_ldeor4_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset4_relax() align(16) callconv(.naked) void {
@@ -1140,8 +1087,7 @@ fn __aarch64_ldset4_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas4_acq() align(16) callconv(.naked) void {
@@ -1162,8 +1108,7 @@ fn __aarch64_cas4_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp4_acq() align(16) callconv(.naked) void {
@@ -1182,8 +1127,7 @@ fn __aarch64_swp4_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd4_acq() align(16) callconv(.naked) void {
@@ -1203,8 +1147,7 @@ fn __aarch64_ldadd4_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr4_acq() align(16) callconv(.naked) void {
@@ -1224,8 +1167,7 @@ fn __aarch64_ldclr4_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor4_acq() align(16) callconv(.naked) void {
@@ -1245,8 +1187,7 @@ fn __aarch64_ldeor4_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset4_acq() align(16) callconv(.naked) void {
@@ -1266,8 +1207,7 @@ fn __aarch64_ldset4_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas4_rel() align(16) callconv(.naked) void {
@@ -1288,8 +1228,7 @@ fn __aarch64_cas4_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp4_rel() align(16) callconv(.naked) void {
@@ -1308,8 +1247,7 @@ fn __aarch64_swp4_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd4_rel() align(16) callconv(.naked) void {
@@ -1329,8 +1267,7 @@ fn __aarch64_ldadd4_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr4_rel() align(16) callconv(.naked) void {
@@ -1350,8 +1287,7 @@ fn __aarch64_ldclr4_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor4_rel() align(16) callconv(.naked) void {
@@ -1371,8 +1307,7 @@ fn __aarch64_ldeor4_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset4_rel() align(16) callconv(.naked) void {
@@ -1392,8 +1327,7 @@ fn __aarch64_ldset4_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas4_acq_rel() align(16) callconv(.naked) void {
@@ -1414,8 +1348,7 @@ fn __aarch64_cas4_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp4_acq_rel() align(16) callconv(.naked) void {
@@ -1434,8 +1367,7 @@ fn __aarch64_swp4_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd4_acq_rel() align(16) callconv(.naked) void {
@@ -1455,8 +1387,7 @@ fn __aarch64_ldadd4_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr4_acq_rel() align(16) callconv(.naked) void {
@@ -1476,8 +1407,7 @@ fn __aarch64_ldclr4_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor4_acq_rel() align(16) callconv(.naked) void {
@@ -1497,8 +1427,7 @@ fn __aarch64_ldeor4_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset4_acq_rel() align(16) callconv(.naked) void {
@@ -1518,8 +1447,7 @@ fn __aarch64_ldset4_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas8_relax() align(16) callconv(.naked) void {
@@ -1540,8 +1468,7 @@ fn __aarch64_cas8_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp8_relax() align(16) callconv(.naked) void {
@@ -1560,8 +1487,7 @@ fn __aarch64_swp8_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd8_relax() align(16) callconv(.naked) void {
@@ -1581,8 +1507,7 @@ fn __aarch64_ldadd8_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr8_relax() align(16) callconv(.naked) void {
@@ -1602,8 +1527,7 @@ fn __aarch64_ldclr8_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor8_relax() align(16) callconv(.naked) void {
@@ -1623,8 +1547,7 @@ fn __aarch64_ldeor8_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset8_relax() align(16) callconv(.naked) void {
@@ -1644,8 +1567,7 @@ fn __aarch64_ldset8_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas8_acq() align(16) callconv(.naked) void {
@@ -1666,8 +1588,7 @@ fn __aarch64_cas8_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp8_acq() align(16) callconv(.naked) void {
@@ -1686,8 +1607,7 @@ fn __aarch64_swp8_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd8_acq() align(16) callconv(.naked) void {
@@ -1707,8 +1627,7 @@ fn __aarch64_ldadd8_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr8_acq() align(16) callconv(.naked) void {
@@ -1728,8 +1647,7 @@ fn __aarch64_ldclr8_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor8_acq() align(16) callconv(.naked) void {
@@ -1749,8 +1667,7 @@ fn __aarch64_ldeor8_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset8_acq() align(16) callconv(.naked) void {
@@ -1770,8 +1687,7 @@ fn __aarch64_ldset8_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas8_rel() align(16) callconv(.naked) void {
@@ -1792,8 +1708,7 @@ fn __aarch64_cas8_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp8_rel() align(16) callconv(.naked) void {
@@ -1812,8 +1727,7 @@ fn __aarch64_swp8_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd8_rel() align(16) callconv(.naked) void {
@@ -1833,8 +1747,7 @@ fn __aarch64_ldadd8_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr8_rel() align(16) callconv(.naked) void {
@@ -1854,8 +1767,7 @@ fn __aarch64_ldclr8_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor8_rel() align(16) callconv(.naked) void {
@@ -1875,8 +1787,7 @@ fn __aarch64_ldeor8_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset8_rel() align(16) callconv(.naked) void {
@@ -1896,8 +1807,7 @@ fn __aarch64_ldset8_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas8_acq_rel() align(16) callconv(.naked) void {
@@ -1918,8 +1828,7 @@ fn __aarch64_cas8_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_swp8_acq_rel() align(16) callconv(.naked) void {
@@ -1938,8 +1847,7 @@ fn __aarch64_swp8_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldadd8_acq_rel() align(16) callconv(.naked) void {
@@ -1959,8 +1867,7 @@ fn __aarch64_ldadd8_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldclr8_acq_rel() align(16) callconv(.naked) void {
@@ -1980,8 +1887,7 @@ fn __aarch64_ldclr8_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldeor8_acq_rel() align(16) callconv(.naked) void {
@@ -2001,8 +1907,7 @@ fn __aarch64_ldeor8_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_ldset8_acq_rel() align(16) callconv(.naked) void {
@@ -2022,8 +1927,7 @@ fn __aarch64_ldset8_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas16_relax() align(16) callconv(.naked) void {
@@ -2046,8 +1950,7 @@ fn __aarch64_cas16_relax() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas16_acq() align(16) callconv(.naked) void {
@@ -2070,8 +1973,7 @@ fn __aarch64_cas16_acq() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas16_rel() align(16) callconv(.naked) void {
@@ -2094,8 +1996,7 @@ fn __aarch64_cas16_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 fn __aarch64_cas16_acq_rel() align(16) callconv(.naked) void {
@@ -2118,8 +2019,7 @@ fn __aarch64_cas16_acq_rel() align(16) callconv(.naked) void {
         \\        ret
         :
         : [__aarch64_have_lse_atomics] "{w16}" (__aarch64_have_lse_atomics),
-        : "w15", "w16", "w17", "memory"
-    );
+        : .{ .w15 = true, .w16 = true, .w17 = true, .memory = true });
     unreachable;
 }
 
lib/compiler_rt/arm.zig
@@ -142,8 +142,7 @@ pub fn __aeabi_uidivmod() callconv(.naked) void {
         \\ pop {pc}
         :
         : [__udivmodsi4] "X" (&__udivmodsi4),
-        : "memory"
-    );
+        : .{ .memory = true });
     unreachable;
 }
 
@@ -162,8 +161,7 @@ pub fn __aeabi_uldivmod() callconv(.naked) void {
         \\ pop {r4, pc}
         :
         : [__udivmoddi4] "X" (&__udivmoddi4),
-        : "memory"
-    );
+        : .{ .memory = true });
     unreachable;
 }
 
@@ -180,8 +178,7 @@ pub fn __aeabi_idivmod() callconv(.naked) void {
         \\ pop {pc}
         :
         : [__divmodsi4] "X" (&__divmodsi4),
-        : "memory"
-    );
+        : .{ .memory = true });
     unreachable;
 }
 
@@ -200,8 +197,7 @@ pub fn __aeabi_ldivmod() callconv(.naked) void {
         \\ pop {r4, pc}
         :
         : [__divmoddi4] "X" (&__divmoddi4),
-        : "memory"
-    );
+        : .{ .memory = true });
     unreachable;
 }
 
lib/compiler_rt/atomics.zig
@@ -71,8 +71,7 @@ const SpinlockTable = struct {
                     break :flag asm volatile ("ldstub [%[addr]], %[flag]"
                         : [flag] "=r" (-> @TypeOf(self.v)),
                         : [addr] "r" (&self.v),
-                        : "memory"
-                    );
+                        : .{ .memory = true });
                 } else flag: {
                     break :flag @atomicRmw(@TypeOf(self.v), &self.v, .Xchg, .Locked, .acquire);
                 };
@@ -88,8 +87,7 @@ const SpinlockTable = struct {
                 _ = asm volatile ("clrb [%[addr]]"
                     :
                     : [addr] "r" (&self.v),
-                    : "memory"
-                );
+                    : .{ .memory = true });
             } else {
                 @atomicStore(@TypeOf(self.v), &self.v, .Unlocked, .release);
             }
lib/compiler_rt/clear_cache.zig
@@ -103,8 +103,7 @@ fn clear_cache(start: usize, end: usize) callconv(.c) void {
             : [_] "{$2}" (165), // nr = SYS_sysarch
               [_] "{$4}" (0), // op = MIPS_CACHEFLUSH
               [_] "{$5}" (&cfa), // args = &cfa
-            : "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-        );
+            : .{ .@"$1" = true, .@"$2" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
         exportIt();
     } else if (mips and os == .openbsd) {
         // TODO
lib/std/crypto/sha2.zig
@@ -229,8 +229,7 @@ fn Sha2x32(comptime iv: Iv32, digest_bits: comptime_int) type {
                                 : [_] "0" (x),
                                   [_] "1" (y),
                                   [w] "w" (w),
-                                : "v0"
-                            );
+                                : .{ .v0 = true });
                         }
 
                         d.s[0..4].* = x +% @as(V4u32, d.s[0..4].*);
lib/std/debug/SelfInfo.zig
@@ -1547,8 +1547,7 @@ pub inline fn stripInstructionPtrAuthCode(ptr: usize) usize {
             \\mov x30, x16
             : [ret] "={x15}" (-> usize),
             : [ptr] "{x15}" (ptr),
-            : "x16"
-        );
+            : .{ .x16 = true });
     }
 
     return ptr;
lib/std/os/linux/aarch64.zig
@@ -18,8 +18,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("svc #0"
         : [ret] "={x0}" (-> usize),
         : [number] "{x8}" (@intFromEnum(number)),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -27,8 +26,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={x0}" (-> usize),
         : [number] "{x8}" (@intFromEnum(number)),
           [arg1] "{x0}" (arg1),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -37,8 +35,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{x8}" (@intFromEnum(number)),
           [arg1] "{x0}" (arg1),
           [arg2] "{x1}" (arg2),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -48,8 +45,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{x0}" (arg1),
           [arg2] "{x1}" (arg2),
           [arg3] "{x2}" (arg3),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -60,8 +56,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{x1}" (arg2),
           [arg3] "{x2}" (arg3),
           [arg4] "{x3}" (arg4),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -73,8 +68,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{x2}" (arg3),
           [arg4] "{x3}" (arg4),
           [arg5] "{x4}" (arg5),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn syscall6(
@@ -95,8 +89,7 @@ pub fn syscall6(
           [arg4] "{x3}" (arg4),
           [arg5] "{x4}" (arg5),
           [arg6] "{x5}" (arg6),
-        : "memory", "cc"
-    );
+        : .{ .memory = true, .cc = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -148,14 +141,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
             \\ svc #0
             :
             : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
-            : "memory", "cc"
-        ),
+            : .{ .memory = true, .cc = true }),
         else => asm volatile (
             \\ svc #0
             :
             : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)),
-            : "memory", "cc"
-        ),
+            : .{ .memory = true, .cc = true }),
     }
 }
 
lib/std/os/linux/arm.zig
@@ -17,8 +17,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("svc #0"
         : [ret] "={r0}" (-> usize),
         : [number] "{r7}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -26,8 +25,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={r0}" (-> usize),
         : [number] "{r7}" (@intFromEnum(number)),
           [arg1] "{r0}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -36,8 +34,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{r7}" (@intFromEnum(number)),
           [arg1] "{r0}" (arg1),
           [arg2] "{r1}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -47,8 +44,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{r0}" (arg1),
           [arg2] "{r1}" (arg2),
           [arg3] "{r2}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -59,8 +55,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{r1}" (arg2),
           [arg3] "{r2}" (arg3),
           [arg4] "{r3}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -72,8 +67,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{r2}" (arg3),
           [arg4] "{r3}" (arg4),
           [arg5] "{r4}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -94,8 +88,7 @@ pub fn syscall6(
           [arg4] "{r3}" (arg4),
           [arg5] "{r4}" (arg5),
           [arg6] "{r5}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -141,14 +134,12 @@ pub fn restore() callconv(.naked) noreturn {
             \\ svc #0
             :
             : [number] "I" (@intFromEnum(SYS.sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
         else => asm volatile (
             \\ svc #0
             :
             : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
     }
 }
 
@@ -159,14 +150,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
             \\ svc #0
             :
             : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
         else => asm volatile (
             \\ svc #0
             :
             : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
     }
 }
 
lib/std/os/linux/hexagon.zig
@@ -15,8 +15,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("trap0(#1)"
         : [ret] "={r0}" (-> usize),
         : [number] "{r6}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -24,8 +23,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={r0}" (-> usize),
         : [number] "{r6}" (@intFromEnum(number)),
           [arg1] "{r0}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -34,8 +32,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{r6}" (@intFromEnum(number)),
           [arg1] "{r0}" (arg1),
           [arg2] "{r1}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -45,8 +42,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{r0}" (arg1),
           [arg2] "{r1}" (arg2),
           [arg3] "{r2}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -57,8 +53,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{r1}" (arg2),
           [arg3] "{r2}" (arg3),
           [arg4] "{r3}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -70,8 +65,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{r2}" (arg3),
           [arg4] "{r3}" (arg4),
           [arg5] "{r4}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -92,8 +86,7 @@ pub fn syscall6(
           [arg4] "{r3}" (arg4),
           [arg5] "{r4}" (arg5),
           [arg6] "{r5}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -142,8 +135,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ trap0(#0)
         :
         : [number] "{r6}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/loongarch64.zig
@@ -17,8 +17,7 @@ pub fn syscall0(number: SYS) usize {
         \\ syscall 0
         : [ret] "={$r4}" (-> usize),
         : [number] "{$r11}" (@intFromEnum(number)),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -27,8 +26,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={$r4}" (-> usize),
         : [number] "{$r11}" (@intFromEnum(number)),
           [arg1] "{$r4}" (arg1),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -38,8 +36,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{$r11}" (@intFromEnum(number)),
           [arg1] "{$r4}" (arg1),
           [arg2] "{$r5}" (arg2),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -50,8 +47,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{$r4}" (arg1),
           [arg2] "{$r5}" (arg2),
           [arg3] "{$r6}" (arg3),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -63,8 +59,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{$r5}" (arg2),
           [arg3] "{$r6}" (arg3),
           [arg4] "{$r7}" (arg4),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -77,8 +72,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{$r6}" (arg3),
           [arg4] "{$r7}" (arg4),
           [arg5] "{$r8}" (arg5),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn syscall6(
@@ -100,8 +94,7 @@ pub fn syscall6(
           [arg4] "{$r7}" (arg4),
           [arg5] "{$r8}" (arg5),
           [arg6] "{$r9}" (arg6),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -150,8 +143,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ syscall 0
         :
         : [number] "r" (@intFromEnum(SYS.rt_sigreturn)),
-        : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
-    );
+        : .{ .@"$t0" = true, .@"$t1" = true, .@"$t2" = true, .@"$t3" = true, .@"$t4" = true, .@"$t5" = true, .@"$t6" = true, .@"$t7" = true, .@"$t8" = true, .memory = true });
 }
 
 pub const msghdr = extern struct {
lib/std/os/linux/m68k.zig
@@ -15,8 +15,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("trap #0"
         : [ret] "={d0}" (-> usize),
         : [number] "{d0}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -24,8 +23,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={d0}" (-> usize),
         : [number] "{d0}" (@intFromEnum(number)),
           [arg1] "{d1}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -34,8 +32,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{d0}" (@intFromEnum(number)),
           [arg1] "{d1}" (arg1),
           [arg2] "{d2}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -45,8 +42,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{d1}" (arg1),
           [arg2] "{d2}" (arg2),
           [arg3] "{d3}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -57,8 +53,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{d2}" (arg2),
           [arg3] "{d3}" (arg3),
           [arg4] "{d4}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -70,8 +65,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{d3}" (arg3),
           [arg4] "{d4}" (arg4),
           [arg5] "{d5}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -92,8 +86,7 @@ pub fn syscall6(
           [arg4] "{d4}" (arg4),
           [arg5] "{d5}" (arg5),
           [arg6] "{a0}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -155,8 +148,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
     asm volatile ("trap #0"
         :
         : [number] "{d0}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/mips.zig
@@ -21,8 +21,7 @@ pub fn syscall0(number: SYS) usize {
         \\ 1:
         : [ret] "={$2}" (-> usize),
         : [number] "{$2}" (@intFromEnum(number)),
-        : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall_pipe(fd: *[2]i32) usize {
@@ -41,8 +40,7 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
         : [ret] "={$2}" (-> usize),
         : [number] "{$2}" (@intFromEnum(SYS.pipe)),
           [fd] "{$4}" (fd),
-        : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -55,8 +53,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={$2}" (-> usize),
         : [number] "{$2}" (@intFromEnum(number)),
           [arg1] "{$4}" (arg1),
-        : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -70,8 +67,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{$2}" (@intFromEnum(number)),
           [arg1] "{$4}" (arg1),
           [arg2] "{$5}" (arg2),
-        : "$1", "$3", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -86,8 +82,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{$4}" (arg1),
           [arg2] "{$5}" (arg2),
           [arg3] "{$6}" (arg3),
-        : "$1", "$3", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -103,8 +98,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{$5}" (arg2),
           [arg3] "{$6}" (arg3),
           [arg4] "{$7}" (arg4),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -125,8 +119,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{$6}" (arg3),
           [arg4] "{$7}" (arg4),
           [arg5] "r" (arg5),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 // NOTE: The o32 calling convention requires the callee to reserve 16 bytes for
@@ -160,8 +153,7 @@ pub fn syscall6(
           [arg4] "{$7}" (arg4),
           [arg5] "r" (arg5),
           [arg6] "r" (arg6),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall7(
@@ -195,8 +187,7 @@ pub fn syscall7(
           [arg5] "r" (arg5),
           [arg6] "r" (arg6),
           [arg7] "r" (arg7),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -255,8 +246,7 @@ pub fn restore() callconv(.naked) noreturn {
         \\ syscall
         :
         : [number] "{$2}" (@intFromEnum(SYS.sigreturn)),
-        : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn restore_rt() callconv(.naked) noreturn {
@@ -264,8 +254,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ syscall
         :
         : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/mips64.zig
@@ -21,8 +21,7 @@ pub fn syscall0(number: SYS) usize {
         \\ 1:
         : [ret] "={$2}" (-> usize),
         : [number] "{$2}" (@intFromEnum(number)),
-        : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall_pipe(fd: *[2]i32) usize {
@@ -41,8 +40,7 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
         : [ret] "={$2}" (-> usize),
         : [number] "{$2}" (@intFromEnum(SYS.pipe)),
           [fd] "{$4}" (fd),
-        : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -56,8 +54,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={$2}" (-> usize),
         : [number] "{$2}" (@intFromEnum(number)),
           [arg1] "{$4}" (arg1),
-        : "$1", "$3", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -71,8 +68,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{$2}" (@intFromEnum(number)),
           [arg1] "{$4}" (arg1),
           [arg2] "{$5}" (arg2),
-        : "$1", "$3", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -87,8 +83,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{$4}" (arg1),
           [arg2] "{$5}" (arg2),
           [arg3] "{$6}" (arg3),
-        : "$1", "$3", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -104,8 +99,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{$5}" (arg2),
           [arg3] "{$6}" (arg3),
           [arg4] "{$7}" (arg4),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -122,8 +116,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{$6}" (arg3),
           [arg4] "{$7}" (arg4),
           [arg5] "{$8}" (arg5),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall6(
@@ -149,8 +142,7 @@ pub fn syscall6(
           [arg4] "{$7}" (arg4),
           [arg5] "{$8}" (arg5),
           [arg6] "{$9}" (arg6),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn syscall7(
@@ -178,8 +170,7 @@ pub fn syscall7(
           [arg5] "{$8}" (arg5),
           [arg6] "{$9}" (arg6),
           [arg7] "{$10}" (arg7),
-        : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -234,8 +225,7 @@ pub fn restore() callconv(.naked) noreturn {
         \\ syscall
         :
         : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub fn restore_rt() callconv(.naked) noreturn {
@@ -243,8 +233,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ syscall
         :
         : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "$1", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "hi", "lo", "memory"
-    );
+        : .{ .@"$1" = true, .@"$3" = true, .@"$4" = true, .@"$5" = true, .@"$6" = true, .@"$7" = true, .@"$8" = true, .@"$9" = true, .@"$10" = true, .@"$11" = true, .@"$12" = true, .@"$13" = true, .@"$14" = true, .@"$15" = true, .@"$24" = true, .@"$25" = true, .hi = true, .lo = true, .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/powerpc.zig
@@ -22,8 +22,7 @@ pub fn syscall0(number: SYS) usize {
         \\ 1:
         : [ret] "={r3}" (-> usize),
         : [number] "{r0}" (@intFromEnum(number)),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -35,8 +34,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={r3}" (-> usize),
         : [number] "{r0}" (@intFromEnum(number)),
           [arg1] "{r3}" (arg1),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -49,8 +47,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{r0}" (@intFromEnum(number)),
           [arg1] "{r3}" (arg1),
           [arg2] "{r4}" (arg2),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -64,8 +61,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{r3}" (arg1),
           [arg2] "{r4}" (arg2),
           [arg3] "{r5}" (arg3),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -80,8 +76,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{r4}" (arg2),
           [arg3] "{r5}" (arg3),
           [arg4] "{r6}" (arg4),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -97,8 +92,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{r5}" (arg3),
           [arg4] "{r6}" (arg4),
           [arg5] "{r7}" (arg5),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall6(
@@ -123,8 +117,7 @@ pub fn syscall6(
           [arg4] "{r6}" (arg4),
           [arg5] "{r7}" (arg5),
           [arg6] "{r8}" (arg6),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -204,8 +197,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ sc
         :
         : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub const F = struct {
lib/std/os/linux/powerpc64.zig
@@ -22,8 +22,7 @@ pub fn syscall0(number: SYS) usize {
         \\ 1:
         : [ret] "={r3}" (-> usize),
         : [number] "{r0}" (@intFromEnum(number)),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -35,8 +34,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={r3}" (-> usize),
         : [number] "{r0}" (@intFromEnum(number)),
           [arg1] "{r3}" (arg1),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -49,8 +47,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{r0}" (@intFromEnum(number)),
           [arg1] "{r3}" (arg1),
           [arg2] "{r4}" (arg2),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -64,8 +61,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{r3}" (arg1),
           [arg2] "{r4}" (arg2),
           [arg3] "{r5}" (arg3),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -80,8 +76,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{r4}" (arg2),
           [arg3] "{r5}" (arg3),
           [arg4] "{r6}" (arg4),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -97,8 +92,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{r5}" (arg3),
           [arg4] "{r6}" (arg4),
           [arg5] "{r7}" (arg5),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn syscall6(
@@ -123,8 +117,7 @@ pub fn syscall6(
           [arg4] "{r6}" (arg4),
           [arg5] "{r7}" (arg5),
           [arg6] "{r8}" (arg6),
-        : "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -189,8 +182,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ sc
         :
         : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-    );
+        : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
 }
 
 pub const F = struct {
lib/std/os/linux/riscv32.zig
@@ -17,8 +17,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("ecall"
         : [ret] "={x10}" (-> usize),
         : [number] "{x17}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -26,8 +25,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={x10}" (-> usize),
         : [number] "{x17}" (@intFromEnum(number)),
           [arg1] "{x10}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -36,8 +34,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{x17}" (@intFromEnum(number)),
           [arg1] "{x10}" (arg1),
           [arg2] "{x11}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -47,8 +44,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{x10}" (arg1),
           [arg2] "{x11}" (arg2),
           [arg3] "{x12}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -59,8 +55,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{x11}" (arg2),
           [arg3] "{x12}" (arg3),
           [arg4] "{x13}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -72,8 +67,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{x12}" (arg3),
           [arg4] "{x13}" (arg4),
           [arg5] "{x14}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -94,8 +88,7 @@ pub fn syscall6(
           [arg4] "{x13}" (arg4),
           [arg5] "{x14}" (arg5),
           [arg6] "{x15}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -149,8 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ ecall
         :
         : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/riscv64.zig
@@ -17,8 +17,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("ecall"
         : [ret] "={x10}" (-> usize),
         : [number] "{x17}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -26,8 +25,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={x10}" (-> usize),
         : [number] "{x17}" (@intFromEnum(number)),
           [arg1] "{x10}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -36,8 +34,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{x17}" (@intFromEnum(number)),
           [arg1] "{x10}" (arg1),
           [arg2] "{x11}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -47,8 +44,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{x10}" (arg1),
           [arg2] "{x11}" (arg2),
           [arg3] "{x12}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -59,8 +55,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{x11}" (arg2),
           [arg3] "{x12}" (arg3),
           [arg4] "{x13}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -72,8 +67,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{x12}" (arg3),
           [arg4] "{x13}" (arg4),
           [arg5] "{x14}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -94,8 +88,7 @@ pub fn syscall6(
           [arg4] "{x13}" (arg4),
           [arg5] "{x14}" (arg5),
           [arg6] "{x15}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -149,8 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ ecall
         :
         : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/s390x.zig
@@ -17,8 +17,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("svc 0"
         : [ret] "={r2}" (-> usize),
         : [number] "{r1}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -26,8 +25,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={r2}" (-> usize),
         : [number] "{r1}" (@intFromEnum(number)),
           [arg1] "{r2}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -36,8 +34,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{r1}" (@intFromEnum(number)),
           [arg1] "{r2}" (arg1),
           [arg2] "{r3}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -47,8 +44,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{r2}" (arg1),
           [arg2] "{r3}" (arg2),
           [arg3] "{r4}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -59,8 +55,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{r3}" (arg2),
           [arg3] "{r4}" (arg3),
           [arg4] "{r5}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -72,8 +67,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{r4}" (arg3),
           [arg4] "{r5}" (arg4),
           [arg5] "{r6}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize, arg6: usize) usize {
@@ -86,8 +80,7 @@ pub fn syscall6(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg4] "{r5}" (arg4),
           [arg5] "{r6}" (arg5),
           [arg6] "{r7}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -161,8 +154,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\svc 0
         :
         : [number] "{r1}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub const F = struct {
lib/std/os/linux/sparc64.zig
@@ -32,8 +32,7 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
         : [ret] "={o0}" (-> usize),
         : [number] "{g1}" (@intFromEnum(SYS.pipe)),
           [arg] "r" (fd),
-        : "memory", "g3"
-    );
+        : .{ .memory = true, .g3 = true });
 }
 
 pub fn syscall_fork() usize {
@@ -55,8 +54,7 @@ pub fn syscall_fork() usize {
         \\ 2:
         : [ret] "={o0}" (-> usize),
         : [number] "{g1}" (@intFromEnum(SYS.fork)),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall0(number: SYS) usize {
@@ -68,8 +66,7 @@ pub fn syscall0(number: SYS) usize {
         \\ 1:
         : [ret] "={o0}" (-> usize),
         : [number] "{g1}" (@intFromEnum(number)),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -82,8 +79,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={o0}" (-> usize),
         : [number] "{g1}" (@intFromEnum(number)),
           [arg1] "{o0}" (arg1),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -97,8 +93,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{g1}" (@intFromEnum(number)),
           [arg1] "{o0}" (arg1),
           [arg2] "{o1}" (arg2),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -113,8 +108,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{o0}" (arg1),
           [arg2] "{o1}" (arg2),
           [arg3] "{o2}" (arg3),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -130,8 +124,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{o1}" (arg2),
           [arg3] "{o2}" (arg3),
           [arg4] "{o3}" (arg4),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -148,8 +141,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{o2}" (arg3),
           [arg4] "{o3}" (arg4),
           [arg5] "{o4}" (arg5),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn syscall6(
@@ -175,8 +167,7 @@ pub fn syscall6(
           [arg4] "{o3}" (arg4),
           [arg5] "{o4}" (arg5),
           [arg6] "{o5}" (arg6),
-        : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -242,8 +233,7 @@ pub fn restore_rt() callconv(.c) void {
     return asm volatile ("t 0x6d"
         :
         : [number] "{g1}" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory", "xcc", "o0", "o1", "o2", "o3", "o4", "o5", "o7"
-    );
+        : .{ .memory = true, .xcc = true, .o0 = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
 }
 
 pub const F = struct {
lib/std/os/linux/thumb.zig
@@ -18,8 +18,7 @@ pub fn syscall0(number: SYS) usize {
         \\ ldr r7, [%[tmp], #4]
         : [ret] "={r0}" (-> usize),
         : [tmp] "{r1}" (&buf),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -34,8 +33,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={r0}" (-> usize),
         : [tmp] "{r1}" (&buf),
           [arg1] "{r0}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -51,8 +49,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [tmp] "{r2}" (&buf),
           [arg1] "{r0}" (arg1),
           [arg2] "{r1}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -69,8 +66,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{r0}" (arg1),
           [arg2] "{r1}" (arg2),
           [arg3] "{r2}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -88,8 +84,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{r1}" (arg2),
           [arg3] "{r2}" (arg3),
           [arg4] "{r3}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -108,8 +103,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{r2}" (arg3),
           [arg4] "{r3}" (arg4),
           [arg5] "{r4}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -137,8 +131,7 @@ pub fn syscall6(
           [arg4] "{r3}" (arg4),
           [arg5] "{r4}" (arg5),
           [arg6] "{r5}" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub const clone = @import("arm.zig").clone;
@@ -158,6 +151,5 @@ pub fn restore_rt() callconv(.naked) noreturn {
         \\ svc #0
         :
         : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
lib/std/os/linux/tls.zig
@@ -308,8 +308,7 @@ pub fn setThreadPointer(addr: usize) void {
                 \\ sar %%a0, %%r0
                 :
                 : [addr] "r" (addr),
-                : "r0"
-            );
+                : .{ .r0 = true });
         },
         .sparc, .sparc64 => {
             asm volatile (
lib/std/os/linux/x86.zig
@@ -18,8 +18,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("int $0x80"
         : [ret] "={eax}" (-> usize),
         : [number] "{eax}" (@intFromEnum(number)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -27,8 +26,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={eax}" (-> usize),
         : [number] "{eax}" (@intFromEnum(number)),
           [arg1] "{ebx}" (arg1),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -37,8 +35,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{eax}" (@intFromEnum(number)),
           [arg1] "{ebx}" (arg1),
           [arg2] "{ecx}" (arg2),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -48,8 +45,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{ebx}" (arg1),
           [arg2] "{ecx}" (arg2),
           [arg3] "{edx}" (arg3),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -60,8 +56,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{ecx}" (arg2),
           [arg3] "{edx}" (arg3),
           [arg4] "{esi}" (arg4),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -73,8 +68,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{edx}" (arg3),
           [arg4] "{esi}" (arg4),
           [arg5] "{edi}" (arg5),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn syscall6(
@@ -108,8 +102,7 @@ pub fn syscall6(
           [arg4] "{esi}" (arg4),
           [arg5] "rm" (arg5),
           [arg6] "rm" (arg6),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn socketcall(call: usize, args: [*]const usize) usize {
@@ -118,8 +111,7 @@ pub fn socketcall(call: usize, args: [*]const usize) usize {
         : [number] "{eax}" (@intFromEnum(SYS.socketcall)),
           [arg1] "{ebx}" (call),
           [arg2] "{ecx}" (@intFromPtr(args)),
-        : "memory"
-    );
+        : .{ .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -179,14 +171,12 @@ pub fn restore() callconv(.naked) noreturn {
             \\ int $0x80
             :
             : [number] "i" (@intFromEnum(SYS.sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
         else => asm volatile (
             \\ int $0x80
             :
             : [number] "{eax}" (@intFromEnum(SYS.sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
     }
 }
 
@@ -197,14 +187,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
             \\ int $0x80
             :
             : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
         else => asm volatile (
             \\ int $0x80
             :
             : [number] "{eax}" (@intFromEnum(SYS.rt_sigreturn)),
-            : "memory"
-        ),
+            : .{ .memory = true }),
     }
 }
 
@@ -442,8 +430,7 @@ pub fn getContextInternal() callconv(.naked) usize {
           [sigprocmask] "i" (@intFromEnum(linux.SYS.rt_sigprocmask)),
           [sigmask_offset] "i" (@offsetOf(ucontext_t, "sigmask")),
           [sigset_size] "i" (linux.NSIG / 8),
-        : "cc", "memory", "eax", "ecx", "edx"
-    );
+        : .{ .cc = true, .memory = true, .eax = true, .ecx = true, .edx = true });
 }
 
 pub inline fn getcontext(context: *ucontext_t) usize {
@@ -457,6 +444,5 @@ pub inline fn getcontext(context: *ucontext_t) usize {
           [_] "={edx}" (clobber_edx),
         : [_] "{edx}" (context),
           [getContextInternal] "X" (&getContextInternal),
-        : "cc", "memory", "ecx"
-    );
+        : .{ .cc = true, .memory = true, .ecx = true });
 }
lib/std/os/linux/x86_64.zig
@@ -20,8 +20,7 @@ pub fn syscall0(number: SYS) usize {
     return asm volatile ("syscall"
         : [ret] "={rax}" (-> usize),
         : [number] "{rax}" (@intFromEnum(number)),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn syscall1(number: SYS, arg1: usize) usize {
@@ -29,8 +28,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
         : [ret] "={rax}" (-> usize),
         : [number] "{rax}" (@intFromEnum(number)),
           [arg1] "{rdi}" (arg1),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
@@ -39,8 +37,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
         : [number] "{rax}" (@intFromEnum(number)),
           [arg1] "{rdi}" (arg1),
           [arg2] "{rsi}" (arg2),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
@@ -50,8 +47,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
           [arg1] "{rdi}" (arg1),
           [arg2] "{rsi}" (arg2),
           [arg3] "{rdx}" (arg3),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
@@ -62,8 +58,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
           [arg2] "{rsi}" (arg2),
           [arg3] "{rdx}" (arg3),
           [arg4] "{r10}" (arg4),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
@@ -75,8 +70,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
           [arg3] "{rdx}" (arg3),
           [arg4] "{r10}" (arg4),
           [arg5] "{r8}" (arg5),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn syscall6(
@@ -97,8 +91,7 @@ pub fn syscall6(
           [arg4] "{r10}" (arg4),
           [arg5] "{r8}" (arg5),
           [arg6] "{r9}" (arg6),
-        : "rcx", "r11", "memory"
-    );
+        : .{ .rcx = true, .r11 = true, .memory = true });
 }
 
 pub fn clone() callconv(.naked) usize {
@@ -144,14 +137,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
             \\ syscall
             :
             : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
-            : "rcx", "r11", "memory"
-        ),
+            : .{ .rcx = true, .r11 = true, .memory = true }),
         else => asm volatile (
             \\ syscall
             :
             : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)),
-            : "rcx", "r11", "memory"
-        ),
+            : .{ .rcx = true, .r11 = true, .memory = true }),
     }
 }
 
@@ -440,8 +431,7 @@ fn getContextInternal() callconv(.naked) usize {
           [sigprocmask] "i" (@intFromEnum(linux.SYS.rt_sigprocmask)),
           [sigmask_offset] "i" (@offsetOf(ucontext_t, "sigmask")),
           [sigset_size] "i" (@sizeOf(sigset_t)),
-        : "cc", "memory", "rax", "rcx", "rdx", "rdi", "rsi", "r8", "r10", "r11"
-    );
+        : .{ .cc = true, .memory = true, .rax = true, .rcx = true, .rdx = true, .rdi = true, .rsi = true, .r8 = true, .r10 = true, .r11 = true });
 }
 
 pub inline fn getcontext(context: *ucontext_t) usize {
@@ -455,6 +445,5 @@ pub inline fn getcontext(context: *ucontext_t) usize {
           [_] "={rdi}" (clobber_rdi),
         : [_] "{rdi}" (context),
           [getContextInternal] "X" (&getContextInternal),
-        : "cc", "memory", "rcx", "rdx", "rsi", "r8", "r10", "r11"
-    );
+        : .{ .cc = true, .memory = true, .rcx = true, .rdx = true, .rsi = true, .r8 = true, .r10 = true, .r11 = true });
 }
lib/std/os/plan9/x86_64.zig
@@ -11,8 +11,7 @@ pub fn syscall1(sys: plan9.SYS, arg0: usize) usize {
         : [ret] "={rax}" (-> usize),
         : [arg0] "{r8}" (arg0),
           [syscall_number] "{rbp}" (@intFromEnum(sys)),
-        : "rcx", "rax", "rbp", "r11", "memory"
-    );
+        : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
 }
 pub fn syscall2(sys: plan9.SYS, arg0: usize, arg1: usize) usize {
     return asm volatile (
@@ -27,8 +26,7 @@ pub fn syscall2(sys: plan9.SYS, arg0: usize, arg1: usize) usize {
         : [arg0] "{r8}" (arg0),
           [arg1] "{r9}" (arg1),
           [syscall_number] "{rbp}" (@intFromEnum(sys)),
-        : "rcx", "rax", "rbp", "r11", "memory"
-    );
+        : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
 }
 pub fn syscall3(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize) usize {
     return asm volatile (
@@ -46,8 +44,7 @@ pub fn syscall3(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize) usize {
           [arg1] "{r9}" (arg1),
           [arg2] "{r10}" (arg2),
           [syscall_number] "{rbp}" (@intFromEnum(sys)),
-        : "rcx", "rax", "rbp", "r11", "memory"
-    );
+        : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
 }
 pub fn syscall4(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize, arg3: usize) usize {
     return asm volatile (
@@ -68,6 +65,5 @@ pub fn syscall4(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize, arg3: usi
           [arg2] "{r10}" (arg2),
           [arg3] "{r11}" (arg3),
           [syscall_number] "{rbp}" (@intFromEnum(sys)),
-        : "rcx", "rax", "rbp", "r11", "memory"
-    );
+        : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
 }
lib/std/zig/system/x86.zig
@@ -783,6 +783,5 @@ fn getXCR0() u32 {
         \\ xgetbv
         : [_] "={eax}" (-> u32),
         :
-        : "edx", "ecx"
-    );
+        : .{ .edx = true, .ecx = true });
 }
lib/std/zig/render.zig
@@ -2400,6 +2400,7 @@ fn renderAsmLegacy(
             while (true) : (tok_i += 1) {
                 try ais.writer().writeAll(".@");
                 try ais.writer().writeAll(tokenSliceForRender(tree, tok_i));
+                try ais.writer().writeAll(" = true");
 
                 tok_i += 1;
                 switch (tree.tokenTag(tok_i)) {
@@ -2514,7 +2515,7 @@ fn renderAsmLegacy(
                 try ais.writer().writeAll(".@");
                 const lexeme = tokenSliceForRender(tree, tok_i);
                 try ais.writer().writeAll(lexeme);
-                try ais.writer().writeAll(" }");
+                try ais.writer().writeAll(" = true }");
                 try renderSpace(r, tok_i, lexeme.len, .newline);
                 ais.popIndent();
                 return renderToken(r, tok_i + 1, space);
@@ -2526,7 +2527,7 @@ fn renderAsmLegacy(
                         try ais.writer().writeAll(".@");
                         const lexeme = tokenSliceForRender(tree, tok_i);
                         try ais.writer().writeAll(lexeme);
-                        try ais.writer().writeAll(" }");
+                        try ais.writer().writeAll(" = true }");
                         try renderSpace(r, tok_i, lexeme.len, .newline);
                         ais.popIndent();
                         return renderToken(r, tok_i + 2, space);
@@ -2534,6 +2535,7 @@ fn renderAsmLegacy(
                     else => {
                         try ais.writer().writeAll(".@");
                         try ais.writer().writeAll(tokenSliceForRender(tree, tok_i));
+                        try ais.writer().writeAll(" = true");
                         try renderToken(r, tok_i + 1, .space);
                         tok_i += 2;
                     },
lib/std/debug.zig
@@ -785,7 +785,7 @@ pub const StackIterator = struct {
                     "flushw"
                 else
                     "ta 3" // ST_FLUSH_WINDOWS
-                ::: "memory");
+                ::: .{ .memory = true });
         }
 
         return StackIterator{
lib/std/mem.zig
@@ -4497,8 +4497,7 @@ pub fn doNotOptimizeAway(val: anytype) void {
                 asm volatile (""
                     :
                     : [val] "m" (val),
-                    : "memory"
-                );
+                    : .{ .memory = true });
             }
         },
         .array => {
lib/std/pie.zig
@@ -100,8 +100,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
                 \\ %[ret] = add(r1, %[ret])
                 : [ret] "=r" (-> [*]const elf.Dyn),
                 :
-                : "r1"
-            ),
+                : .{ .r1 = true }),
             .loongarch32, .loongarch64 => asm volatile (
                 \\ .weak _DYNAMIC
                 \\ .hidden _DYNAMIC
@@ -127,8 +126,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
                 \\ addu %[ret], %[ret], $gp
                 : [ret] "=r" (-> [*]const elf.Dyn),
                 :
-                : "lr"
-            ),
+                : .{ .lr = true }),
             .mips64, .mips64el => asm volatile (
                 \\ .weak _DYNAMIC
                 \\ .hidden _DYNAMIC
@@ -140,8 +138,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
                 \\ daddu %[ret], %[ret], $gp
                 : [ret] "=r" (-> [*]const elf.Dyn),
                 :
-                : "lr"
-            ),
+                : .{ .lr = true }),
             .powerpc, .powerpcle => asm volatile (
                 \\ .weak _DYNAMIC
                 \\ .hidden _DYNAMIC
@@ -153,8 +150,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
                 \\ add %[ret], 4, %[ret]
                 : [ret] "=r" (-> [*]const elf.Dyn),
                 :
-                : "lr", "r4"
-            ),
+                : .{ .lr = true, .r4 = true }),
             .powerpc64, .powerpc64le => asm volatile (
                 \\ .weak _DYNAMIC
                 \\ .hidden _DYNAMIC
@@ -166,8 +162,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
                 \\ add %[ret], 4, %[ret]
                 : [ret] "=r" (-> [*]const elf.Dyn),
                 :
-                : "lr", "r4"
-            ),
+                : .{ .lr = true, .r4 = true }),
             .riscv32, .riscv64 => asm volatile (
                 \\ .weak _DYNAMIC
                 \\ .hidden _DYNAMIC
lib/std/start.zig
@@ -131,32 +131,28 @@ fn exit2(code: usize) noreturn {
                     :
                     : [number] "{rax}" (231),
                       [arg1] "{rdi}" (code),
-                    : "rcx", "r11", "memory"
-                );
+                    : .{ .rcx = true, .r11 = true, .memory = true });
             },
             .arm => {
                 asm volatile ("svc #0"
                     :
                     : [number] "{r7}" (1),
                       [arg1] "{r0}" (code),
-                    : "memory"
-                );
+                    : .{ .memory = true });
             },
             .aarch64 => {
                 asm volatile ("svc #0"
                     :
                     : [number] "{x8}" (93),
                       [arg1] "{x0}" (code),
-                    : "memory", "cc"
-                );
+                    : .{ .memory = true, .cc = true });
             },
             .sparc64 => {
                 asm volatile ("ta 0x6d"
                     :
                     : [number] "{g1}" (1),
                       [arg1] "{o0}" (code),
-                    : "o0", "o1", "o2", "o3", "o4", "o5", "o6", "o7", "memory"
-                );
+                    : .{ .o0 = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o6 = true, .o7 = true, .memory = true });
             },
             else => @compileError("TODO"),
         },
lib/std/Thread.zig
@@ -1198,8 +1198,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .x86_64 => asm volatile (
                     \\  movq $11, %%rax # SYS_munmap
                     \\  syscall
@@ -1221,8 +1220,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .aarch64, .aarch64_be => asm volatile (
                     \\  mov x8, #215 // SYS_munmap
                     \\  mov x0, %[ptr]
@@ -1234,8 +1232,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .hexagon => asm volatile (
                     \\  r6 = #215 // SYS_munmap
                     \\  r0 = %[ptr]
@@ -1247,8 +1244,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 // We set `sp` to the address of the current function as a workaround for a Linux
                 // kernel bug that caused syscalls to return EFAULT if the stack pointer is invalid.
                 // The bug was introduced in 46e12c07b3b9603c60fc1d421ff18618241cb081 and fixed in
@@ -1265,8 +1261,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .mips64, .mips64el => asm volatile (
                     \\  li $2, 5011 # SYS_munmap
                     \\  move $4, %[ptr]
@@ -1278,8 +1273,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile (
                     \\  li 0, 91 # SYS_munmap
                     \\  mr 3, %[ptr]
@@ -1292,8 +1286,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .riscv32, .riscv64 => asm volatile (
                     \\  li a7, 215 # SYS_munmap
                     \\  mv a0, %[ptr]
@@ -1305,8 +1298,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .s390x => asm volatile (
                     \\  lgr %%r2, %[ptr]
                     \\  lgr %%r3, %[len]
@@ -1316,8 +1308,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .sparc => asm volatile (
                     \\ # See sparc64 comments below.
                     \\ 1:
@@ -1338,8 +1329,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .sparc64 => asm volatile (
                     \\ # SPARCs really don't like it when active stack frames
                     \\ # is unmapped (it will result in a segfault), so we
@@ -1365,8 +1355,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 .loongarch32, .loongarch64 => asm volatile (
                     \\ or      $a0, $zero, %[ptr]
                     \\ or      $a1, $zero, %[len]
@@ -1378,8 +1367,7 @@ const LinuxThreadImpl = struct {
                     :
                     : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
                       [len] "r" (self.mapped.len),
-                    : "memory"
-                ),
+                    : .{ .memory = true }),
                 else => |cpu_arch| @compileError("Unsupported linux arch: " ++ @tagName(cpu_arch)),
             }
             unreachable;
lib/std/valgrind.zig
@@ -17,8 +17,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={r3}" (-> usize),
             : [_] "{r4}" (args),
               [_] "{r3}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .aarch64, .aarch64_be => asm volatile (
             \\ ror x12, x12, #3  ; ror x12, x12, #13
             \\ ror x12, x12, #51 ; ror x12, x12, #61
@@ -26,8 +25,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={x3}" (-> usize),
             : [_] "{x4}" (args),
               [_] "{x3}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .mips, .mipsel => asm volatile (
             \\ srl $0,  $0,  13
             \\ srl $0,  $0,  29
@@ -37,8 +35,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={$11}" (-> usize),
             : [_] "{$12}" (args),
               [_] "{$11}" (default),
-            : "memory"
-        ),
+            : .{ .memory = true }),
         .mips64, .mips64el => asm volatile (
             \\ dsll $0,  $0,  3   ; dsll $0, $0, 13
             \\ dsll $0,  $0,  29  ; dsll $0, $0, 19
@@ -46,8 +43,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={$11}" (-> usize),
             : [_] "{$12}" (args),
               [_] "{$11}" (default),
-            : "memory"
-        ),
+            : .{ .memory = true }),
         .powerpc, .powerpcle => asm volatile (
             \\ rlwinm 0, 0, 3,  0, 31 ; rlwinm 0, 0, 13, 0, 31
             \\ rlwinm 0, 0, 29, 0, 31 ; rlwinm 0, 0, 19, 0, 31
@@ -55,8 +51,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={r3}" (-> usize),
             : [_] "{r4}" (args),
               [_] "{r3}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .powerpc64, .powerpc64le => asm volatile (
             \\ rotldi 0, 0, 3  ; rotldi 0, 0, 13
             \\ rotldi 0, 0, 61 ; rotldi 0, 0, 51
@@ -64,8 +59,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={r3}" (-> usize),
             : [_] "{r4}" (args),
               [_] "{r3}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .riscv64 => asm volatile (
             \\ .option push
             \\ .option norvc
@@ -78,8 +72,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={a3}" (-> usize),
             : [_] "{a4}" (args),
               [_] "{a3}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .s390x => asm volatile (
             \\ lr %%r15, %%r15
             \\ lr %%r1,  %%r1
@@ -89,8 +82,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={r3}" (-> usize),
             : [_] "{r2}" (args),
               [_] "{r3}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .x86 => asm volatile (
             \\ roll  $3,    %%edi ; roll $13, %%edi
             \\ roll  $29,   %%edi ; roll $19, %%edi
@@ -98,8 +90,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={edx}" (-> usize),
             : [_] "{eax}" (args),
               [_] "{edx}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         .x86_64 => asm volatile (
             \\ rolq  $3,    %%rdi ; rolq $13, %%rdi
             \\ rolq  $61,   %%rdi ; rolq $51, %%rdi
@@ -107,8 +98,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
             : [_] "={rdx}" (-> usize),
             : [_] "{rax}" (args),
               [_] "{rdx}" (default),
-            : "cc", "memory"
-        ),
+            : .{ .cc = true, .memory = true }),
         else => default,
     };
 }
test/behavior/asm.zig
@@ -55,13 +55,11 @@ test "output constraint modifiers" {
     asm volatile (""
         : [_] "=m,r" (a),
         :
-        : ""
-    );
+        : .{});
     asm volatile (""
         : [_] "=r,m" (a),
         :
-        : ""
-    );
+        : .{});
 }
 
 test "alternative constraints" {
@@ -79,7 +77,6 @@ test "alternative constraints" {
     asm volatile (""
         : [_] "=r,m" (a),
         : [_] "r,m" (a),
-        : ""
     );
 }
 
@@ -96,42 +93,34 @@ test "sized integer/float in asm input" {
     asm volatile (""
         :
         : [_] "m" (@as(usize, 3)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(i15, -3)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(u3, 3)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(i3, 3)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(u121, 3)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(i121, 3)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(f32, 3.17)),
-        : ""
     );
     asm volatile (""
         :
         : [_] "m" (@as(f64, 3.17)),
-        : ""
     );
 }
 
@@ -172,8 +161,7 @@ test "rw constraint (x86_64)" {
     asm ("addl %[b], %[a]"
         : [a] "+r" (res),
         : [b] "r" (@as(i32, 13)),
-        : "flags"
-    );
+        : .{ .flags = true });
     try expectEqual(@as(i32, 18), res);
 }
 
test/cases/llvm/f_segment_address_space_reading_and_writing.zig
@@ -9,7 +9,7 @@ fn setFs(value: c_ulong) void {
         : [number] "{rax}" (158),
           [code] "{rdi}" (0x1002),
           [val] "{rsi}" (value),
-        : "rcx", "r11", "memory"
+        : .{ .rcx = true, .r11 = true, .memory = true }
     );
 }
 
@@ -21,7 +21,7 @@ fn getFs() c_ulong {
         : [number] "{rax}" (158),
           [code] "{rdi}" (0x1003),
           [ptr] "{rsi}" (@intFromPtr(&result)),
-        : "rcx", "r11", "memory"
+        : .{ .rcx = true, .r11 = true, .memory = true }
     );
     return result;
 }
test/standalone/stack_iterator/unwind.zig
@@ -31,7 +31,7 @@ noinline fn frame2(expected: *[4]usize, unwound: *[4]usize) void {
                         \\movl $7, %%edi
                         \\movl $6, %%esi
                         \\movl $5, %%ebp
-                        ::: "ebx", "ecx", "edx", "edi", "esi", "ebp");
+                        ::: .{ .ebx = true, .ecx = true, .edx = true, .edi = true, .esi = true, .ebp = true });
                 } else {
                     asm volatile (
                         \\movl $3, %%ebx
@@ -39,7 +39,7 @@ noinline fn frame2(expected: *[4]usize, unwound: *[4]usize) void {
                         \\movl $2, %%edx
                         \\movl $7, %%edi
                         \\movl $6, %%esi
-                        ::: "ebx", "ecx", "edx", "edi", "esi");
+                        ::: .{ .ebx = true, .ecx = true, .edx = true, .edi = true, .esi = true });
                 }
             },
             .x86_64 => {
@@ -51,7 +51,7 @@ noinline fn frame2(expected: *[4]usize, unwound: *[4]usize) void {
                         \\movq $14, %%r14
                         \\movq $15, %%r15
                         \\movq $6, %%rbp
-                        ::: "rbx", "r12", "r13", "r14", "r15", "rbp");
+                        ::: .{ .rbx = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .rbp = true });
                 } else {
                     asm volatile (
                         \\movq $3, %%rbx
@@ -59,7 +59,7 @@ noinline fn frame2(expected: *[4]usize, unwound: *[4]usize) void {
                         \\movq $13, %%r13
                         \\movq $14, %%r14
                         \\movq $15, %%r15
-                        ::: "rbx", "r12", "r13", "r14", "r15");
+                        ::: .{ .rbx = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true });
                 }
             },
             else => {},
test/standalone/stack_iterator/unwind_freestanding.zig
@@ -58,8 +58,7 @@ export fn _start() callconv(.c) noreturn {
         \\syscall
         :
         : [missed] "{edi}" (missed),
-        : "edi", "eax"
-    );
+        : .{ .edi = true, .eax = true });
 
     while (true) {} // unreached
 }