zig/lib/std/builtin/assembly.zig
Andrew Kelley 15f45e89a7 remove condition codes
LLVM always assumes these are on. Zig backends do not observe them.

If Zig backends want to start using them, they can be introduced, one
arch at a time, with proper documentation.
2025-07-16 10:27:39 -07:00

1008 lines
26 KiB
Zig

pub const Clobbers = switch (@import("builtin").cpu.arch) {
.x86, .x86_64 => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
/// Condition codes. Subset of the bits in `eflags` and `rflags`.
cc: bool = false,
dirflag: bool = false,
eflags: bool = false,
flags: bool = false,
fpcr: bool = false,
fpsr: bool = false,
mxcsr: bool = false,
rflags: bool = false,
rax: bool = false,
rcx: bool = false,
rdx: bool = false,
rbx: bool = false,
rsp: bool = false,
rbp: bool = false,
rsi: bool = false,
rdi: bool = false,
r8: bool = false,
r9: bool = false,
r10: bool = false,
r11: bool = false,
r12: bool = false,
r13: bool = false,
r14: bool = false,
r15: bool = false,
eax: bool = false,
ecx: bool = false,
edx: bool = false,
ebx: bool = false,
esp: bool = false,
ebp: bool = false,
esi: bool = false,
edi: bool = false,
r8d: bool = false,
r9d: bool = false,
r10d: bool = false,
r11d: bool = false,
r12d: bool = false,
r13d: bool = false,
r14d: bool = false,
r15d: bool = false,
ax: bool = false,
cx: bool = false,
dx: bool = false,
bx: bool = false,
sp: bool = false,
bp: bool = false,
si: bool = false,
di: bool = false,
r8w: bool = false,
r9w: bool = false,
r10w: bool = false,
r11w: bool = false,
r12w: bool = false,
r13w: bool = false,
r14w: bool = false,
r15w: bool = false,
al: bool = false,
cl: bool = false,
dl: bool = false,
bl: bool = false,
spl: bool = false,
bpl: bool = false,
sil: bool = false,
dil: bool = false,
r8b: bool = false,
r9b: bool = false,
r10b: bool = false,
r11b: bool = false,
r12b: bool = false,
r13b: bool = false,
r14b: bool = false,
r15b: bool = false,
ah: bool = false,
ch: bool = false,
dh: bool = false,
bh: bool = false,
zmm0: bool = false,
zmm1: bool = false,
zmm2: bool = false,
zmm3: bool = false,
zmm4: bool = false,
zmm5: bool = false,
zmm6: bool = false,
zmm7: bool = false,
zmm8: bool = false,
zmm9: bool = false,
zmm10: bool = false,
zmm11: bool = false,
zmm12: bool = false,
zmm13: bool = false,
zmm14: bool = false,
zmm15: bool = false,
zmm16: bool = false,
zmm17: bool = false,
zmm18: bool = false,
zmm19: bool = false,
zmm20: bool = false,
zmm21: bool = false,
zmm22: bool = false,
zmm23: bool = false,
zmm24: bool = false,
zmm25: bool = false,
zmm26: bool = false,
zmm27: bool = false,
zmm28: bool = false,
zmm29: bool = false,
zmm30: bool = false,
zmm31: bool = false,
ymm0: bool = false,
ymm1: bool = false,
ymm2: bool = false,
ymm3: bool = false,
ymm4: bool = false,
ymm5: bool = false,
ymm6: bool = false,
ymm7: bool = false,
ymm8: bool = false,
ymm9: bool = false,
ymm10: bool = false,
ymm11: bool = false,
ymm12: bool = false,
ymm13: bool = false,
ymm14: bool = false,
ymm15: bool = false,
ymm16: bool = false,
ymm17: bool = false,
ymm18: bool = false,
ymm19: bool = false,
ymm20: bool = false,
ymm21: bool = false,
ymm22: bool = false,
ymm23: bool = false,
ymm24: bool = false,
ymm25: bool = false,
ymm26: bool = false,
ymm27: bool = false,
ymm28: bool = false,
ymm29: bool = false,
ymm30: bool = false,
ymm31: bool = false,
xmm0: bool = false,
xmm1: bool = false,
xmm2: bool = false,
xmm3: bool = false,
xmm4: bool = false,
xmm5: bool = false,
xmm6: bool = false,
xmm7: bool = false,
xmm8: bool = false,
xmm9: bool = false,
xmm10: bool = false,
xmm11: bool = false,
xmm12: bool = false,
xmm13: bool = false,
xmm14: bool = false,
xmm15: bool = false,
xmm16: bool = false,
xmm17: bool = false,
xmm18: bool = false,
xmm19: bool = false,
xmm20: bool = false,
xmm21: bool = false,
xmm22: bool = false,
xmm23: bool = false,
xmm24: bool = false,
xmm25: bool = false,
xmm26: bool = false,
xmm27: bool = false,
xmm28: bool = false,
xmm29: bool = false,
xmm30: bool = false,
xmm31: bool = false,
mm0: bool = false,
mm1: bool = false,
mm2: bool = false,
mm3: bool = false,
mm4: bool = false,
mm5: bool = false,
mm6: bool = false,
mm7: bool = false,
st0: bool = false,
st1: bool = false,
st2: bool = false,
st3: bool = false,
st4: bool = false,
st5: bool = false,
st6: bool = false,
st7: bool = false,
es: bool = false,
cs: bool = false,
ss: bool = false,
ds: bool = false,
fs: bool = false,
gs: bool = false,
},
.aarch64, .aarch64_be => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
nzcv: bool = false,
x0: bool = false,
x1: bool = false,
x2: bool = false,
x3: bool = false,
x4: bool = false,
x5: bool = false,
x6: bool = false,
x7: bool = false,
x8: bool = false,
x9: bool = false,
x10: bool = false,
x11: bool = false,
x12: bool = false,
x13: bool = false,
x14: bool = false,
x15: bool = false,
x16: bool = false,
x17: bool = false,
x18: bool = false,
x19: bool = false,
x20: bool = false,
x21: bool = false,
x22: bool = false,
x23: bool = false,
x24: bool = false,
x25: bool = false,
x26: bool = false,
x27: bool = false,
x28: bool = false,
x29: bool = false,
x30: bool = false,
w0: bool = false,
w1: bool = false,
w2: bool = false,
w3: bool = false,
w4: bool = false,
w5: bool = false,
w6: bool = false,
w7: bool = false,
w8: bool = false,
w9: bool = false,
w10: bool = false,
w11: bool = false,
w12: bool = false,
w13: bool = false,
w14: bool = false,
w15: bool = false,
w16: bool = false,
w17: bool = false,
w18: bool = false,
w19: bool = false,
w20: bool = false,
w21: bool = false,
w22: bool = false,
w23: bool = false,
w24: bool = false,
w25: bool = false,
w26: bool = false,
w27: bool = false,
w28: bool = false,
w29: bool = false,
lr: bool = false,
sp: bool = false,
wsp: bool = false,
fpcr: bool = false,
fpmr: bool = false,
fpsr: bool = false,
ffr: bool = false,
p0: bool = false,
p1: bool = false,
p2: bool = false,
p3: bool = false,
p4: bool = false,
p5: bool = false,
p6: bool = false,
p7: bool = false,
p8: bool = false,
p9: bool = false,
p10: bool = false,
p11: bool = false,
p12: bool = false,
p13: bool = false,
p14: bool = false,
p15: bool = false,
z0: bool = false,
z1: bool = false,
z2: bool = false,
z3: bool = false,
z4: bool = false,
z5: bool = false,
z6: bool = false,
z7: bool = false,
z8: bool = false,
z9: bool = false,
z10: bool = false,
z11: bool = false,
z12: bool = false,
z13: bool = false,
z14: bool = false,
z15: bool = false,
z16: bool = false,
z17: bool = false,
z18: bool = false,
z19: bool = false,
z20: bool = false,
z21: bool = false,
z22: bool = false,
z23: bool = false,
z24: bool = false,
z25: bool = false,
z26: bool = false,
z27: bool = false,
z28: bool = false,
z29: bool = false,
z30: bool = false,
z31: bool = false,
v0: bool = false,
v1: bool = false,
v2: bool = false,
v3: bool = false,
v4: bool = false,
v5: bool = false,
v6: bool = false,
v7: bool = false,
v8: bool = false,
v9: bool = false,
v10: bool = false,
v11: bool = false,
v12: bool = false,
v13: bool = false,
v14: bool = false,
v15: bool = false,
v16: bool = false,
v17: bool = false,
v18: bool = false,
v19: bool = false,
v20: bool = false,
v21: bool = false,
v22: bool = false,
v23: bool = false,
v24: bool = false,
v25: bool = false,
v26: bool = false,
v27: bool = false,
v28: bool = false,
v29: bool = false,
v30: bool = false,
v31: bool = false,
d0: bool = false,
d1: bool = false,
d2: bool = false,
d3: bool = false,
d4: bool = false,
d5: bool = false,
d6: bool = false,
d7: bool = false,
d8: bool = false,
d9: bool = false,
d10: bool = false,
d11: bool = false,
d12: bool = false,
d13: bool = false,
d14: bool = false,
d15: bool = false,
d16: bool = false,
d17: bool = false,
d18: bool = false,
d19: bool = false,
d20: bool = false,
d21: bool = false,
d22: bool = false,
d23: bool = false,
d24: bool = false,
d25: bool = false,
d26: bool = false,
d27: bool = false,
d28: bool = false,
d29: bool = false,
d30: bool = false,
d31: bool = false,
s0: bool = false,
s1: bool = false,
s2: bool = false,
s3: bool = false,
s4: bool = false,
s5: bool = false,
s6: bool = false,
s7: bool = false,
s8: bool = false,
s9: bool = false,
s10: bool = false,
s11: bool = false,
s12: bool = false,
s13: bool = false,
s14: bool = false,
s15: bool = false,
s16: bool = false,
s17: bool = false,
s18: bool = false,
s19: bool = false,
s20: bool = false,
s21: bool = false,
s22: bool = false,
s23: bool = false,
s24: bool = false,
s25: bool = false,
s26: bool = false,
s27: bool = false,
s28: bool = false,
s29: bool = false,
s30: bool = false,
s31: bool = false,
h0: bool = false,
h1: bool = false,
h2: bool = false,
h3: bool = false,
h4: bool = false,
h5: bool = false,
h6: bool = false,
h7: bool = false,
h8: bool = false,
h9: bool = false,
h10: bool = false,
h11: bool = false,
h12: bool = false,
h13: bool = false,
h14: bool = false,
h15: bool = false,
h16: bool = false,
h17: bool = false,
h18: bool = false,
h19: bool = false,
h20: bool = false,
h21: bool = false,
h22: bool = false,
h23: bool = false,
h24: bool = false,
h25: bool = false,
h26: bool = false,
h27: bool = false,
h28: bool = false,
h29: bool = false,
h30: bool = false,
h31: bool = false,
b0: bool = false,
b1: bool = false,
b2: bool = false,
b3: bool = false,
b4: bool = false,
b5: bool = false,
b6: bool = false,
b7: bool = false,
b8: bool = false,
b9: bool = false,
b10: bool = false,
b11: bool = false,
b12: bool = false,
b13: bool = false,
b14: bool = false,
b15: bool = false,
b16: bool = false,
b17: bool = false,
b18: bool = false,
b19: bool = false,
b20: bool = false,
b21: bool = false,
b22: bool = false,
b23: bool = false,
b24: bool = false,
b25: bool = false,
b26: bool = false,
b27: bool = false,
b28: bool = false,
b29: bool = false,
b30: bool = false,
b31: bool = false,
za0q: bool = false,
za1q: bool = false,
za2q: bool = false,
za3q: bool = false,
za4q: bool = false,
za5q: bool = false,
za6q: bool = false,
za7q: bool = false,
za8q: bool = false,
za9q: bool = false,
za10q: bool = false,
za11q: bool = false,
za12q: bool = false,
za13q: bool = false,
za14q: bool = false,
za15q: bool = false,
za0d: bool = false,
za1d: bool = false,
za2d: bool = false,
za3d: bool = false,
za4d: bool = false,
za5d: bool = false,
za6d: bool = false,
za7d: bool = false,
za0s: bool = false,
za1s: bool = false,
za2s: bool = false,
za3s: bool = false,
za0h: bool = false,
za1h: bool = false,
za0b: bool = false,
zt0: bool = false,
},
.arm, .armeb, .thumb, .thumbeb => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
apsr: bool = false,
cpsr: bool = false,
spsr: bool = false,
r0: bool = false,
r1: bool = false,
r2: bool = false,
r3: bool = false,
r4: bool = false,
r5: bool = false,
r6: bool = false,
r7: bool = false,
r8: bool = false,
r9: bool = false,
r10: bool = false,
r11: bool = false,
r12: bool = false,
r13: bool = false,
r14: bool = false,
fpscr: bool = false,
vpr: bool = false,
d0: bool = false,
d1: bool = false,
d2: bool = false,
d3: bool = false,
d4: bool = false,
d5: bool = false,
d6: bool = false,
d7: bool = false,
d8: bool = false,
d9: bool = false,
d10: bool = false,
d11: bool = false,
d12: bool = false,
d13: bool = false,
d14: bool = false,
d15: bool = false,
d16: bool = false,
d17: bool = false,
d18: bool = false,
d19: bool = false,
d20: bool = false,
d21: bool = false,
d22: bool = false,
d23: bool = false,
d24: bool = false,
d25: bool = false,
d26: bool = false,
d27: bool = false,
d28: bool = false,
d29: bool = false,
d30: bool = false,
d31: bool = false,
s0: bool = false,
s1: bool = false,
s2: bool = false,
s3: bool = false,
s4: bool = false,
s5: bool = false,
s6: bool = false,
s7: bool = false,
s8: bool = false,
s9: bool = false,
s10: bool = false,
s11: bool = false,
s12: bool = false,
s13: bool = false,
s14: bool = false,
s15: bool = false,
s16: bool = false,
s17: bool = false,
s18: bool = false,
s19: bool = false,
s20: bool = false,
s21: bool = false,
s22: bool = false,
s23: bool = false,
s24: bool = false,
s25: bool = false,
s26: bool = false,
s27: bool = false,
s28: bool = false,
s29: bool = false,
s30: bool = false,
s31: bool = false,
q0: bool = false,
q1: bool = false,
q2: bool = false,
q3: bool = false,
q4: bool = false,
q5: bool = false,
q6: bool = false,
q7: bool = false,
q8: bool = false,
q9: bool = false,
q10: bool = false,
q11: bool = false,
q12: bool = false,
q13: bool = false,
q14: bool = false,
q15: bool = false,
},
.riscv32, .riscv64 => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
ssp: bool = false,
x1: bool = false,
x2: bool = false,
x3: bool = false,
x4: bool = false,
x5: bool = false,
x6: bool = false,
x7: bool = false,
x8: bool = false,
x9: bool = false,
x10: bool = false,
x11: bool = false,
x12: bool = false,
x13: bool = false,
x14: bool = false,
x15: bool = false,
x16: bool = false,
x17: bool = false,
x18: bool = false,
x19: bool = false,
x20: bool = false,
x21: bool = false,
x22: bool = false,
x23: bool = false,
x24: bool = false,
x25: bool = false,
x26: bool = false,
x27: bool = false,
x28: bool = false,
x29: bool = false,
x30: bool = false,
x31: bool = false,
fflags: bool = false,
frm: bool = false,
f0: bool = false,
f1: bool = false,
f2: bool = false,
f3: bool = false,
f4: bool = false,
f5: bool = false,
f6: bool = false,
f7: bool = false,
f8: bool = false,
f9: bool = false,
f10: bool = false,
f11: bool = false,
f12: bool = false,
f13: bool = false,
f14: bool = false,
f15: bool = false,
f16: bool = false,
f17: bool = false,
f18: bool = false,
f19: bool = false,
f20: bool = false,
f21: bool = false,
f22: bool = false,
f23: bool = false,
f24: bool = false,
f25: bool = false,
f26: bool = false,
f27: bool = false,
f28: bool = false,
f29: bool = false,
f30: bool = false,
f31: bool = false,
vtype: bool = false,
vl: bool = false,
vxsat: bool = false,
vxrm: bool = false,
vcsr: bool = false,
v0: bool = false,
v1: bool = false,
v2: bool = false,
v3: bool = false,
v4: bool = false,
v5: bool = false,
v6: bool = false,
v7: bool = false,
v8: bool = false,
v9: bool = false,
v10: bool = false,
v11: bool = false,
v12: bool = false,
v13: bool = false,
v14: bool = false,
v15: bool = false,
v16: bool = false,
v17: bool = false,
v18: bool = false,
v19: bool = false,
v20: bool = false,
v21: bool = false,
v22: bool = false,
v23: bool = false,
v24: bool = false,
v25: bool = false,
v26: bool = false,
v27: bool = false,
v28: bool = false,
v29: bool = false,
v30: bool = false,
v31: bool = false,
},
.xcore => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
r0: bool = false,
r1: bool = false,
r2: bool = false,
r3: bool = false,
r4: bool = false,
r5: bool = false,
r6: bool = false,
r7: bool = false,
r8: bool = false,
r9: bool = false,
r10: bool = false,
r11: bool = false,
cp: bool = false,
dp: bool = false,
sp: bool = false,
lr: bool = false,
sr: bool = false,
},
.xtensa => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
sar: bool = false,
lbeg: bool = false,
lend: bool = false,
lcount: bool = false,
atomctl: bool = false,
scompare1: bool = false,
threadptr: bool = false,
litbase: bool = false,
windowbase: bool = false,
windowstart: bool = false,
ps: bool = false,
a0: bool = false,
a1: bool = false,
a2: bool = false,
a3: bool = false,
a4: bool = false,
a5: bool = false,
a6: bool = false,
a7: bool = false,
a8: bool = false,
a9: bool = false,
a10: bool = false,
a11: bool = false,
a12: bool = false,
a13: bool = false,
a14: bool = false,
a15: bool = false,
br: bool = false,
b0: bool = false,
b1: bool = false,
b2: bool = false,
b3: bool = false,
b4: bool = false,
b5: bool = false,
b6: bool = false,
b7: bool = false,
b8: bool = false,
b9: bool = false,
b10: bool = false,
b11: bool = false,
b12: bool = false,
b13: bool = false,
b14: bool = false,
b15: bool = false,
acchi: bool = false,
acclo: bool = false,
m0: bool = false,
m1: bool = false,
m2: bool = false,
m3: bool = false,
fcr: bool = false,
fsr: bool = false,
f0: bool = false,
f1: bool = false,
f2: bool = false,
f3: bool = false,
f4: bool = false,
f5: bool = false,
f6: bool = false,
f7: bool = false,
f8: bool = false,
f9: bool = false,
f10: bool = false,
f11: bool = false,
f12: bool = false,
f13: bool = false,
f14: bool = false,
f15: bool = false,
},
.lanai => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
/// Condition flags which aren't accessible outside of conditional execution.
sw: bool = false,
r3: bool = false,
r4: bool = false,
r5: bool = false,
r6: bool = false,
r7: bool = false,
r8: bool = false,
r9: bool = false,
r10: bool = false,
r11: bool = false,
r12: bool = false,
r13: bool = false,
r14: bool = false,
r15: bool = false,
r16: bool = false,
r17: bool = false,
r18: bool = false,
r19: bool = false,
r20: bool = false,
r21: bool = false,
r22: bool = false,
r23: bool = false,
r24: bool = false,
r25: bool = false,
r26: bool = false,
r27: bool = false,
r28: bool = false,
r29: bool = false,
r30: bool = false,
r31: bool = false,
},
.avr => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
flags: bool = false,
r0: bool = false,
r1: bool = false,
r2: bool = false,
r3: bool = false,
r4: bool = false,
r5: bool = false,
r6: bool = false,
r7: bool = false,
r8: bool = false,
r9: bool = false,
r10: bool = false,
r11: bool = false,
r12: bool = false,
r13: bool = false,
r14: bool = false,
r15: bool = false,
r16: bool = false,
r17: bool = false,
r18: bool = false,
r19: bool = false,
r20: bool = false,
r21: bool = false,
r22: bool = false,
r23: bool = false,
r24: bool = false,
r25: bool = false,
r26: bool = false,
r27: bool = false,
r28: bool = false,
r29: bool = false,
r30: bool = false,
r31: bool = false,
},
.msp430 => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
r0: bool = false,
r1: bool = false,
r2: bool = false,
r4: bool = false,
r5: bool = false,
r6: bool = false,
r7: bool = false,
r8: bool = false,
r9: bool = false,
r10: bool = false,
r11: bool = false,
r12: bool = false,
r13: bool = false,
r14: bool = false,
r15: bool = false,
},
.m68k => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
ccr: bool = false,
d0: bool = false,
d1: bool = false,
d2: bool = false,
d3: bool = false,
d4: bool = false,
d5: bool = false,
d6: bool = false,
d7: bool = false,
a0: bool = false,
a1: bool = false,
a2: bool = false,
a3: bool = false,
a4: bool = false,
a5: bool = false,
a6: bool = false,
a7: bool = false,
macsr: bool = false,
acc: bool = false,
acc0: bool = false,
acc1: bool = false,
acc2: bool = false,
acc3: bool = false,
mask: bool = false,
fpcr: bool = false,
fpsr: bool = false,
fp0: bool = false,
fp1: bool = false,
fp2: bool = false,
fp3: bool = false,
fp4: bool = false,
fp5: bool = false,
fp6: bool = false,
fp7: bool = false,
},
else => packed struct {
/// Whether the inline assembly code may perform stores to memory
/// addresses other than those derived from input pointer provenance.
memory: bool = false,
},
};