authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-05-02 11:04:28+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-05-03 12:22:37+01:00
log8df04e144483ff48e506522da8269af25d0bca85
tree2fefb49eaafb603c58a207ebfc28f7eceff4bb24
parent02097dff7049cecb16e301d37cd270159ef0f371
signaturelock-open Commit is signed but in an unrecognized format.

std: actually rename `std.builtin` to `std.lang`

This is now the canonical name, and `std.builtin` is a deprecated alias.

6 files changed, 4379 insertions(+), 4375 deletions(-)

CMakeLists.txt+2-1
...@@ -239,7 +239,8 @@ set(ZIG_STAGE2_SOURCES...@@ -239,7 +239,8 @@ set(ZIG_STAGE2_SOURCES
239 lib/std/atomic.zig239 lib/std/atomic.zig
240 lib/std/base64.zig240 lib/std/base64.zig
241 lib/std/buf_map.zig241 lib/std/buf_map.zig
242 lib/std/builtin.zig242 lib/std/lang.zig
243 lib/std/lang/assembly.zig
243 lib/std/c.zig244 lib/std/c.zig
244 lib/std/coff.zig245 lib/std/coff.zig
245 lib/std/crypto.zig246 lib/std/crypto.zig
lib/std/builtin.zig deleted-1254
...@@ -1,1254 +0,0 @@
1//! Types and values provided by the Zig language.
2
3const builtin = @import("builtin");
4const std = @import("std.zig");
5const root = @import("root");
6
7pub const assembly = @import("builtin/assembly.zig");
8
9/// This data structure is used by the Zig language code generation and
10/// therefore must be kept in sync with the compiler implementation.
11pub const StackTrace = struct {
12 index: usize,
13 instruction_addresses: []usize,
14};
15
16/// This data structure is used by the Zig language code generation and
17/// therefore must be kept in sync with the compiler implementation.
18pub const GlobalLinkage = enum(u2) {
19 internal,
20 strong,
21 weak,
22 link_once,
23};
24
25/// This data structure is used by the Zig language code generation and
26/// therefore must be kept in sync with the compiler implementation.
27pub const SymbolVisibility = enum(u2) {
28 default,
29 hidden,
30 protected,
31};
32
33/// This data structure is used by the Zig language code generation and
34/// therefore must be kept in sync with the compiler implementation.
35pub const AtomicOrder = enum {
36 unordered,
37 monotonic,
38 acquire,
39 release,
40 acq_rel,
41 seq_cst,
42};
43
44/// This data structure is used by the Zig language code generation and
45/// therefore must be kept in sync with the compiler implementation.
46pub const ReduceOp = enum {
47 And,
48 Or,
49 Xor,
50 Min,
51 Max,
52 Add,
53 Mul,
54};
55
56/// This data structure is used by the Zig language code generation and
57/// therefore must be kept in sync with the compiler implementation.
58pub const AtomicRmwOp = enum {
59 /// Exchange - store the operand unmodified.
60 /// Supports enums, integers, and floats.
61 Xchg,
62 /// Add operand to existing value.
63 /// Supports integers and floats.
64 /// For integers, two's complement wraparound applies.
65 Add,
66 /// Subtract operand from existing value.
67 /// Supports integers and floats.
68 /// For integers, two's complement wraparound applies.
69 Sub,
70 /// Perform bitwise AND on existing value with operand.
71 /// Supports integers.
72 And,
73 /// Perform bitwise NAND on existing value with operand.
74 /// Supports integers.
75 Nand,
76 /// Perform bitwise OR on existing value with operand.
77 /// Supports integers.
78 Or,
79 /// Perform bitwise XOR on existing value with operand.
80 /// Supports integers.
81 Xor,
82 /// Store operand if it is larger than the existing value.
83 /// Supports integers and floats.
84 Max,
85 /// Store operand if it is smaller than the existing value.
86 /// Supports integers and floats.
87 Min,
88};
89
90/// The code model puts constraints on the location of symbols and the size of code and data.
91/// The selection of a code model is a trade off on speed and restrictions that needs to be selected on a per application basis to meet its requirements.
92/// A slightly more detailed explanation can be found in (for example) the [System V Application Binary Interface (x86_64)](https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf) 3.5.1.
93///
94/// This data structure is used by the Zig language code generation and
95/// therefore must be kept in sync with the compiler implementation.
96pub const CodeModel = enum {
97 default,
98 extreme,
99 kernel,
100 large,
101 medany,
102 medium,
103 medlow,
104 medmid,
105 normal,
106 small,
107 tiny,
108};
109
110/// This data structure is used by the Zig language code generation and
111/// therefore must be kept in sync with the compiler implementation.
112pub const OptimizeMode = enum {
113 Debug,
114 ReleaseSafe,
115 ReleaseFast,
116 ReleaseSmall,
117};
118
119/// The calling convention of a function defines how arguments and return values are passed, as well
120/// as any other requirements which callers and callees must respect, such as register preservation
121/// and stack alignment.
122///
123/// This data structure is used by the Zig language code generation and
124/// therefore must be kept in sync with the compiler implementation.
125pub const CallingConvention = union(enum(u8)) {
126 pub const Tag = @typeInfo(CallingConvention).@"union".tag_type.?;
127
128 /// This is an alias for the default C calling convention for this target.
129 /// Functions marked as `extern` or `export` are given this calling convention by default.
130 pub const c = builtin.target.cCallingConvention().?;
131
132 pub const winapi: CallingConvention = switch (builtin.target.cpu.arch) {
133 .x86_64 => .{ .x86_64_win = .{} },
134 .x86 => .{ .x86_stdcall = .{} },
135 .aarch64 => .{ .aarch64_aapcs_win = .{} },
136 .thumb => .{ .arm_aapcs_vfp = .{} },
137 else => unreachable,
138 };
139
140 pub const kernel: CallingConvention = switch (builtin.target.cpu.arch) {
141 .amdgcn => .amdgcn_kernel,
142 .nvptx, .nvptx64 => .nvptx_kernel,
143 .spirv32, .spirv64 => .spirv_kernel,
144 else => unreachable,
145 };
146
147 /// The default Zig calling convention when neither `export` nor `inline` is specified.
148 /// This calling convention makes no guarantees about stack alignment, registers, etc.
149 /// It can only be used within this Zig compilation unit.
150 auto,
151
152 /// The calling convention of a function that can be called with `async` syntax. An `async` call
153 /// of a runtime-known function must target a function with this calling convention.
154 /// Comptime-known functions with other calling conventions may be coerced to this one.
155 async,
156
157 /// Functions with this calling convention have no prologue or epilogue, making the function
158 /// uncallable in regular Zig code. This can be useful when integrating with assembly.
159 naked,
160
161 /// This calling convention is exactly equivalent to using the `inline` keyword on a function
162 /// definition. This function will be semantically inlined by the Zig compiler at call sites.
163 /// Pointers to inline functions are comptime-only.
164 @"inline",
165
166 // Calling conventions for the `x86_64` architecture.
167 x86_64_sysv: CommonOptions,
168 x86_64_x32: CommonOptions,
169 x86_64_win: CommonOptions,
170 x86_64_regcall_v3_sysv: CommonOptions,
171 x86_64_regcall_v4_win: CommonOptions,
172 x86_64_vectorcall: CommonOptions,
173 x86_64_interrupt: CommonOptions,
174
175 // Calling conventions for the `x86` architecture.
176 x86_sysv: X86RegparmOptions,
177 x86_win: X86RegparmOptions,
178 x86_stdcall: X86RegparmOptions,
179 x86_fastcall: CommonOptions,
180 x86_thiscall: CommonOptions,
181 x86_thiscall_mingw: CommonOptions,
182 x86_regcall_v3: CommonOptions,
183 x86_regcall_v4_win: CommonOptions,
184 x86_vectorcall: CommonOptions,
185 x86_interrupt: CommonOptions,
186
187 // Calling conventions for the `x86_16` architecture.
188
189 x86_16_cdecl: CommonOptions,
190 x86_16_stdcall: CommonOptions,
191 x86_16_regparmcall: CommonOptions,
192 x86_16_interrupt: CommonOptions,
193
194 // Calling conventions for the `aarch64` and `aarch64_be` architectures.
195 aarch64_aapcs: CommonOptions,
196 aarch64_aapcs_darwin: CommonOptions,
197 aarch64_aapcs_win: CommonOptions,
198 aarch64_vfabi: CommonOptions,
199 aarch64_vfabi_sve: CommonOptions,
200
201 /// The standard `alpha` calling convention.
202 alpha_osf: CommonOptions,
203
204 // Calling convetions for the `arm`, `armeb`, `thumb`, and `thumbeb` architectures.
205 /// ARM Architecture Procedure Call Standard
206 arm_aapcs: CommonOptions,
207 /// ARM Architecture Procedure Call Standard Vector Floating-Point
208 arm_aapcs_vfp: CommonOptions,
209 arm_interrupt: ArmInterruptOptions,
210
211 // Calling conventions for the `mips64` and `mips64el` architectures.
212 mips64_n64: CommonOptions,
213 mips64_n32: CommonOptions,
214 mips64_interrupt: MipsInterruptOptions,
215
216 // Calling conventions for the `mips` and `mipsel` architectures.
217 mips_o32: CommonOptions,
218 mips_interrupt: MipsInterruptOptions,
219
220 // Calling conventions for the `riscv64` architecture.
221 riscv64_lp64: CommonOptions,
222 riscv64_lp64_v: CommonOptions,
223 riscv64_interrupt: RiscvInterruptOptions,
224
225 // Calling conventions for the `riscv32` architecture.
226 riscv32_ilp32: CommonOptions,
227 riscv32_ilp32_v: CommonOptions,
228 riscv32_interrupt: RiscvInterruptOptions,
229
230 // Calling conventions for the `sparc64` architecture.
231 sparc64_sysv: CommonOptions,
232
233 // Calling conventions for the `sparc` architecture.
234 sparc_sysv: CommonOptions,
235
236 // Calling conventions for the `powerpc64` and `powerpc64le` architectures.
237 powerpc64_elf: CommonOptions,
238 powerpc64_elf_altivec: CommonOptions,
239 powerpc64_elf_v2: CommonOptions,
240
241 // Calling conventions for the `powerpc` and `powerpcle` architectures.
242 powerpc_sysv: CommonOptions,
243 powerpc_sysv_altivec: CommonOptions,
244 powerpc_aix: CommonOptions,
245 powerpc_aix_altivec: CommonOptions,
246
247 /// The standard `wasm32` and `wasm64` calling convention, as specified in the WebAssembly Tool Conventions.
248 wasm_mvp: CommonOptions,
249
250 /// The standard `arc`/`arceb` calling convention.
251 arc_sysv: CommonOptions,
252 arc_interrupt: ArcInterruptOptions,
253
254 // Calling conventions for the `avr` architecture.
255 avr_gnu,
256 avr_builtin,
257 avr_signal,
258 avr_interrupt,
259
260 /// The standard `bpfel`/`bpfeb` calling convention.
261 bpf_std: CommonOptions,
262
263 // Calling conventions for the `csky` architecture.
264 csky_sysv: CommonOptions,
265 csky_interrupt: CommonOptions,
266
267 // Calling conventions for the `hexagon` architecture.
268 hexagon_sysv: CommonOptions,
269 hexagon_sysv_hvx: CommonOptions,
270
271 /// The standard `hppa` calling convention.
272 hppa_elf: CommonOptions,
273
274 /// The standard `hppa64` calling convention.
275 hppa64_elf: CommonOptions,
276
277 kvx_lp64: CommonOptions,
278 kvx_ilp32: CommonOptions,
279
280 /// The standard `lanai` calling convention.
281 lanai_sysv: CommonOptions,
282
283 /// The standard `loongarch64` calling convention.
284 loongarch64_lp64: CommonOptions,
285
286 /// The standard `loongarch32` calling convention.
287 loongarch32_ilp32: CommonOptions,
288
289 // Calling conventions for the `m68k` architecture.
290 m68k_sysv: CommonOptions,
291 m68k_gnu: CommonOptions,
292 m68k_rtd: CommonOptions,
293 m68k_interrupt: CommonOptions,
294
295 /// The standard `microblaze`/`microblazeel` calling convention.
296 microblaze_std: CommonOptions,
297 microblaze_interrupt: MicroblazeInterruptOptions,
298
299 /// The standard `msp430` calling convention.
300 msp430_eabi: CommonOptions,
301 msp430_interrupt: CommonOptions,
302
303 /// The standard `or1k` calling convention.
304 or1k_sysv: CommonOptions,
305
306 /// The standard `propeller` calling convention.
307 propeller_sysv: CommonOptions,
308
309 // Calling conventions for the `s390x` architecture.
310 s390x_sysv: CommonOptions,
311 s390x_sysv_vx: CommonOptions,
312
313 // Calling conventions for the `sh`/`sheb` architecture.
314 sh_gnu: CommonOptions,
315 sh_renesas: CommonOptions,
316 sh_interrupt: ShInterruptOptions,
317
318 /// The standard `ve` calling convention.
319 ve_sysv: CommonOptions,
320
321 // Calling conventions for the `xcore` architecture.
322 xcore_xs1: CommonOptions,
323 xcore_xs2: CommonOptions,
324
325 // Calling conventions for the `xtensa`/`xtensaeb` architecture.
326 xtensa_call0: CommonOptions,
327 xtensa_windowed: CommonOptions,
328
329 // Calling conventions for the `amdgcn` architecture.
330 amdgcn_device: CommonOptions,
331 amdgcn_kernel,
332 amdgcn_cs: CommonOptions,
333
334 // Calling conventions for the `nvptx` and `nvptx64` architectures.
335 nvptx_device,
336 nvptx_kernel,
337
338 // Calling conventions for kernels and shaders on the `spirv`, `spirv32`, and `spirv64` architectures.
339 spirv_device,
340 spirv_kernel,
341 spirv_fragment,
342 spirv_vertex,
343
344 // Calling conventions for the `ez80` architecture.
345 ez80_cet,
346 ez80_tiflags,
347
348 /// Options shared across most calling conventions.
349 pub const CommonOptions = struct {
350 /// The boundary the stack is aligned to when the function is called.
351 /// `null` means the default for this calling convention.
352 incoming_stack_alignment: ?u64 = null,
353 };
354
355 /// Options for x86 calling conventions which support the regparm attribute to pass some
356 /// arguments in registers.
357 pub const X86RegparmOptions = struct {
358 /// The boundary the stack is aligned to when the function is called.
359 /// `null` means the default for this calling convention.
360 incoming_stack_alignment: ?u64 = null,
361 /// The number of arguments to pass in registers before passing the remaining arguments
362 /// according to the calling convention.
363 /// Equivalent to `__attribute__((regparm(x)))` in Clang and GCC.
364 register_params: u2 = 0,
365 };
366
367 /// Options for the `arc_interrupt` calling convention.
368 pub const ArcInterruptOptions = struct {
369 /// The boundary the stack is aligned to when the function is called.
370 /// `null` means the default for this calling convention.
371 incoming_stack_alignment: ?u64 = null,
372 /// The kind of interrupt being received.
373 type: InterruptType,
374
375 pub const InterruptType = enum(u2) {
376 ilink1,
377 ilink2,
378 ilink,
379 firq,
380 };
381 };
382
383 /// Options for the `arm_interrupt` calling convention.
384 pub const ArmInterruptOptions = struct {
385 /// The boundary the stack is aligned to when the function is called.
386 /// `null` means the default for this calling convention.
387 incoming_stack_alignment: ?u64 = null,
388 /// The kind of interrupt being received.
389 type: InterruptType = .generic,
390
391 pub const InterruptType = enum(u3) {
392 generic,
393 irq,
394 fiq,
395 swi,
396 abort,
397 undef,
398 };
399 };
400
401 /// Options for the `microblaze_interrupt` calling convention.
402 pub const MicroblazeInterruptOptions = struct {
403 /// The boundary the stack is aligned to when the function is called.
404 /// `null` means the default for this calling convention.
405 incoming_stack_alignment: ?u64 = null,
406 type: InterruptType = .regular,
407
408 pub const InterruptType = enum(u2) {
409 /// User exception; return with `rtsd`.
410 user,
411 /// Regular interrupt; return with `rtid`.
412 regular,
413 /// Fast interrupt; return with `rtid`.
414 fast,
415 /// Software breakpoint; return with `rtbd`.
416 breakpoint,
417 };
418 };
419
420 /// Options for the `mips_interrupt` and `mips64_interrupt` calling conventions.
421 pub const MipsInterruptOptions = struct {
422 /// The boundary the stack is aligned to when the function is called.
423 /// `null` means the default for this calling convention.
424 incoming_stack_alignment: ?u64 = null,
425 /// The interrupt mode.
426 mode: InterruptMode = .eic,
427
428 pub const InterruptMode = enum(u4) {
429 eic,
430 sw0,
431 sw1,
432 hw0,
433 hw1,
434 hw2,
435 hw3,
436 hw4,
437 hw5,
438 };
439 };
440
441 /// Options for the `riscv32_interrupt` and `riscv64_interrupt` calling conventions.
442 pub const RiscvInterruptOptions = struct {
443 /// The boundary the stack is aligned to when the function is called.
444 /// `null` means the default for this calling convention.
445 incoming_stack_alignment: ?u64 = null,
446 /// The privilege mode.
447 mode: PrivilegeMode,
448
449 pub const PrivilegeMode = enum(u2) {
450 supervisor,
451 machine,
452 };
453 };
454
455 /// Options for the `sh_interrupt` calling convention.
456 pub const ShInterruptOptions = struct {
457 /// The boundary the stack is aligned to when the function is called.
458 /// `null` means the default for this calling convention.
459 incoming_stack_alignment: ?u64 = null,
460 save: SaveBehavior = .full,
461
462 pub const SaveBehavior = enum(u3) {
463 /// Save only fpscr (if applicable).
464 fpscr,
465 /// Save only high-numbered registers, i.e. r0 through r7 are *not* saved.
466 high,
467 /// Save all registers normally.
468 full,
469 /// Save all registers using the CPU's fast register bank.
470 bank,
471 };
472 };
473
474 /// Returns the array of `std.Target.Cpu.Arch` to which this `CallingConvention` applies.
475 /// Asserts that `cc` is not `.auto`, `.@"async"`, `.naked`, or `.@"inline"`.
476 pub fn archs(cc: CallingConvention) []const std.Target.Cpu.Arch {
477 return std.Target.Cpu.Arch.fromCallingConvention(cc);
478 }
479
480 pub fn eql(a: CallingConvention, b: CallingConvention) bool {
481 return std.meta.eql(a, b);
482 }
483
484 pub fn withStackAlign(cc: CallingConvention, incoming_stack_alignment: u64) CallingConvention {
485 const tag: CallingConvention.Tag = cc;
486 var result = cc;
487 @field(result, @tagName(tag)).incoming_stack_alignment = incoming_stack_alignment;
488 return result;
489 }
490};
491
492/// This data structure is used by the Zig language code generation and
493/// therefore must be kept in sync with the compiler implementation.
494pub const AddressSpace = enum(u5) {
495 // CPU address spaces.
496 generic,
497 gs,
498 fs,
499 ss,
500
501 // x86_16 extra address spaces.
502 /// Allows addressing the entire address space by storing both segment and offset.
503 far,
504
505 // GPU address spaces.
506 global,
507 constant,
508 param,
509 shared,
510 local,
511 input,
512 output,
513 uniform,
514 push_constant,
515 storage_buffer,
516 physical_storage_buffer,
517
518 // AVR address spaces.
519 flash,
520 flash1,
521 flash2,
522 flash3,
523 flash4,
524 flash5,
525
526 // Propeller address spaces.
527
528 /// This address space only addresses the cog-local ram.
529 cog,
530
531 /// This address space only addresses shared hub ram.
532 hub,
533
534 /// This address space only addresses the "lookup" ram
535 lut,
536};
537
538/// This data structure is used by the Zig language code generation and
539/// therefore must be kept in sync with the compiler implementation.
540pub const SourceLocation = struct {
541 /// The name chosen when compiling. Not a file path.
542 module: [:0]const u8,
543 /// Relative to the root directory of its module.
544 file: [:0]const u8,
545 fn_name: [:0]const u8,
546 line: u32,
547 column: u32,
548};
549
550pub const TypeId = std.meta.Tag(Type);
551
552/// This data structure is used by the Zig language code generation and
553/// therefore must be kept in sync with the compiler implementation.
554pub const Type = union(enum) {
555 type,
556 void,
557 bool,
558 noreturn,
559 int: Int,
560 float: Float,
561 pointer: Pointer,
562 array: Array,
563 @"struct": Struct,
564 comptime_float,
565 comptime_int,
566 undefined,
567 null,
568 optional: Optional,
569 error_union: ErrorUnion,
570 error_set: ErrorSet,
571 @"enum": Enum,
572 @"union": Union,
573 @"fn": Fn,
574 @"opaque": Opaque,
575 frame: Frame,
576 @"anyframe": AnyFrame,
577 vector: Vector,
578 enum_literal,
579
580 /// This data structure is used by the Zig language code generation and
581 /// therefore must be kept in sync with the compiler implementation.
582 pub const Int = struct {
583 signedness: Signedness,
584 bits: u16,
585 };
586
587 /// This data structure is used by the Zig language code generation and
588 /// therefore must be kept in sync with the compiler implementation.
589 pub const Float = struct {
590 bits: u16,
591 };
592
593 /// This data structure is used by the Zig language code generation and
594 /// therefore must be kept in sync with the compiler implementation.
595 pub const Pointer = struct {
596 size: Size,
597 is_const: bool,
598 is_volatile: bool,
599 /// `null` means implicit alignment, which is equivalent to `@alignOf(child)`.
600 alignment: ?usize,
601 address_space: AddressSpace,
602 child: type,
603 is_allowzero: bool,
604
605 /// The type of the sentinel is the element type of the pointer, which is
606 /// the value of the `child` field in this struct. However there is no way
607 /// to refer to that type here, so we use `*const anyopaque`.
608 /// See also: `sentinel`
609 sentinel_ptr: ?*const anyopaque,
610
611 /// Loads the pointer type's sentinel value from `sentinel_ptr`.
612 /// Returns `null` if the pointer type has no sentinel.
613 pub inline fn sentinel(comptime ptr: Pointer) ?ptr.child {
614 const sp: *const ptr.child = @ptrCast(@alignCast(ptr.sentinel_ptr orelse return null));
615 return sp.*;
616 }
617
618 /// This data structure is used by the Zig language code generation and
619 /// therefore must be kept in sync with the compiler implementation.
620 pub const Size = enum(u2) {
621 one,
622 many,
623 slice,
624 c,
625 };
626
627 /// This data structure is used by the Zig language code generation and
628 /// therefore must be kept in sync with the compiler implementation.
629 pub const Attributes = struct {
630 @"const": bool = false,
631 @"volatile": bool = false,
632 @"allowzero": bool = false,
633 @"addrspace": ?AddressSpace = null,
634 @"align": ?usize = null,
635 };
636 };
637
638 /// This data structure is used by the Zig language code generation and
639 /// therefore must be kept in sync with the compiler implementation.
640 pub const Array = struct {
641 len: comptime_int,
642 child: type,
643
644 /// The type of the sentinel is the element type of the array, which is
645 /// the value of the `child` field in this struct. However there is no way
646 /// to refer to that type here, so we use `*const anyopaque`.
647 /// See also: `sentinel`.
648 sentinel_ptr: ?*const anyopaque,
649
650 /// Loads the array type's sentinel value from `sentinel_ptr`.
651 /// Returns `null` if the array type has no sentinel.
652 pub inline fn sentinel(comptime arr: Array) ?arr.child {
653 const sp: *const arr.child = @ptrCast(@alignCast(arr.sentinel_ptr orelse return null));
654 return sp.*;
655 }
656 };
657
658 /// This data structure is used by the Zig language code generation and
659 /// therefore must be kept in sync with the compiler implementation.
660 pub const ContainerLayout = enum(u2) {
661 auto,
662 @"extern",
663 @"packed",
664 };
665
666 /// This data structure is used by the Zig language code generation and
667 /// therefore must be kept in sync with the compiler implementation.
668 pub const StructField = struct {
669 name: [:0]const u8,
670 type: type,
671 /// The type of the default value is the type of this struct field, which
672 /// is the value of the `type` field in this struct. However there is no
673 /// way to refer to that type here, so we use `*const anyopaque`.
674 /// See also: `defaultValue`.
675 default_value_ptr: ?*const anyopaque,
676 is_comptime: bool,
677 /// `null` means the field alignment was not explicitly specified. The
678 /// field will still be aligned to at least `@alignOf` its `type`.
679 alignment: ?usize,
680
681 /// Loads the field's default value from `default_value_ptr`.
682 /// Returns `null` if the field has no default value.
683 pub inline fn defaultValue(comptime sf: StructField) ?sf.type {
684 const dp: *const sf.type = @ptrCast(@alignCast(sf.default_value_ptr orelse return null));
685 return dp.*;
686 }
687
688 /// This data structure is used by the Zig language code generation and
689 /// therefore must be kept in sync with the compiler implementation.
690 pub const Attributes = struct {
691 @"comptime": bool = false,
692 @"align": ?usize = null,
693 default_value_ptr: ?*const anyopaque = null,
694 };
695 };
696
697 /// This data structure is used by the Zig language code generation and
698 /// therefore must be kept in sync with the compiler implementation.
699 pub const Struct = struct {
700 layout: ContainerLayout,
701 /// Only valid if layout is .@"packed"
702 backing_integer: ?type = null,
703 fields: []const StructField,
704 decls: []const Declaration,
705 is_tuple: bool,
706 };
707
708 /// This data structure is used by the Zig language code generation and
709 /// therefore must be kept in sync with the compiler implementation.
710 pub const Optional = struct {
711 child: type,
712 };
713
714 /// This data structure is used by the Zig language code generation and
715 /// therefore must be kept in sync with the compiler implementation.
716 pub const ErrorUnion = struct {
717 error_set: type,
718 payload: type,
719 };
720
721 /// This data structure is used by the Zig language code generation and
722 /// therefore must be kept in sync with the compiler implementation.
723 pub const Error = struct {
724 name: [:0]const u8,
725 };
726
727 /// This data structure is used by the Zig language code generation and
728 /// therefore must be kept in sync with the compiler implementation.
729 pub const ErrorSet = ?[]const Error;
730
731 /// This data structure is used by the Zig language code generation and
732 /// therefore must be kept in sync with the compiler implementation.
733 pub const EnumField = struct {
734 name: [:0]const u8,
735 value: comptime_int,
736 };
737
738 /// This data structure is used by the Zig language code generation and
739 /// therefore must be kept in sync with the compiler implementation.
740 pub const Enum = struct {
741 tag_type: type,
742 fields: []const EnumField,
743 decls: []const Declaration,
744 is_exhaustive: bool,
745
746 /// This data structure is used by the Zig language code generation and
747 /// therefore must be kept in sync with the compiler implementation.
748 pub const Mode = enum { exhaustive, nonexhaustive };
749 };
750
751 /// This data structure is used by the Zig language code generation and
752 /// therefore must be kept in sync with the compiler implementation.
753 pub const UnionField = struct {
754 name: [:0]const u8,
755 type: type,
756 /// `null` means the field alignment was not explicitly specified. The
757 /// field will still be aligned to at least `@alignOf` its `type`.
758 alignment: ?usize,
759
760 /// This data structure is used by the Zig language code generation and
761 /// therefore must be kept in sync with the compiler implementation.
762 pub const Attributes = struct {
763 @"align": ?usize = null,
764 };
765 };
766
767 /// This data structure is used by the Zig language code generation and
768 /// therefore must be kept in sync with the compiler implementation.
769 pub const Union = struct {
770 layout: ContainerLayout,
771 tag_type: ?type,
772 fields: []const UnionField,
773 decls: []const Declaration,
774 };
775
776 /// This data structure is used by the Zig language code generation and
777 /// therefore must be kept in sync with the compiler implementation.
778 pub const Fn = struct {
779 calling_convention: CallingConvention,
780 is_generic: bool,
781 is_var_args: bool,
782 /// TODO change the language spec to make this not optional.
783 return_type: ?type,
784 params: []const Param,
785
786 /// This data structure is used by the Zig language code generation and
787 /// therefore must be kept in sync with the compiler implementation.
788 pub const Param = struct {
789 is_generic: bool,
790 is_noalias: bool,
791 type: ?type,
792
793 /// This data structure is used by the Zig language code generation and
794 /// therefore must be kept in sync with the compiler implementation.
795 pub const Attributes = struct {
796 @"noalias": bool = false,
797 };
798 };
799
800 /// This data structure is used by the Zig language code generation and
801 /// therefore must be kept in sync with the compiler implementation.
802 pub const Attributes = struct {
803 @"callconv": CallingConvention = .auto,
804 varargs: bool = false,
805 };
806 };
807
808 /// This data structure is used by the Zig language code generation and
809 /// therefore must be kept in sync with the compiler implementation.
810 pub const Opaque = struct {
811 decls: []const Declaration,
812 };
813
814 /// This data structure is used by the Zig language code generation and
815 /// therefore must be kept in sync with the compiler implementation.
816 pub const Frame = struct {
817 function: *const anyopaque,
818 };
819
820 /// This data structure is used by the Zig language code generation and
821 /// therefore must be kept in sync with the compiler implementation.
822 pub const AnyFrame = struct {
823 child: ?type,
824 };
825
826 /// This data structure is used by the Zig language code generation and
827 /// therefore must be kept in sync with the compiler implementation.
828 pub const Vector = struct {
829 len: comptime_int,
830 child: type,
831 };
832
833 /// This data structure is used by the Zig language code generation and
834 /// therefore must be kept in sync with the compiler implementation.
835 pub const Declaration = struct {
836 name: [:0]const u8,
837 };
838};
839
840/// This data structure is used by the Zig language code generation and
841/// therefore must be kept in sync with the compiler implementation.
842pub const FloatMode = enum {
843 strict,
844 optimized,
845};
846
847/// This data structure is used by the Zig language code generation and
848/// therefore must be kept in sync with the compiler implementation.
849pub const Endian = enum {
850 big,
851 little,
852
853 pub const native = builtin.target.cpu.arch.endian();
854 pub const foreign: Endian = @enumFromInt(1 - @intFromEnum(native));
855};
856
857/// This data structure is used by the Zig language code generation and
858/// therefore must be kept in sync with the compiler implementation.
859pub const Signedness = enum(u1) {
860 signed,
861 unsigned,
862};
863
864/// This data structure is used by the Zig language code generation and
865/// therefore must be kept in sync with the compiler implementation.
866pub const OutputMode = enum {
867 Exe,
868 Lib,
869 Obj,
870};
871
872/// This data structure is used by the Zig language code generation and
873/// therefore must be kept in sync with the compiler implementation.
874pub const LinkMode = enum {
875 static,
876 dynamic,
877};
878
879/// This data structure is used by the Zig language code generation and
880/// therefore must be kept in sync with the compiler implementation.
881pub const UnwindTables = enum {
882 none,
883 sync,
884 async,
885};
886
887/// This data structure is used by the Zig language code generation and
888/// therefore must be kept in sync with the compiler implementation.
889pub const WasiExecModel = enum {
890 command,
891 reactor,
892};
893
894/// This data structure is used by the Zig language code generation and
895/// therefore must be kept in sync with the compiler implementation.
896pub const CallModifier = enum {
897 /// Equivalent to function call syntax.
898 auto,
899 /// Prevents tail call optimization. This guarantees that the return
900 /// address will point to the callsite, as opposed to the callsite's
901 /// callsite. If the call is otherwise required to be tail-called
902 /// or inlined, a compile error is emitted instead.
903 never_tail,
904 /// Guarantees that the call will not be inlined. If the call is
905 /// otherwise required to be inlined, a compile error is emitted instead.
906 never_inline,
907 /// Asserts that the function call will not suspend. This allows a
908 /// non-async function to call an async function.
909 no_suspend,
910 /// Guarantees that the call will be generated with tail call optimization.
911 /// If this is not possible, a compile error is emitted instead.
912 always_tail,
913 /// Guarantees that the call will be inlined at the callsite.
914 /// If this is not possible, a compile error is emitted instead.
915 always_inline,
916 /// Evaluates the call at compile-time. If the call cannot be completed at
917 /// compile-time, a compile error is emitted instead.
918 compile_time,
919};
920
921/// This data structure is used by the Zig language code generation and
922/// therefore must be kept in sync with the compiler implementation.
923pub const VaListAarch64 = extern struct {
924 __stack: *anyopaque,
925 __gr_top: *anyopaque,
926 __vr_top: *anyopaque,
927 __gr_offs: c_int,
928 __vr_offs: c_int,
929};
930
931/// This data structure is used by the Zig language code generation and
932/// therefore must be kept in sync with the compiler implementation.
933pub const VaListAlpha = extern struct {
934 __base: *anyopaque,
935 __offset: c_int,
936};
937
938/// This data structure is used by the Zig language code generation and
939/// therefore must be kept in sync with the compiler implementation.
940pub const VaListArm = extern struct {
941 __ap: *anyopaque,
942};
943
944/// This data structure is used by the Zig language code generation and
945/// therefore must be kept in sync with the compiler implementation.
946pub const VaListHexagon = extern struct {
947 __gpr: c_long,
948 __fpr: c_long,
949 __overflow_arg_area: *anyopaque,
950 __reg_save_area: *anyopaque,
951};
952
953/// This data structure is used by the Zig language code generation and
954/// therefore must be kept in sync with the compiler implementation.
955pub const VaListPowerPc = extern struct {
956 gpr: u8,
957 fpr: u8,
958 reserved: c_ushort,
959 overflow_arg_area: *anyopaque,
960 reg_save_area: *anyopaque,
961};
962
963/// This data structure is used by the Zig language code generation and
964/// therefore must be kept in sync with the compiler implementation.
965pub const VaListS390x = extern struct {
966 __current_saved_reg_area_pointer: *anyopaque,
967 __saved_reg_area_end_pointer: *anyopaque,
968 __overflow_area_pointer: *anyopaque,
969};
970
971/// This data structure is used by the Zig language code generation and
972/// therefore must be kept in sync with the compiler implementation.
973pub const VaListSh = extern struct {
974 __va_next_o: *anyopaque,
975 __va_next_o_limit: *anyopaque,
976 __va_next_fp: *anyopaque,
977 __va_next_fp_limit: *anyopaque,
978 __va_next_stack: *anyopaque,
979};
980
981/// This data structure is used by the Zig language code generation and
982/// therefore must be kept in sync with the compiler implementation.
983pub const VaListX86_64 = extern struct {
984 gp_offset: c_uint,
985 fp_offset: c_uint,
986 overflow_arg_area: *anyopaque,
987 reg_save_area: *anyopaque,
988};
989
990/// This data structure is used by the Zig language code generation and
991/// therefore must be kept in sync with the compiler implementation.
992pub const VaListXtensa = extern struct {
993 __va_stk: *c_int,
994 __va_reg: *c_int,
995 __va_ndx: c_int,
996};
997
998/// This data structure is used by the Zig language code generation and
999/// therefore must be kept in sync with the compiler implementation.
1000pub const VaList = switch (builtin.cpu.arch) {
1001 .amdgcn,
1002 .msp430,
1003 .nvptx,
1004 .nvptx64,
1005 .powerpc64,
1006 .powerpc64le,
1007 .x86,
1008 => *u8,
1009 .arc,
1010 .arceb,
1011 .avr,
1012 .bpfel,
1013 .bpfeb,
1014 .csky,
1015 .hppa,
1016 .hppa64,
1017 .kvx,
1018 .lanai,
1019 .loongarch32,
1020 .loongarch64,
1021 .m68k,
1022 .microblaze,
1023 .microblazeel,
1024 .mips,
1025 .mipsel,
1026 .mips64,
1027 .mips64el,
1028 .riscv32,
1029 .riscv32be,
1030 .riscv64,
1031 .riscv64be,
1032 .sparc,
1033 .sparc64,
1034 .spirv32,
1035 .spirv64,
1036 .ve,
1037 .wasm32,
1038 .wasm64,
1039 .xcore,
1040 => *anyopaque,
1041 .aarch64, .aarch64_be => switch (builtin.os.tag) {
1042 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .windows => *u8,
1043 else => switch (builtin.zig_backend) {
1044 else => VaListAarch64,
1045 .stage2_llvm => @compileError("disabled due to miscompilations"),
1046 },
1047 },
1048 .alpha => VaListAlpha,
1049 .arm, .armeb, .thumb, .thumbeb => VaListArm,
1050 .hexagon => if (builtin.target.abi.isMusl()) VaListHexagon else *u8,
1051 .powerpc, .powerpcle => VaListPowerPc,
1052 .s390x => VaListS390x,
1053 .sh, .sheb => VaListSh, // This is wrong for `sh_renesas`: https://github.com/ziglang/zig/issues/24692#issuecomment-3150779829
1054 .x86_64 => switch (builtin.os.tag) {
1055 .uefi, .windows => switch (builtin.zig_backend) {
1056 else => *u8,
1057 .stage2_llvm => @compileError("disabled due to miscompilations"),
1058 },
1059 else => VaListX86_64,
1060 },
1061 .xtensa, .xtensaeb => VaListXtensa,
1062 else => @compileError("VaList not supported for this target yet"),
1063};
1064
1065/// This data structure is used by the Zig language code generation and
1066/// therefore must be kept in sync with the compiler implementation.
1067pub const PrefetchOptions = struct {
1068 /// Whether the prefetch should prepare for a read or a write.
1069 rw: Rw = .read,
1070 /// The data's locality in an inclusive range from 0 to 3.
1071 ///
1072 /// 0 means no temporal locality. That is, the data can be immediately
1073 /// dropped from the cache after it is accessed.
1074 ///
1075 /// 3 means high temporal locality. That is, the data should be kept in
1076 /// the cache as it is likely to be accessed again soon.
1077 locality: u2 = 3,
1078 /// The cache that the prefetch should be performed on.
1079 cache: Cache = .data,
1080
1081 pub const Rw = enum(u1) {
1082 read,
1083 write,
1084 };
1085
1086 pub const Cache = enum(u1) {
1087 instruction,
1088 data,
1089 };
1090};
1091
1092/// This data structure is used by the Zig language code generation and
1093/// therefore must be kept in sync with the compiler implementation.
1094pub const ExportOptions = struct {
1095 name: []const u8,
1096 linkage: GlobalLinkage = .strong,
1097 section: ?[]const u8 = null,
1098 visibility: SymbolVisibility = .default,
1099};
1100
1101/// This data structure is used by the Zig language code generation and
1102/// therefore must be kept in sync with the compiler implementation.
1103pub const ExternOptions = struct {
1104 name: []const u8,
1105 library_name: ?[]const u8 = null,
1106 linkage: GlobalLinkage = .strong,
1107 visibility: SymbolVisibility = .default,
1108 /// Setting this to `true` makes the `@extern` a runtime value.
1109 is_thread_local: bool = false,
1110 is_dll_import: bool = false,
1111 relocation: Relocation = .any,
1112 decoration: ?Decoration = null,
1113
1114 pub const Decoration = union(enum) {
1115 location: u32,
1116 descriptor: Descriptor,
1117
1118 pub const Descriptor = struct {
1119 binding: u32,
1120 set: u32,
1121 };
1122 };
1123
1124 pub const Relocation = enum(u1) {
1125 /// Any type of relocation is allowed.
1126 any,
1127 /// A program-counter-relative relocation is required.
1128 /// Using this value makes the `@extern` a runtime value.
1129 pcrel,
1130 };
1131};
1132
1133/// This data structure is used by the Zig language code generation and
1134/// therefore must be kept in sync with the compiler implementation.
1135pub const BranchHint = enum(u3) {
1136 /// Equivalent to no hint given.
1137 none,
1138 /// This branch of control flow is more likely to be reached than its peers.
1139 /// The optimizer should optimize for reaching it.
1140 likely,
1141 /// This branch of control flow is less likely to be reached than its peers.
1142 /// The optimizer should optimize for not reaching it.
1143 unlikely,
1144 /// This branch of control flow is unlikely to *ever* be reached.
1145 /// The optimizer may place it in a different page of memory to optimize other branches.
1146 cold,
1147 /// It is difficult to predict whether this branch of control flow will be reached.
1148 /// The optimizer should avoid branching behavior with expensive mispredictions.
1149 unpredictable,
1150};
1151
1152/// This enum is set by the compiler and communicates which compiler backend is
1153/// used to produce machine code.
1154/// Think carefully before deciding to observe this value. Nearly all code should
1155/// be agnostic to the backend that implements the language. The use case
1156/// to use this value is to **work around problems with compiler implementations.**
1157///
1158/// Avoid failing the compilation if the compiler backend does not match a
1159/// whitelist of backends; rather one should detect that a known problem would
1160/// occur in a blacklist of backends.
1161///
1162/// The enum is nonexhaustive so that alternate Zig language implementations may
1163/// choose a number as their tag (please use a random number generator rather
1164/// than a "cute" number) and codebases can interact with these values even if
1165/// this upstream enum does not have a name for the number. Of course, upstream
1166/// is happy to accept pull requests to add Zig implementations to this enum.
1167///
1168/// This data structure is part of the Zig language specification.
1169pub const CompilerBackend = enum(u64) {
1170 /// It is allowed for a compiler implementation to not reveal its identity,
1171 /// in which case this value is appropriate. Be cool and make sure your
1172 /// code supports `other` Zig compilers!
1173 other = 0,
1174 /// The original Zig compiler created in 2015 by Andrew Kelley. Implemented
1175 /// in C++. Used LLVM. Deleted from the ZSF ziglang/zig codebase on
1176 /// December 6th, 2022.
1177 stage1 = 1,
1178 /// The reference implementation self-hosted compiler of Zig, using the
1179 /// LLVM backend.
1180 stage2_llvm = 2,
1181 /// The reference implementation self-hosted compiler of Zig, using the
1182 /// backend that generates C source code.
1183 /// Note that one can observe whether the compilation will output C code
1184 /// directly with `object_format` value rather than the `compiler_backend` value.
1185 stage2_c = 3,
1186 /// The reference implementation self-hosted compiler of Zig, using the
1187 /// WebAssembly backend.
1188 stage2_wasm = 4,
1189 /// The reference implementation self-hosted compiler of Zig, using the
1190 /// arm backend.
1191 stage2_arm = 5,
1192 /// The reference implementation self-hosted compiler of Zig, using the
1193 /// x86_64 backend.
1194 stage2_x86_64 = 6,
1195 /// The reference implementation self-hosted compiler of Zig, using the
1196 /// aarch64 backend.
1197 stage2_aarch64 = 7,
1198 /// The reference implementation self-hosted compiler of Zig, using the
1199 /// x86 backend.
1200 stage2_x86 = 8,
1201 /// The reference implementation self-hosted compiler of Zig, using the
1202 /// riscv64 backend.
1203 stage2_riscv64 = 9,
1204 /// The reference implementation self-hosted compiler of Zig, using the
1205 /// sparc64 backend.
1206 stage2_sparc64 = 10,
1207 /// The reference implementation self-hosted compiler of Zig, using the
1208 /// spirv backend.
1209 stage2_spirv = 11,
1210 /// The reference implementation self-hosted compiler of Zig, using the
1211 /// powerpc backend.
1212 stage2_powerpc = 12,
1213
1214 _,
1215};
1216
1217/// This function type is used by the Zig language code generation and
1218/// therefore must be kept in sync with the compiler implementation.
1219pub const TestFn = struct {
1220 name: []const u8,
1221 func: *const fn () anyerror!void,
1222};
1223
1224/// This namespace is used by the Zig compiler to emit various kinds of safety
1225/// panics. These can be overridden by making a public `panic` namespace in the
1226/// root source file.
1227pub const panic: type = p: {
1228 if (@hasDecl(root, "panic")) {
1229 if (@TypeOf(root.panic) != type) {
1230 // Deprecated; make `panic` a namespace instead.
1231 break :p std.debug.FullPanic(struct {
1232 fn panic(msg: []const u8, ra: ?usize) noreturn {
1233 root.panic(msg, @errorReturnTrace(), ra);
1234 }
1235 }.panic);
1236 }
1237 break :p root.panic;
1238 }
1239 break :p switch (builtin.zig_backend) {
1240 .stage2_powerpc,
1241 .stage2_riscv64,
1242 => std.debug.simple_panic,
1243 else => std.debug.FullPanic(std.debug.defaultPanic),
1244 };
1245};
1246
1247pub noinline fn returnError() void {
1248 @branchHint(.unlikely);
1249 @setRuntimeSafety(false);
1250 const st = @errorReturnTrace().?;
1251 if (st.index < st.instruction_addresses.len)
1252 st.instruction_addresses[st.index] = @returnAddress();
1253 st.index += 1;
1254}
lib/std/builtin/assembly.zig deleted-3119
...@@ -1,3119 +0,0 @@
1pub const Clobbers = switch (@import("builtin").cpu.arch) {
2 .x86_16, .x86, .x86_64 => packed struct {
3 /// Whether the inline assembly code may perform stores to memory
4 /// addresses other than those derived from input pointer provenance.
5 memory: bool = false,
6
7 /// Condition codes. Subset of the bits in `eflags` and `rflags`.
8 cc: bool = false,
9 dirflag: bool = false,
10 eflags: bool = false,
11 flags: bool = false,
12 fpcr: bool = false,
13 fpsr: bool = false,
14 mxcsr: bool = false,
15 rflags: bool = false,
16
17 rax: bool = false,
18 rcx: bool = false,
19 rdx: bool = false,
20 rbx: bool = false,
21 rsp: bool = false,
22 rbp: bool = false,
23 rsi: bool = false,
24 rdi: bool = false,
25 r8: bool = false,
26 r9: bool = false,
27 r10: bool = false,
28 r11: bool = false,
29 r12: bool = false,
30 r13: bool = false,
31 r14: bool = false,
32 r15: bool = false,
33 eax: bool = false,
34 ecx: bool = false,
35 edx: bool = false,
36 ebx: bool = false,
37 esp: bool = false,
38 ebp: bool = false,
39 esi: bool = false,
40 edi: bool = false,
41 r8d: bool = false,
42 r9d: bool = false,
43 r10d: bool = false,
44 r11d: bool = false,
45 r12d: bool = false,
46 r13d: bool = false,
47 r14d: bool = false,
48 r15d: bool = false,
49 ax: bool = false,
50 cx: bool = false,
51 dx: bool = false,
52 bx: bool = false,
53 sp: bool = false,
54 bp: bool = false,
55 si: bool = false,
56 di: bool = false,
57 r8w: bool = false,
58 r9w: bool = false,
59 r10w: bool = false,
60 r11w: bool = false,
61 r12w: bool = false,
62 r13w: bool = false,
63 r14w: bool = false,
64 r15w: bool = false,
65 al: bool = false,
66 cl: bool = false,
67 dl: bool = false,
68 bl: bool = false,
69 spl: bool = false,
70 bpl: bool = false,
71 sil: bool = false,
72 dil: bool = false,
73 r8b: bool = false,
74 r9b: bool = false,
75 r10b: bool = false,
76 r11b: bool = false,
77 r12b: bool = false,
78 r13b: bool = false,
79 r14b: bool = false,
80 r15b: bool = false,
81 ah: bool = false,
82 ch: bool = false,
83 dh: bool = false,
84 bh: bool = false,
85 zmm0: bool = false,
86 zmm1: bool = false,
87 zmm2: bool = false,
88 zmm3: bool = false,
89 zmm4: bool = false,
90 zmm5: bool = false,
91 zmm6: bool = false,
92 zmm7: bool = false,
93 zmm8: bool = false,
94 zmm9: bool = false,
95 zmm10: bool = false,
96 zmm11: bool = false,
97 zmm12: bool = false,
98 zmm13: bool = false,
99 zmm14: bool = false,
100 zmm15: bool = false,
101 zmm16: bool = false,
102 zmm17: bool = false,
103 zmm18: bool = false,
104 zmm19: bool = false,
105 zmm20: bool = false,
106 zmm21: bool = false,
107 zmm22: bool = false,
108 zmm23: bool = false,
109 zmm24: bool = false,
110 zmm25: bool = false,
111 zmm26: bool = false,
112 zmm27: bool = false,
113 zmm28: bool = false,
114 zmm29: bool = false,
115 zmm30: bool = false,
116 zmm31: bool = false,
117 ymm0: bool = false,
118 ymm1: bool = false,
119 ymm2: bool = false,
120 ymm3: bool = false,
121 ymm4: bool = false,
122 ymm5: bool = false,
123 ymm6: bool = false,
124 ymm7: bool = false,
125 ymm8: bool = false,
126 ymm9: bool = false,
127 ymm10: bool = false,
128 ymm11: bool = false,
129 ymm12: bool = false,
130 ymm13: bool = false,
131 ymm14: bool = false,
132 ymm15: bool = false,
133 ymm16: bool = false,
134 ymm17: bool = false,
135 ymm18: bool = false,
136 ymm19: bool = false,
137 ymm20: bool = false,
138 ymm21: bool = false,
139 ymm22: bool = false,
140 ymm23: bool = false,
141 ymm24: bool = false,
142 ymm25: bool = false,
143 ymm26: bool = false,
144 ymm27: bool = false,
145 ymm28: bool = false,
146 ymm29: bool = false,
147 ymm30: bool = false,
148 ymm31: bool = false,
149 xmm0: bool = false,
150 xmm1: bool = false,
151 xmm2: bool = false,
152 xmm3: bool = false,
153 xmm4: bool = false,
154 xmm5: bool = false,
155 xmm6: bool = false,
156 xmm7: bool = false,
157 xmm8: bool = false,
158 xmm9: bool = false,
159 xmm10: bool = false,
160 xmm11: bool = false,
161 xmm12: bool = false,
162 xmm13: bool = false,
163 xmm14: bool = false,
164 xmm15: bool = false,
165 xmm16: bool = false,
166 xmm17: bool = false,
167 xmm18: bool = false,
168 xmm19: bool = false,
169 xmm20: bool = false,
170 xmm21: bool = false,
171 xmm22: bool = false,
172 xmm23: bool = false,
173 xmm24: bool = false,
174 xmm25: bool = false,
175 xmm26: bool = false,
176 xmm27: bool = false,
177 xmm28: bool = false,
178 xmm29: bool = false,
179 xmm30: bool = false,
180 xmm31: bool = false,
181 mm0: bool = false,
182 mm1: bool = false,
183 mm2: bool = false,
184 mm3: bool = false,
185 mm4: bool = false,
186 mm5: bool = false,
187 mm6: bool = false,
188 mm7: bool = false,
189 st0: bool = false,
190 st1: bool = false,
191 st2: bool = false,
192 st3: bool = false,
193 st4: bool = false,
194 st5: bool = false,
195 st6: bool = false,
196 st7: bool = false,
197 es: bool = false,
198 cs: bool = false,
199 ss: bool = false,
200 ds: bool = false,
201 fs: bool = false,
202 gs: bool = false,
203 },
204 .aarch64, .aarch64_be => packed struct {
205 /// Whether the inline assembly code may perform stores to memory
206 /// addresses other than those derived from input pointer provenance.
207 memory: bool = false,
208
209 nzcv: bool = false,
210
211 x0: bool = false,
212 x1: bool = false,
213 x2: bool = false,
214 x3: bool = false,
215 x4: bool = false,
216 x5: bool = false,
217 x6: bool = false,
218 x7: bool = false,
219 x8: bool = false,
220 x9: bool = false,
221 x10: bool = false,
222 x11: bool = false,
223 x12: bool = false,
224 x13: bool = false,
225 x14: bool = false,
226 x15: bool = false,
227 x16: bool = false,
228 x17: bool = false,
229 x18: bool = false,
230 x19: bool = false,
231 x20: bool = false,
232 x21: bool = false,
233 x22: bool = false,
234 x23: bool = false,
235 x24: bool = false,
236 x25: bool = false,
237 x26: bool = false,
238 x27: bool = false,
239 x28: bool = false,
240 x29: bool = false,
241 x30: bool = false,
242
243 w0: bool = false,
244 w1: bool = false,
245 w2: bool = false,
246 w3: bool = false,
247 w4: bool = false,
248 w5: bool = false,
249 w6: bool = false,
250 w7: bool = false,
251 w8: bool = false,
252 w9: bool = false,
253 w10: bool = false,
254 w11: bool = false,
255 w12: bool = false,
256 w13: bool = false,
257 w14: bool = false,
258 w15: bool = false,
259 w16: bool = false,
260 w17: bool = false,
261 w18: bool = false,
262 w19: bool = false,
263 w20: bool = false,
264 w21: bool = false,
265 w22: bool = false,
266 w23: bool = false,
267 w24: bool = false,
268 w25: bool = false,
269 w26: bool = false,
270 w27: bool = false,
271 w28: bool = false,
272 w29: bool = false,
273
274 lr: bool = false,
275 sp: bool = false,
276 wsp: bool = false,
277 fpcr: bool = false,
278 fpmr: bool = false,
279 fpsr: bool = false,
280 ffr: bool = false,
281
282 p0: bool = false,
283 p1: bool = false,
284 p2: bool = false,
285 p3: bool = false,
286 p4: bool = false,
287 p5: bool = false,
288 p6: bool = false,
289 p7: bool = false,
290 p8: bool = false,
291 p9: bool = false,
292 p10: bool = false,
293 p11: bool = false,
294 p12: bool = false,
295 p13: bool = false,
296 p14: bool = false,
297 p15: bool = false,
298
299 z0: bool = false,
300 z1: bool = false,
301 z2: bool = false,
302 z3: bool = false,
303 z4: bool = false,
304 z5: bool = false,
305 z6: bool = false,
306 z7: bool = false,
307 z8: bool = false,
308 z9: bool = false,
309 z10: bool = false,
310 z11: bool = false,
311 z12: bool = false,
312 z13: bool = false,
313 z14: bool = false,
314 z15: bool = false,
315 z16: bool = false,
316 z17: bool = false,
317 z18: bool = false,
318 z19: bool = false,
319 z20: bool = false,
320 z21: bool = false,
321 z22: bool = false,
322 z23: bool = false,
323 z24: bool = false,
324 z25: bool = false,
325 z26: bool = false,
326 z27: bool = false,
327 z28: bool = false,
328 z29: bool = false,
329 z30: bool = false,
330 z31: bool = false,
331
332 v0: bool = false,
333 v1: bool = false,
334 v2: bool = false,
335 v3: bool = false,
336 v4: bool = false,
337 v5: bool = false,
338 v6: bool = false,
339 v7: bool = false,
340 v8: bool = false,
341 v9: bool = false,
342 v10: bool = false,
343 v11: bool = false,
344 v12: bool = false,
345 v13: bool = false,
346 v14: bool = false,
347 v15: bool = false,
348 v16: bool = false,
349 v17: bool = false,
350 v18: bool = false,
351 v19: bool = false,
352 v20: bool = false,
353 v21: bool = false,
354 v22: bool = false,
355 v23: bool = false,
356 v24: bool = false,
357 v25: bool = false,
358 v26: bool = false,
359 v27: bool = false,
360 v28: bool = false,
361 v29: bool = false,
362 v30: bool = false,
363 v31: bool = false,
364
365 d0: bool = false,
366 d1: bool = false,
367 d2: bool = false,
368 d3: bool = false,
369 d4: bool = false,
370 d5: bool = false,
371 d6: bool = false,
372 d7: bool = false,
373 d8: bool = false,
374 d9: bool = false,
375 d10: bool = false,
376 d11: bool = false,
377 d12: bool = false,
378 d13: bool = false,
379 d14: bool = false,
380 d15: bool = false,
381 d16: bool = false,
382 d17: bool = false,
383 d18: bool = false,
384 d19: bool = false,
385 d20: bool = false,
386 d21: bool = false,
387 d22: bool = false,
388 d23: bool = false,
389 d24: bool = false,
390 d25: bool = false,
391 d26: bool = false,
392 d27: bool = false,
393 d28: bool = false,
394 d29: bool = false,
395 d30: bool = false,
396 d31: bool = false,
397
398 s0: bool = false,
399 s1: bool = false,
400 s2: bool = false,
401 s3: bool = false,
402 s4: bool = false,
403 s5: bool = false,
404 s6: bool = false,
405 s7: bool = false,
406 s8: bool = false,
407 s9: bool = false,
408 s10: bool = false,
409 s11: bool = false,
410 s12: bool = false,
411 s13: bool = false,
412 s14: bool = false,
413 s15: bool = false,
414 s16: bool = false,
415 s17: bool = false,
416 s18: bool = false,
417 s19: bool = false,
418 s20: bool = false,
419 s21: bool = false,
420 s22: bool = false,
421 s23: bool = false,
422 s24: bool = false,
423 s25: bool = false,
424 s26: bool = false,
425 s27: bool = false,
426 s28: bool = false,
427 s29: bool = false,
428 s30: bool = false,
429 s31: bool = false,
430
431 h0: bool = false,
432 h1: bool = false,
433 h2: bool = false,
434 h3: bool = false,
435 h4: bool = false,
436 h5: bool = false,
437 h6: bool = false,
438 h7: bool = false,
439 h8: bool = false,
440 h9: bool = false,
441 h10: bool = false,
442 h11: bool = false,
443 h12: bool = false,
444 h13: bool = false,
445 h14: bool = false,
446 h15: bool = false,
447 h16: bool = false,
448 h17: bool = false,
449 h18: bool = false,
450 h19: bool = false,
451 h20: bool = false,
452 h21: bool = false,
453 h22: bool = false,
454 h23: bool = false,
455 h24: bool = false,
456 h25: bool = false,
457 h26: bool = false,
458 h27: bool = false,
459 h28: bool = false,
460 h29: bool = false,
461 h30: bool = false,
462 h31: bool = false,
463
464 b0: bool = false,
465 b1: bool = false,
466 b2: bool = false,
467 b3: bool = false,
468 b4: bool = false,
469 b5: bool = false,
470 b6: bool = false,
471 b7: bool = false,
472 b8: bool = false,
473 b9: bool = false,
474 b10: bool = false,
475 b11: bool = false,
476 b12: bool = false,
477 b13: bool = false,
478 b14: bool = false,
479 b15: bool = false,
480 b16: bool = false,
481 b17: bool = false,
482 b18: bool = false,
483 b19: bool = false,
484 b20: bool = false,
485 b21: bool = false,
486 b22: bool = false,
487 b23: bool = false,
488 b24: bool = false,
489 b25: bool = false,
490 b26: bool = false,
491 b27: bool = false,
492 b28: bool = false,
493 b29: bool = false,
494 b30: bool = false,
495 b31: bool = false,
496
497 za0q: bool = false,
498 za1q: bool = false,
499 za2q: bool = false,
500 za3q: bool = false,
501 za4q: bool = false,
502 za5q: bool = false,
503 za6q: bool = false,
504 za7q: bool = false,
505 za8q: bool = false,
506 za9q: bool = false,
507 za10q: bool = false,
508 za11q: bool = false,
509 za12q: bool = false,
510 za13q: bool = false,
511 za14q: bool = false,
512 za15q: bool = false,
513
514 za0d: bool = false,
515 za1d: bool = false,
516 za2d: bool = false,
517 za3d: bool = false,
518 za4d: bool = false,
519 za5d: bool = false,
520 za6d: bool = false,
521 za7d: bool = false,
522
523 za0s: bool = false,
524 za1s: bool = false,
525 za2s: bool = false,
526 za3s: bool = false,
527
528 za0h: bool = false,
529 za1h: bool = false,
530 za0b: bool = false,
531
532 zt0: bool = false,
533 },
534 .arm, .armeb, .thumb, .thumbeb => packed struct {
535 /// Whether the inline assembly code may perform stores to memory
536 /// addresses other than those derived from input pointer provenance.
537 memory: bool = false,
538
539 apsr: bool = false,
540 cpsr: bool = false,
541 spsr: bool = false,
542 r0: bool = false,
543 r1: bool = false,
544 r2: bool = false,
545 r3: bool = false,
546 r4: bool = false,
547 r5: bool = false,
548 r6: bool = false,
549 r7: bool = false,
550 r8: bool = false,
551 r9: bool = false,
552 r10: bool = false,
553 r11: bool = false,
554 r12: bool = false,
555 r13: bool = false,
556 r14: bool = false,
557
558 lr: bool = false,
559 sp: bool = false,
560 fpscr: bool = false,
561 vpr: bool = false,
562
563 d0: bool = false,
564 d1: bool = false,
565 d2: bool = false,
566 d3: bool = false,
567 d4: bool = false,
568 d5: bool = false,
569 d6: bool = false,
570 d7: bool = false,
571 d8: bool = false,
572 d9: bool = false,
573 d10: bool = false,
574 d11: bool = false,
575 d12: bool = false,
576 d13: bool = false,
577 d14: bool = false,
578 d15: bool = false,
579 d16: bool = false,
580 d17: bool = false,
581 d18: bool = false,
582 d19: bool = false,
583 d20: bool = false,
584 d21: bool = false,
585 d22: bool = false,
586 d23: bool = false,
587 d24: bool = false,
588 d25: bool = false,
589 d26: bool = false,
590 d27: bool = false,
591 d28: bool = false,
592 d29: bool = false,
593 d30: bool = false,
594 d31: bool = false,
595
596 s0: bool = false,
597 s1: bool = false,
598 s2: bool = false,
599 s3: bool = false,
600 s4: bool = false,
601 s5: bool = false,
602 s6: bool = false,
603 s7: bool = false,
604 s8: bool = false,
605 s9: bool = false,
606 s10: bool = false,
607 s11: bool = false,
608 s12: bool = false,
609 s13: bool = false,
610 s14: bool = false,
611 s15: bool = false,
612 s16: bool = false,
613 s17: bool = false,
614 s18: bool = false,
615 s19: bool = false,
616 s20: bool = false,
617 s21: bool = false,
618 s22: bool = false,
619 s23: bool = false,
620 s24: bool = false,
621 s25: bool = false,
622 s26: bool = false,
623 s27: bool = false,
624 s28: bool = false,
625 s29: bool = false,
626 s30: bool = false,
627 s31: bool = false,
628
629 q0: bool = false,
630 q1: bool = false,
631 q2: bool = false,
632 q3: bool = false,
633 q4: bool = false,
634 q5: bool = false,
635 q6: bool = false,
636 q7: bool = false,
637 q8: bool = false,
638 q9: bool = false,
639 q10: bool = false,
640 q11: bool = false,
641 q12: bool = false,
642 q13: bool = false,
643 q14: bool = false,
644 q15: bool = false,
645 },
646 .riscv32, .riscv32be, .riscv64, .riscv64be => packed struct {
647 /// Whether the inline assembly code may perform stores to memory
648 /// addresses other than those derived from input pointer provenance.
649 memory: bool = false,
650
651 ssp: bool = false,
652
653 x1: bool = false,
654 x2: bool = false,
655 x3: bool = false,
656 x4: bool = false,
657 x5: bool = false,
658 x6: bool = false,
659 x7: bool = false,
660 x8: bool = false,
661 x9: bool = false,
662 x10: bool = false,
663 x11: bool = false,
664 x12: bool = false,
665 x13: bool = false,
666 x14: bool = false,
667 x15: bool = false,
668 x16: bool = false,
669 x17: bool = false,
670 x18: bool = false,
671 x19: bool = false,
672 x20: bool = false,
673 x21: bool = false,
674 x22: bool = false,
675 x23: bool = false,
676 x24: bool = false,
677 x25: bool = false,
678 x26: bool = false,
679 x27: bool = false,
680 x28: bool = false,
681 x29: bool = false,
682 x30: bool = false,
683 x31: bool = false,
684
685 // ABI aliases for integer registers
686 ra: bool = false,
687 sp: bool = false,
688 gp: bool = false,
689 tp: bool = false,
690 t0: bool = false,
691 t1: bool = false,
692 t2: bool = false,
693 s0: bool = false,
694 fp: bool = false,
695 s1: bool = false,
696 a0: bool = false,
697 a1: bool = false,
698 a2: bool = false,
699 a3: bool = false,
700 a4: bool = false,
701 a5: bool = false,
702 a6: bool = false,
703 a7: bool = false,
704 s2: bool = false,
705 s3: bool = false,
706 s4: bool = false,
707 s5: bool = false,
708 s6: bool = false,
709 s7: bool = false,
710 s8: bool = false,
711 s9: bool = false,
712 s10: bool = false,
713 s11: bool = false,
714 t3: bool = false,
715 t4: bool = false,
716 t5: bool = false,
717 t6: bool = false,
718
719 fflags: bool = false,
720 frm: bool = false,
721
722 f0: bool = false,
723 f1: bool = false,
724 f2: bool = false,
725 f3: bool = false,
726 f4: bool = false,
727 f5: bool = false,
728 f6: bool = false,
729 f7: bool = false,
730 f8: bool = false,
731 f9: bool = false,
732 f10: bool = false,
733 f11: bool = false,
734 f12: bool = false,
735 f13: bool = false,
736 f14: bool = false,
737 f15: bool = false,
738 f16: bool = false,
739 f17: bool = false,
740 f18: bool = false,
741 f19: bool = false,
742 f20: bool = false,
743 f21: bool = false,
744 f22: bool = false,
745 f23: bool = false,
746 f24: bool = false,
747 f25: bool = false,
748 f26: bool = false,
749 f27: bool = false,
750 f28: bool = false,
751 f29: bool = false,
752 f30: bool = false,
753 f31: bool = false,
754
755 // ABI aliases for float registers
756 ft0: bool = false,
757 ft1: bool = false,
758 ft2: bool = false,
759 ft3: bool = false,
760 ft4: bool = false,
761 ft5: bool = false,
762 ft6: bool = false,
763 ft7: bool = false,
764 fs0: bool = false,
765 fs1: bool = false,
766 fa0: bool = false,
767 fa1: bool = false,
768 fa2: bool = false,
769 fa3: bool = false,
770 fa4: bool = false,
771 fa5: bool = false,
772 fa6: bool = false,
773 fa7: bool = false,
774 fs2: bool = false,
775 fs3: bool = false,
776 fs4: bool = false,
777 fs5: bool = false,
778 fs6: bool = false,
779 fs7: bool = false,
780 fs8: bool = false,
781 fs9: bool = false,
782 fs10: bool = false,
783 fs11: bool = false,
784 ft8: bool = false,
785 ft9: bool = false,
786 ft10: bool = false,
787 ft11: bool = false,
788
789 vtype: bool = false,
790 vl: bool = false,
791 vxsat: bool = false,
792 vxrm: bool = false,
793 vcsr: bool = false,
794
795 v0: bool = false,
796 v1: bool = false,
797 v2: bool = false,
798 v3: bool = false,
799 v4: bool = false,
800 v5: bool = false,
801 v6: bool = false,
802 v7: bool = false,
803 v8: bool = false,
804 v9: bool = false,
805 v10: bool = false,
806 v11: bool = false,
807 v12: bool = false,
808 v13: bool = false,
809 v14: bool = false,
810 v15: bool = false,
811 v16: bool = false,
812 v17: bool = false,
813 v18: bool = false,
814 v19: bool = false,
815 v20: bool = false,
816 v21: bool = false,
817 v22: bool = false,
818 v23: bool = false,
819 v24: bool = false,
820 v25: bool = false,
821 v26: bool = false,
822 v27: bool = false,
823 v28: bool = false,
824 v29: bool = false,
825 v30: bool = false,
826 v31: bool = false,
827 },
828 .xcore => packed struct {
829 /// Whether the inline assembly code may perform stores to memory
830 /// addresses other than those derived from input pointer provenance.
831 memory: bool = false,
832
833 r0: bool = false,
834 r1: bool = false,
835 r2: bool = false,
836 r3: bool = false,
837 r4: bool = false,
838 r5: bool = false,
839 r6: bool = false,
840 r7: bool = false,
841 r8: bool = false,
842 r9: bool = false,
843 r10: bool = false,
844 r11: bool = false,
845
846 cp: bool = false,
847 dp: bool = false,
848 sp: bool = false,
849 lr: bool = false,
850 sr: bool = false,
851 },
852 .xtensa, .xtensaeb => packed struct {
853 /// Whether the inline assembly code may perform stores to memory
854 /// addresses other than those derived from input pointer provenance.
855 memory: bool = false,
856
857 sar: bool = false,
858 lbeg: bool = false,
859 lend: bool = false,
860 lcount: bool = false,
861 atomctl: bool = false,
862 scompare1: bool = false,
863 threadptr: bool = false,
864 litbase: bool = false,
865 windowbase: bool = false,
866 windowstart: bool = false,
867 ps: bool = false,
868
869 a0: bool = false,
870 a1: bool = false,
871 a2: bool = false,
872 a3: bool = false,
873 a4: bool = false,
874 a5: bool = false,
875 a6: bool = false,
876 a7: bool = false,
877 a8: bool = false,
878 a9: bool = false,
879 a10: bool = false,
880 a11: bool = false,
881 a12: bool = false,
882 a13: bool = false,
883 a14: bool = false,
884 a15: bool = false,
885
886 br: bool = false,
887 b0: bool = false,
888 b1: bool = false,
889 b2: bool = false,
890 b3: bool = false,
891 b4: bool = false,
892 b5: bool = false,
893 b6: bool = false,
894 b7: bool = false,
895 b8: bool = false,
896 b9: bool = false,
897 b10: bool = false,
898 b11: bool = false,
899 b12: bool = false,
900 b13: bool = false,
901 b14: bool = false,
902 b15: bool = false,
903
904 acchi: bool = false,
905 acclo: bool = false,
906 m0: bool = false,
907 m1: bool = false,
908 m2: bool = false,
909 m3: bool = false,
910 fcr: bool = false,
911 fsr: bool = false,
912
913 f0: bool = false,
914 f1: bool = false,
915 f2: bool = false,
916 f3: bool = false,
917 f4: bool = false,
918 f5: bool = false,
919 f6: bool = false,
920 f7: bool = false,
921 f8: bool = false,
922 f9: bool = false,
923 f10: bool = false,
924 f11: bool = false,
925 f12: bool = false,
926 f13: bool = false,
927 f14: bool = false,
928 f15: bool = false,
929 },
930 .kvx => packed struct {
931 /// Whether the inline assembly code may perform stores to memory
932 /// addresses other than those derived from input pointer provenance.
933 memory: bool = false,
934
935 cs: bool = false,
936
937 ra: bool = false,
938
939 ls: bool = false,
940 le: bool = false,
941 lc: bool = false,
942
943 r0: bool = false,
944 r1: bool = false,
945 r2: bool = false,
946 r3: bool = false,
947 r4: bool = false,
948 r5: bool = false,
949 r6: bool = false,
950 r7: bool = false,
951 r8: bool = false,
952 r9: bool = false,
953 r10: bool = false,
954 r11: bool = false,
955 r12: bool = false,
956 r13: bool = false,
957 r14: bool = false,
958 r15: bool = false,
959 r16: bool = false,
960 r17: bool = false,
961 r18: bool = false,
962 r19: bool = false,
963 r20: bool = false,
964 r21: bool = false,
965 r22: bool = false,
966 r23: bool = false,
967 r24: bool = false,
968 r25: bool = false,
969 r26: bool = false,
970 r27: bool = false,
971 r28: bool = false,
972 r29: bool = false,
973 r30: bool = false,
974 r31: bool = false,
975 r32: bool = false,
976 r33: bool = false,
977 r34: bool = false,
978 r35: bool = false,
979 r36: bool = false,
980 r37: bool = false,
981 r38: bool = false,
982 r39: bool = false,
983 r40: bool = false,
984 r41: bool = false,
985 r42: bool = false,
986 r43: bool = false,
987 r44: bool = false,
988 r45: bool = false,
989 r46: bool = false,
990 r47: bool = false,
991 r48: bool = false,
992 r49: bool = false,
993 r50: bool = false,
994 r51: bool = false,
995 r52: bool = false,
996 r53: bool = false,
997 r54: bool = false,
998 r55: bool = false,
999 r56: bool = false,
1000 r57: bool = false,
1001 r58: bool = false,
1002 r59: bool = false,
1003 r60: bool = false,
1004 r61: bool = false,
1005 r62: bool = false,
1006 r63: bool = false,
1007
1008 a0: bool = false,
1009 a1: bool = false,
1010 a2: bool = false,
1011 a3: bool = false,
1012 a4: bool = false,
1013 a5: bool = false,
1014 a6: bool = false,
1015 a7: bool = false,
1016 a8: bool = false,
1017 a9: bool = false,
1018 a10: bool = false,
1019 a11: bool = false,
1020 a12: bool = false,
1021 a13: bool = false,
1022 a14: bool = false,
1023 a15: bool = false,
1024 a16: bool = false,
1025 a17: bool = false,
1026 a18: bool = false,
1027 a19: bool = false,
1028 a20: bool = false,
1029 a21: bool = false,
1030 a22: bool = false,
1031 a23: bool = false,
1032 a24: bool = false,
1033 a25: bool = false,
1034 a26: bool = false,
1035 a27: bool = false,
1036 a28: bool = false,
1037 a29: bool = false,
1038 a30: bool = false,
1039 a31: bool = false,
1040 a32: bool = false,
1041 a33: bool = false,
1042 a34: bool = false,
1043 a35: bool = false,
1044 a36: bool = false,
1045 a37: bool = false,
1046 a38: bool = false,
1047 a39: bool = false,
1048 a40: bool = false,
1049 a41: bool = false,
1050 a42: bool = false,
1051 a43: bool = false,
1052 a44: bool = false,
1053 a45: bool = false,
1054 a46: bool = false,
1055 a47: bool = false,
1056 a48: bool = false,
1057 a49: bool = false,
1058 a50: bool = false,
1059 a51: bool = false,
1060 a52: bool = false,
1061 a53: bool = false,
1062 a54: bool = false,
1063 a55: bool = false,
1064 a56: bool = false,
1065 a57: bool = false,
1066 a58: bool = false,
1067 a59: bool = false,
1068 a60: bool = false,
1069 a61: bool = false,
1070 a62: bool = false,
1071 a63: bool = false,
1072
1073 a0_lo: bool = false,
1074 a0_hi: bool = false,
1075 a1_lo: bool = false,
1076 a1_hi: bool = false,
1077 a2_lo: bool = false,
1078 a2_hi: bool = false,
1079 a3_lo: bool = false,
1080 a3_hi: bool = false,
1081 a4_lo: bool = false,
1082 a4_hi: bool = false,
1083 a5_lo: bool = false,
1084 a5_hi: bool = false,
1085 a6_lo: bool = false,
1086 a6_hi: bool = false,
1087 a7_lo: bool = false,
1088 a7_hi: bool = false,
1089 a8_lo: bool = false,
1090 a8_hi: bool = false,
1091 a9_lo: bool = false,
1092 a9_hi: bool = false,
1093 a10_lo: bool = false,
1094 a10_hi: bool = false,
1095 a11_lo: bool = false,
1096 a11_hi: bool = false,
1097 a12_lo: bool = false,
1098 a12_hi: bool = false,
1099 a13_lo: bool = false,
1100 a13_hi: bool = false,
1101 a14_lo: bool = false,
1102 a14_hi: bool = false,
1103 a15_lo: bool = false,
1104 a15_hi: bool = false,
1105 a16_lo: bool = false,
1106 a16_hi: bool = false,
1107 a17_lo: bool = false,
1108 a17_hi: bool = false,
1109 a18_lo: bool = false,
1110 a18_hi: bool = false,
1111 a19_lo: bool = false,
1112 a19_hi: bool = false,
1113 a20_lo: bool = false,
1114 a20_hi: bool = false,
1115 a21_lo: bool = false,
1116 a21_hi: bool = false,
1117 a22_lo: bool = false,
1118 a22_hi: bool = false,
1119 a23_lo: bool = false,
1120 a23_hi: bool = false,
1121 a24_lo: bool = false,
1122 a24_hi: bool = false,
1123 a25_lo: bool = false,
1124 a25_hi: bool = false,
1125 a26_lo: bool = false,
1126 a26_hi: bool = false,
1127 a27_lo: bool = false,
1128 a27_hi: bool = false,
1129 a28_lo: bool = false,
1130 a28_hi: bool = false,
1131 a29_lo: bool = false,
1132 a29_hi: bool = false,
1133 a30_lo: bool = false,
1134 a30_hi: bool = false,
1135 a31_lo: bool = false,
1136 a31_hi: bool = false,
1137 a32_lo: bool = false,
1138 a32_hi: bool = false,
1139 a33_lo: bool = false,
1140 a33_hi: bool = false,
1141 a34_lo: bool = false,
1142 a34_hi: bool = false,
1143 a35_lo: bool = false,
1144 a35_hi: bool = false,
1145 a36_lo: bool = false,
1146 a36_hi: bool = false,
1147 a37_lo: bool = false,
1148 a37_hi: bool = false,
1149 a38_lo: bool = false,
1150 a38_hi: bool = false,
1151 a39_lo: bool = false,
1152 a39_hi: bool = false,
1153 a40_lo: bool = false,
1154 a40_hi: bool = false,
1155 a41_lo: bool = false,
1156 a41_hi: bool = false,
1157 a42_lo: bool = false,
1158 a42_hi: bool = false,
1159 a43_lo: bool = false,
1160 a43_hi: bool = false,
1161 a44_lo: bool = false,
1162 a44_hi: bool = false,
1163 a45_lo: bool = false,
1164 a45_hi: bool = false,
1165 a46_lo: bool = false,
1166 a46_hi: bool = false,
1167 a47_lo: bool = false,
1168 a47_hi: bool = false,
1169 a48_lo: bool = false,
1170 a48_hi: bool = false,
1171 a49_lo: bool = false,
1172 a49_hi: bool = false,
1173 a50_lo: bool = false,
1174 a50_hi: bool = false,
1175 a51_lo: bool = false,
1176 a51_hi: bool = false,
1177 a52_lo: bool = false,
1178 a52_hi: bool = false,
1179 a53_lo: bool = false,
1180 a53_hi: bool = false,
1181 a54_lo: bool = false,
1182 a54_hi: bool = false,
1183 a55_lo: bool = false,
1184 a55_hi: bool = false,
1185 a56_lo: bool = false,
1186 a56_hi: bool = false,
1187 a57_lo: bool = false,
1188 a57_hi: bool = false,
1189 a58_lo: bool = false,
1190 a58_hi: bool = false,
1191 a59_lo: bool = false,
1192 a59_hi: bool = false,
1193 a60_lo: bool = false,
1194 a60_hi: bool = false,
1195 a61_lo: bool = false,
1196 a61_hi: bool = false,
1197 a62_lo: bool = false,
1198 a62_hi: bool = false,
1199 a63_lo: bool = false,
1200 a63_hi: bool = false,
1201
1202 a0_x: bool = false,
1203 a0_y: bool = false,
1204 a0_z: bool = false,
1205 a0_t: bool = false,
1206 a1_x: bool = false,
1207 a1_y: bool = false,
1208 a1_z: bool = false,
1209 a1_t: bool = false,
1210 a2_x: bool = false,
1211 a2_y: bool = false,
1212 a2_z: bool = false,
1213 a2_t: bool = false,
1214 a3_x: bool = false,
1215 a3_y: bool = false,
1216 a3_z: bool = false,
1217 a3_t: bool = false,
1218 a4_x: bool = false,
1219 a4_y: bool = false,
1220 a4_z: bool = false,
1221 a4_t: bool = false,
1222 a5_x: bool = false,
1223 a5_y: bool = false,
1224 a5_z: bool = false,
1225 a5_t: bool = false,
1226 a6_x: bool = false,
1227 a6_y: bool = false,
1228 a6_z: bool = false,
1229 a6_t: bool = false,
1230 a7_x: bool = false,
1231 a7_y: bool = false,
1232 a7_z: bool = false,
1233 a7_t: bool = false,
1234 a8_x: bool = false,
1235 a8_y: bool = false,
1236 a8_z: bool = false,
1237 a8_t: bool = false,
1238 a9_x: bool = false,
1239 a9_y: bool = false,
1240 a9_z: bool = false,
1241 a9_t: bool = false,
1242 a10_x: bool = false,
1243 a10_y: bool = false,
1244 a10_z: bool = false,
1245 a10_t: bool = false,
1246 a11_x: bool = false,
1247 a11_y: bool = false,
1248 a11_z: bool = false,
1249 a11_t: bool = false,
1250 a12_x: bool = false,
1251 a12_y: bool = false,
1252 a12_z: bool = false,
1253 a12_t: bool = false,
1254 a13_x: bool = false,
1255 a13_y: bool = false,
1256 a13_z: bool = false,
1257 a13_t: bool = false,
1258 a14_x: bool = false,
1259 a14_y: bool = false,
1260 a14_z: bool = false,
1261 a14_t: bool = false,
1262 a15_x: bool = false,
1263 a15_y: bool = false,
1264 a15_z: bool = false,
1265 a15_t: bool = false,
1266 a16_x: bool = false,
1267 a16_y: bool = false,
1268 a16_z: bool = false,
1269 a16_t: bool = false,
1270 a17_x: bool = false,
1271 a17_y: bool = false,
1272 a17_z: bool = false,
1273 a17_t: bool = false,
1274 a18_x: bool = false,
1275 a18_y: bool = false,
1276 a18_z: bool = false,
1277 a18_t: bool = false,
1278 a19_x: bool = false,
1279 a19_y: bool = false,
1280 a19_z: bool = false,
1281 a19_t: bool = false,
1282 a20_x: bool = false,
1283 a20_y: bool = false,
1284 a20_z: bool = false,
1285 a20_t: bool = false,
1286 a21_x: bool = false,
1287 a21_y: bool = false,
1288 a21_z: bool = false,
1289 a21_t: bool = false,
1290 a22_x: bool = false,
1291 a22_y: bool = false,
1292 a22_z: bool = false,
1293 a22_t: bool = false,
1294 a23_x: bool = false,
1295 a23_y: bool = false,
1296 a23_z: bool = false,
1297 a23_t: bool = false,
1298 a24_x: bool = false,
1299 a24_y: bool = false,
1300 a24_z: bool = false,
1301 a24_t: bool = false,
1302 a25_x: bool = false,
1303 a25_y: bool = false,
1304 a25_z: bool = false,
1305 a25_t: bool = false,
1306 a26_x: bool = false,
1307 a26_y: bool = false,
1308 a26_z: bool = false,
1309 a26_t: bool = false,
1310 a27_x: bool = false,
1311 a27_y: bool = false,
1312 a27_z: bool = false,
1313 a27_t: bool = false,
1314 a28_x: bool = false,
1315 a28_y: bool = false,
1316 a28_z: bool = false,
1317 a28_t: bool = false,
1318 a29_x: bool = false,
1319 a29_y: bool = false,
1320 a29_z: bool = false,
1321 a29_t: bool = false,
1322 a30_x: bool = false,
1323 a30_y: bool = false,
1324 a30_z: bool = false,
1325 a30_t: bool = false,
1326 a31_x: bool = false,
1327 a31_y: bool = false,
1328 a31_z: bool = false,
1329 a31_t: bool = false,
1330 a32_x: bool = false,
1331 a32_y: bool = false,
1332 a32_z: bool = false,
1333 a32_t: bool = false,
1334 a33_x: bool = false,
1335 a33_y: bool = false,
1336 a33_z: bool = false,
1337 a33_t: bool = false,
1338 a34_x: bool = false,
1339 a34_y: bool = false,
1340 a34_z: bool = false,
1341 a34_t: bool = false,
1342 a35_x: bool = false,
1343 a35_y: bool = false,
1344 a35_z: bool = false,
1345 a35_t: bool = false,
1346 a36_x: bool = false,
1347 a36_y: bool = false,
1348 a36_z: bool = false,
1349 a36_t: bool = false,
1350 a37_x: bool = false,
1351 a37_y: bool = false,
1352 a37_z: bool = false,
1353 a37_t: bool = false,
1354 a38_x: bool = false,
1355 a38_y: bool = false,
1356 a38_z: bool = false,
1357 a38_t: bool = false,
1358 a39_x: bool = false,
1359 a39_y: bool = false,
1360 a39_z: bool = false,
1361 a39_t: bool = false,
1362 a40_x: bool = false,
1363 a40_y: bool = false,
1364 a40_z: bool = false,
1365 a40_t: bool = false,
1366 a41_x: bool = false,
1367 a41_y: bool = false,
1368 a41_z: bool = false,
1369 a41_t: bool = false,
1370 a42_x: bool = false,
1371 a42_y: bool = false,
1372 a42_z: bool = false,
1373 a42_t: bool = false,
1374 a43_x: bool = false,
1375 a43_y: bool = false,
1376 a43_z: bool = false,
1377 a43_t: bool = false,
1378 a44_x: bool = false,
1379 a44_y: bool = false,
1380 a44_z: bool = false,
1381 a44_t: bool = false,
1382 a45_x: bool = false,
1383 a45_y: bool = false,
1384 a45_z: bool = false,
1385 a45_t: bool = false,
1386 a46_x: bool = false,
1387 a46_y: bool = false,
1388 a46_z: bool = false,
1389 a46_t: bool = false,
1390 a47_x: bool = false,
1391 a47_y: bool = false,
1392 a47_z: bool = false,
1393 a47_t: bool = false,
1394 a48_x: bool = false,
1395 a48_y: bool = false,
1396 a48_z: bool = false,
1397 a48_t: bool = false,
1398 a49_x: bool = false,
1399 a49_y: bool = false,
1400 a49_z: bool = false,
1401 a49_t: bool = false,
1402 a50_x: bool = false,
1403 a50_y: bool = false,
1404 a50_z: bool = false,
1405 a50_t: bool = false,
1406 a51_x: bool = false,
1407 a51_y: bool = false,
1408 a51_z: bool = false,
1409 a51_t: bool = false,
1410 a52_x: bool = false,
1411 a52_y: bool = false,
1412 a52_z: bool = false,
1413 a52_t: bool = false,
1414 a53_x: bool = false,
1415 a53_y: bool = false,
1416 a53_z: bool = false,
1417 a53_t: bool = false,
1418 a54_x: bool = false,
1419 a54_y: bool = false,
1420 a54_z: bool = false,
1421 a54_t: bool = false,
1422 a55_x: bool = false,
1423 a55_y: bool = false,
1424 a55_z: bool = false,
1425 a55_t: bool = false,
1426 a56_x: bool = false,
1427 a56_y: bool = false,
1428 a56_z: bool = false,
1429 a56_t: bool = false,
1430 a57_x: bool = false,
1431 a57_y: bool = false,
1432 a57_z: bool = false,
1433 a57_t: bool = false,
1434 a58_x: bool = false,
1435 a58_y: bool = false,
1436 a58_z: bool = false,
1437 a58_t: bool = false,
1438 a59_x: bool = false,
1439 a59_y: bool = false,
1440 a59_z: bool = false,
1441 a59_t: bool = false,
1442 a60_x: bool = false,
1443 a60_y: bool = false,
1444 a60_z: bool = false,
1445 a60_t: bool = false,
1446 a61_x: bool = false,
1447 a61_y: bool = false,
1448 a61_z: bool = false,
1449 a61_t: bool = false,
1450 a62_x: bool = false,
1451 a62_y: bool = false,
1452 a62_z: bool = false,
1453 a62_t: bool = false,
1454 a63_x: bool = false,
1455 a63_y: bool = false,
1456 a63_z: bool = false,
1457 a63_t: bool = false,
1458 },
1459 .lanai => packed struct {
1460 /// Whether the inline assembly code may perform stores to memory
1461 /// addresses other than those derived from input pointer provenance.
1462 memory: bool = false,
1463 /// Condition flags which aren't accessible outside of conditional execution.
1464 sw: bool = false,
1465
1466 r3: bool = false,
1467 r4: bool = false,
1468 r5: bool = false,
1469 r6: bool = false,
1470 r7: bool = false,
1471 r8: bool = false,
1472 r9: bool = false,
1473 r10: bool = false,
1474 r11: bool = false,
1475 r12: bool = false,
1476 r13: bool = false,
1477 r14: bool = false,
1478 r15: bool = false,
1479 r16: bool = false,
1480 r17: bool = false,
1481 r18: bool = false,
1482 r19: bool = false,
1483 r20: bool = false,
1484 r21: bool = false,
1485 r22: bool = false,
1486 r23: bool = false,
1487 r24: bool = false,
1488 r25: bool = false,
1489 r26: bool = false,
1490 r27: bool = false,
1491 r28: bool = false,
1492 r29: bool = false,
1493 r30: bool = false,
1494 r31: bool = false,
1495 },
1496 .avr => packed struct {
1497 /// Whether the inline assembly code may perform stores to memory
1498 /// addresses other than those derived from input pointer provenance.
1499 memory: bool = false,
1500 flags: bool = false,
1501 r0: bool = false,
1502 r1: bool = false,
1503 r2: bool = false,
1504 r3: bool = false,
1505 r4: bool = false,
1506 r5: bool = false,
1507 r6: bool = false,
1508 r7: bool = false,
1509 r8: bool = false,
1510 r9: bool = false,
1511 r10: bool = false,
1512 r11: bool = false,
1513 r12: bool = false,
1514 r13: bool = false,
1515 r14: bool = false,
1516 r15: bool = false,
1517 r16: bool = false,
1518 r17: bool = false,
1519 r18: bool = false,
1520 r19: bool = false,
1521 r20: bool = false,
1522 r21: bool = false,
1523 r22: bool = false,
1524 r23: bool = false,
1525 r24: bool = false,
1526 r25: bool = false,
1527 r26: bool = false,
1528 r27: bool = false,
1529 r28: bool = false,
1530 r29: bool = false,
1531 r30: bool = false,
1532 r31: bool = false,
1533 },
1534 .msp430 => packed struct {
1535 /// Whether the inline assembly code may perform stores to memory
1536 /// addresses other than those derived from input pointer provenance.
1537 memory: bool = false,
1538
1539 r0: bool = false,
1540 r1: bool = false,
1541 r2: bool = false,
1542
1543 r4: bool = false,
1544 r5: bool = false,
1545 r6: bool = false,
1546 r7: bool = false,
1547 r8: bool = false,
1548 r9: bool = false,
1549 r10: bool = false,
1550 r11: bool = false,
1551 r12: bool = false,
1552 r13: bool = false,
1553 r14: bool = false,
1554 r15: bool = false,
1555 },
1556 .m68k => packed struct {
1557 /// Whether the inline assembly code may perform stores to memory
1558 /// addresses other than those derived from input pointer provenance.
1559 memory: bool = false,
1560
1561 ccr: bool = false,
1562
1563 d0: bool = false,
1564 d1: bool = false,
1565 d2: bool = false,
1566 d3: bool = false,
1567 d4: bool = false,
1568 d5: bool = false,
1569 d6: bool = false,
1570 d7: bool = false,
1571
1572 a0: bool = false,
1573 a1: bool = false,
1574 a2: bool = false,
1575 a3: bool = false,
1576 a4: bool = false,
1577 a5: bool = false,
1578 a6: bool = false,
1579 a7: bool = false,
1580
1581 macsr: bool = false,
1582 acc: bool = false,
1583 acc0: bool = false,
1584 acc1: bool = false,
1585 acc2: bool = false,
1586 acc3: bool = false,
1587
1588 mask: bool = false,
1589 fpcr: bool = false,
1590 fpsr: bool = false,
1591
1592 fp0: bool = false,
1593 fp1: bool = false,
1594 fp2: bool = false,
1595 fp3: bool = false,
1596 fp4: bool = false,
1597 fp5: bool = false,
1598 fp6: bool = false,
1599 fp7: bool = false,
1600 },
1601 .sparc, .sparc64 => packed struct {
1602 /// Whether the inline assembly code may perform stores to memory
1603 /// addresses other than those derived from input pointer provenance.
1604 memory: bool = false,
1605
1606 psr: bool = false,
1607 gsr: bool = false,
1608 y: bool = false,
1609
1610 /// asr2; v9+
1611 ccr: bool = false,
1612 /// Lower bits of `ccr`.
1613 icc: bool = false,
1614 /// Upper bits of `ccr`.
1615 xcc: bool = false,
1616
1617 g1: bool = false,
1618 g2: bool = false,
1619 g3: bool = false,
1620 g4: bool = false,
1621 g5: bool = false,
1622 g6: bool = false,
1623 g7: bool = false,
1624
1625 o0: bool = false,
1626 o1: bool = false,
1627 o2: bool = false,
1628 o3: bool = false,
1629 o4: bool = false,
1630 o5: bool = false,
1631 o6: bool = false,
1632 o7: bool = false,
1633
1634 l0: bool = false,
1635 l1: bool = false,
1636 l2: bool = false,
1637 l3: bool = false,
1638 l4: bool = false,
1639 l5: bool = false,
1640 l6: bool = false,
1641 l7: bool = false,
1642
1643 i0: bool = false,
1644 i1: bool = false,
1645 i2: bool = false,
1646 i3: bool = false,
1647 i4: bool = false,
1648 i5: bool = false,
1649 i6: bool = false,
1650 i7: bool = false,
1651
1652 fsr: bool = false,
1653 fprs: bool = false,
1654
1655 q0: bool = false,
1656 q1: bool = false,
1657 q2: bool = false,
1658 q3: bool = false,
1659 q4: bool = false,
1660 q5: bool = false,
1661 q6: bool = false,
1662 q7: bool = false,
1663 q8: bool = false,
1664 q9: bool = false,
1665 q10: bool = false,
1666 q11: bool = false,
1667 q12: bool = false,
1668 q13: bool = false,
1669 q14: bool = false,
1670 q15: bool = false,
1671 },
1672 .bpfel, .bpfeb => packed struct {
1673 /// Whether the inline assembly code may perform stores to memory
1674 /// addresses other than those derived from input pointer provenance.
1675 memory: bool = false,
1676
1677 r0: bool = false,
1678 r1: bool = false,
1679 r2: bool = false,
1680 r3: bool = false,
1681 r4: bool = false,
1682 r5: bool = false,
1683 r6: bool = false,
1684 r7: bool = false,
1685 r8: bool = false,
1686 r9: bool = false,
1687
1688 w0: bool = false,
1689 w1: bool = false,
1690 w2: bool = false,
1691 w3: bool = false,
1692 w4: bool = false,
1693 w5: bool = false,
1694 w6: bool = false,
1695 w7: bool = false,
1696 w8: bool = false,
1697 w9: bool = false,
1698 },
1699 .hexagon => packed struct {
1700 /// Whether the inline assembly code may perform stores to memory
1701 /// addresses other than those derived from input pointer provenance.
1702 memory: bool = false,
1703
1704 sa0: bool = false,
1705 sa1: bool = false,
1706 lc0: bool = false,
1707 lc1: bool = false,
1708 m0: bool = false,
1709 m1: bool = false,
1710 usr: bool = false,
1711 ugp: bool = false,
1712 gp: bool = false,
1713 cs0: bool = false,
1714 cs1: bool = false,
1715 framelimit: bool = false,
1716 framekey: bool = false,
1717
1718 p0: bool = false,
1719 p1: bool = false,
1720 p2: bool = false,
1721 p3: bool = false,
1722
1723 r0: bool = false,
1724 r1: bool = false,
1725 r2: bool = false,
1726 r3: bool = false,
1727 r4: bool = false,
1728 r5: bool = false,
1729 r6: bool = false,
1730 r7: bool = false,
1731 r8: bool = false,
1732 r9: bool = false,
1733 r10: bool = false,
1734 r11: bool = false,
1735 r12: bool = false,
1736 r13: bool = false,
1737 r14: bool = false,
1738 r15: bool = false,
1739 r16: bool = false,
1740 r17: bool = false,
1741 r18: bool = false,
1742 r19: bool = false,
1743 r20: bool = false,
1744 r21: bool = false,
1745 r22: bool = false,
1746 r23: bool = false,
1747 r24: bool = false,
1748 r25: bool = false,
1749 r26: bool = false,
1750 r27: bool = false,
1751 r28: bool = false,
1752 r29: bool = false,
1753 r30: bool = false,
1754 r31: bool = false,
1755
1756 q0: bool = false,
1757 q1: bool = false,
1758 q2: bool = false,
1759 q3: bool = false,
1760
1761 v0: bool = false,
1762 v1: bool = false,
1763 v2: bool = false,
1764 v3: bool = false,
1765 v4: bool = false,
1766 v5: bool = false,
1767 v6: bool = false,
1768 v7: bool = false,
1769 v8: bool = false,
1770 v9: bool = false,
1771 v10: bool = false,
1772 v11: bool = false,
1773 v12: bool = false,
1774 v13: bool = false,
1775 v14: bool = false,
1776 v15: bool = false,
1777 v16: bool = false,
1778 v17: bool = false,
1779 v18: bool = false,
1780 v19: bool = false,
1781 v20: bool = false,
1782 v21: bool = false,
1783 v22: bool = false,
1784 v23: bool = false,
1785 v24: bool = false,
1786 v25: bool = false,
1787 v26: bool = false,
1788 v27: bool = false,
1789 v28: bool = false,
1790 v29: bool = false,
1791 v30: bool = false,
1792 v31: bool = false,
1793 },
1794 .s390x => packed struct {
1795 /// Whether the inline assembly code may perform stores to memory
1796 /// addresses other than those derived from input pointer provenance.
1797 memory: bool = false,
1798
1799 ps: bool = false,
1800 r0: bool = false,
1801 r1: bool = false,
1802 r2: bool = false,
1803 r3: bool = false,
1804 r4: bool = false,
1805 r5: bool = false,
1806 r6: bool = false,
1807 r7: bool = false,
1808 r8: bool = false,
1809 r9: bool = false,
1810 r10: bool = false,
1811 r11: bool = false,
1812 r12: bool = false,
1813 r13: bool = false,
1814 r14: bool = false,
1815 r15: bool = false,
1816
1817 fpc: bool = false,
1818
1819 v0: bool = false,
1820 v1: bool = false,
1821 v2: bool = false,
1822 v3: bool = false,
1823 v4: bool = false,
1824 v5: bool = false,
1825 v6: bool = false,
1826 v7: bool = false,
1827 v8: bool = false,
1828 v9: bool = false,
1829 v10: bool = false,
1830 v11: bool = false,
1831 v12: bool = false,
1832 v13: bool = false,
1833 v14: bool = false,
1834 v15: bool = false,
1835 v16: bool = false,
1836 v17: bool = false,
1837 v18: bool = false,
1838 v19: bool = false,
1839 v20: bool = false,
1840 v21: bool = false,
1841 v22: bool = false,
1842 v23: bool = false,
1843 v24: bool = false,
1844 v25: bool = false,
1845 v26: bool = false,
1846 v27: bool = false,
1847 v28: bool = false,
1848 v29: bool = false,
1849 v30: bool = false,
1850 v31: bool = false,
1851
1852 f0: bool = false,
1853 f1: bool = false,
1854 f2: bool = false,
1855 f3: bool = false,
1856 f4: bool = false,
1857 f5: bool = false,
1858 f6: bool = false,
1859 f7: bool = false,
1860 f8: bool = false,
1861 f9: bool = false,
1862 f10: bool = false,
1863 f11: bool = false,
1864 f12: bool = false,
1865 f13: bool = false,
1866 f14: bool = false,
1867 f15: bool = false,
1868 },
1869 .ve => packed struct {
1870 /// Whether the inline assembly code may perform stores to memory
1871 /// addresses other than those derived from input pointer provenance.
1872 memory: bool = false,
1873
1874 psw: bool = false,
1875
1876 s0: bool = false,
1877 s1: bool = false,
1878 s2: bool = false,
1879 s3: bool = false,
1880 s4: bool = false,
1881 s5: bool = false,
1882 s6: bool = false,
1883 s7: bool = false,
1884 s8: bool = false,
1885 s9: bool = false,
1886 s10: bool = false,
1887 s11: bool = false,
1888 s12: bool = false,
1889 s13: bool = false,
1890 s14: bool = false,
1891 s15: bool = false,
1892 s16: bool = false,
1893 s17: bool = false,
1894 s18: bool = false,
1895 s19: bool = false,
1896 s20: bool = false,
1897 s21: bool = false,
1898 s22: bool = false,
1899 s23: bool = false,
1900 s24: bool = false,
1901 s25: bool = false,
1902 s26: bool = false,
1903 s27: bool = false,
1904 s28: bool = false,
1905 s29: bool = false,
1906 s30: bool = false,
1907 s31: bool = false,
1908 s32: bool = false,
1909 s33: bool = false,
1910 s34: bool = false,
1911 s35: bool = false,
1912 s36: bool = false,
1913 s37: bool = false,
1914 s38: bool = false,
1915 s39: bool = false,
1916 s40: bool = false,
1917 s41: bool = false,
1918 s42: bool = false,
1919 s43: bool = false,
1920 s44: bool = false,
1921 s45: bool = false,
1922 s46: bool = false,
1923 s47: bool = false,
1924 s48: bool = false,
1925 s49: bool = false,
1926 s50: bool = false,
1927 s51: bool = false,
1928 s52: bool = false,
1929 s53: bool = false,
1930 s54: bool = false,
1931 s55: bool = false,
1932 s56: bool = false,
1933 s57: bool = false,
1934 s58: bool = false,
1935 s59: bool = false,
1936 s60: bool = false,
1937 s61: bool = false,
1938 s62: bool = false,
1939 s63: bool = false,
1940
1941 vixr: bool = false,
1942 vl: bool = false,
1943
1944 vm0: bool = false,
1945 vm1: bool = false,
1946 vm2: bool = false,
1947 vm3: bool = false,
1948 vm4: bool = false,
1949 vm5: bool = false,
1950 vm6: bool = false,
1951 vm7: bool = false,
1952 vm8: bool = false,
1953 vm9: bool = false,
1954 vm10: bool = false,
1955 vm11: bool = false,
1956 vm12: bool = false,
1957 vm13: bool = false,
1958 vm14: bool = false,
1959 vm15: bool = false,
1960
1961 v0: bool = false,
1962 v1: bool = false,
1963 v2: bool = false,
1964 v3: bool = false,
1965 v4: bool = false,
1966 v5: bool = false,
1967 v6: bool = false,
1968 v7: bool = false,
1969 v8: bool = false,
1970 v9: bool = false,
1971 v10: bool = false,
1972 v11: bool = false,
1973 v12: bool = false,
1974 v13: bool = false,
1975 v14: bool = false,
1976 v15: bool = false,
1977 v16: bool = false,
1978 v17: bool = false,
1979 v18: bool = false,
1980 v19: bool = false,
1981 v20: bool = false,
1982 v21: bool = false,
1983 v22: bool = false,
1984 v23: bool = false,
1985 v24: bool = false,
1986 v25: bool = false,
1987 v26: bool = false,
1988 v27: bool = false,
1989 v28: bool = false,
1990 v29: bool = false,
1991 v30: bool = false,
1992 v31: bool = false,
1993 v32: bool = false,
1994 v33: bool = false,
1995 v34: bool = false,
1996 v35: bool = false,
1997 v36: bool = false,
1998 v37: bool = false,
1999 v38: bool = false,
2000 v39: bool = false,
2001 v40: bool = false,
2002 v41: bool = false,
2003 v42: bool = false,
2004 v43: bool = false,
2005 v44: bool = false,
2006 v45: bool = false,
2007 v46: bool = false,
2008 v47: bool = false,
2009 v48: bool = false,
2010 v49: bool = false,
2011 v50: bool = false,
2012 v51: bool = false,
2013 v52: bool = false,
2014 v53: bool = false,
2015 v54: bool = false,
2016 v55: bool = false,
2017 v56: bool = false,
2018 v57: bool = false,
2019 v58: bool = false,
2020 v59: bool = false,
2021 v60: bool = false,
2022 v61: bool = false,
2023 v62: bool = false,
2024 v63: bool = false,
2025 },
2026 .kalimba => packed struct {
2027 /// Whether the inline assembly code may perform stores to memory
2028 /// addresses other than those derived from input pointer provenance.
2029 memory: bool = false,
2030
2031 i0: bool = false,
2032 i1: bool = false,
2033 i2: bool = false,
2034 i3: bool = false,
2035 i4: bool = false,
2036 i5: bool = false,
2037 i6: bool = false,
2038 i7: bool = false,
2039
2040 m0: bool = false,
2041 m1: bool = false,
2042 m2: bool = false,
2043 m3: bool = false,
2044 l0: bool = false,
2045 l1: bool = false,
2046 l2: bool = false,
2047 l3: bool = false,
2048 l4: bool = false,
2049 l5: bool = false,
2050 doloopstart: bool = false,
2051 doloopend: bool = false,
2052 divresult: bool = false,
2053 divremainder: bool = false,
2054 rmac: bool = false,
2055 rmac0: bool = false,
2056 rmac1: bool = false,
2057 rmac2: bool = false,
2058 rlink: bool = false,
2059 rflags: bool = false,
2060 r0: bool = false,
2061 r1: bool = false,
2062 r2: bool = false,
2063 r3: bool = false,
2064 r4: bool = false,
2065 r5: bool = false,
2066 r6: bool = false,
2067 r7: bool = false,
2068 r8: bool = false,
2069 r9: bool = false,
2070 r10: bool = false,
2071 },
2072 .or1k => packed struct {
2073 /// Whether the inline assembly code may perform stores to memory
2074 /// addresses other than those derived from input pointer provenance.
2075 memory: bool = false,
2076
2077 maclo: bool = false,
2078 machi: bool = false,
2079 fpcsr: bool = false,
2080 fpmaddlo: bool = false,
2081 fpmaddhi: bool = false,
2082 vmaclo: bool = false,
2083 vmachi: bool = false,
2084
2085 r0: bool = false,
2086 r1: bool = false,
2087 r2: bool = false,
2088 r3: bool = false,
2089 r4: bool = false,
2090 r5: bool = false,
2091 r6: bool = false,
2092 r7: bool = false,
2093 r8: bool = false,
2094 r9: bool = false,
2095 r10: bool = false,
2096 r11: bool = false,
2097 r12: bool = false,
2098 r13: bool = false,
2099 r14: bool = false,
2100 r15: bool = false,
2101 r16: bool = false,
2102 r17: bool = false,
2103 r18: bool = false,
2104 r19: bool = false,
2105 r20: bool = false,
2106 r21: bool = false,
2107 r22: bool = false,
2108 r23: bool = false,
2109 r24: bool = false,
2110 r25: bool = false,
2111 r26: bool = false,
2112 r27: bool = false,
2113 r28: bool = false,
2114 r29: bool = false,
2115 r30: bool = false,
2116 r31: bool = false,
2117 },
2118 .csky => packed struct {
2119 /// Whether the inline assembly code may perform stores to memory
2120 /// addresses other than those derived from input pointer provenance.
2121 memory: bool = false,
2122
2123 psr: bool = false,
2124 hi: bool = false,
2125 lo: bool = false,
2126
2127 r0: bool = false,
2128 r1: bool = false,
2129 r2: bool = false,
2130 r3: bool = false,
2131 r4: bool = false,
2132 r5: bool = false,
2133 r6: bool = false,
2134 r7: bool = false,
2135 r8: bool = false,
2136 r9: bool = false,
2137 r10: bool = false,
2138 r11: bool = false,
2139 r12: bool = false,
2140 r13: bool = false,
2141 r14: bool = false,
2142 r15: bool = false,
2143 r16: bool = false,
2144 r17: bool = false,
2145 r18: bool = false,
2146 r19: bool = false,
2147 r20: bool = false,
2148 r21: bool = false,
2149 r22: bool = false,
2150 r23: bool = false,
2151 r24: bool = false,
2152 r25: bool = false,
2153 r26: bool = false,
2154 r27: bool = false,
2155 r28: bool = false,
2156 r29: bool = false,
2157 r30: bool = false,
2158 r31: bool = false,
2159
2160 vr0: bool = false,
2161 vr1: bool = false,
2162 vr2: bool = false,
2163 vr3: bool = false,
2164 vr4: bool = false,
2165 vr5: bool = false,
2166 vr6: bool = false,
2167 vr7: bool = false,
2168 vr8: bool = false,
2169 vr9: bool = false,
2170 vr10: bool = false,
2171 vr11: bool = false,
2172 vr12: bool = false,
2173 vr13: bool = false,
2174 vr14: bool = false,
2175 vr15: bool = false,
2176 vr16: bool = false,
2177 vr17: bool = false,
2178 vr18: bool = false,
2179 vr19: bool = false,
2180 vr20: bool = false,
2181 vr21: bool = false,
2182 vr22: bool = false,
2183 vr23: bool = false,
2184 vr24: bool = false,
2185 vr25: bool = false,
2186 vr26: bool = false,
2187 vr27: bool = false,
2188 vr28: bool = false,
2189 vr29: bool = false,
2190 vr30: bool = false,
2191 vr31: bool = false,
2192 },
2193 .arc, .arceb => packed struct {
2194 /// Whether the inline assembly code may perform stores to memory
2195 /// addresses other than those derived from input pointer provenance.
2196 memory: bool = false,
2197
2198 status32: bool = false,
2199 aux_macmode: bool = false,
2200 mulhi: bool = false,
2201 lp_start: bool = false,
2202 lp_end: bool = false,
2203 jli_base: bool = false,
2204 ldi_base: bool = false,
2205 ei_base: bool = false,
2206
2207 r0: bool = false,
2208 r1: bool = false,
2209 r2: bool = false,
2210 r3: bool = false,
2211 r4: bool = false,
2212 r5: bool = false,
2213 r6: bool = false,
2214 r7: bool = false,
2215 r8: bool = false,
2216 r9: bool = false,
2217 r10: bool = false,
2218 r11: bool = false,
2219 r12: bool = false,
2220 r13: bool = false,
2221 r14: bool = false,
2222 r15: bool = false,
2223 r16: bool = false,
2224 r17: bool = false,
2225 r18: bool = false,
2226 r19: bool = false,
2227 r20: bool = false,
2228 r21: bool = false,
2229 r22: bool = false,
2230 r23: bool = false,
2231 r24: bool = false,
2232 r25: bool = false,
2233 r26: bool = false,
2234 r27: bool = false,
2235 r28: bool = false,
2236 r29: bool = false,
2237 r30: bool = false,
2238 r31: bool = false,
2239 r32: bool = false,
2240 r33: bool = false,
2241 r34: bool = false,
2242 r35: bool = false,
2243 r36: bool = false,
2244 r37: bool = false,
2245 r38: bool = false,
2246 r39: bool = false,
2247 r40: bool = false,
2248 r41: bool = false,
2249 r42: bool = false,
2250 r43: bool = false,
2251 r44: bool = false,
2252 r45: bool = false,
2253 r46: bool = false,
2254 r47: bool = false,
2255 r48: bool = false,
2256 r49: bool = false,
2257 r50: bool = false,
2258 r51: bool = false,
2259 r52: bool = false,
2260 r53: bool = false,
2261 r54: bool = false,
2262 r55: bool = false,
2263 r56: bool = false,
2264 r57: bool = false,
2265 r58: bool = false,
2266 r59: bool = false,
2267 r60: bool = false,
2268
2269 fmp_ctrl: bool = false,
2270 dsp_ctrl: bool = false,
2271 acc0_lo: bool = false,
2272 acc0_glo: bool = false,
2273 acc0_hi: bool = false,
2274 acc0_ghi: bool = false,
2275 fp_ctrl: bool = false,
2276 fpu_status: bool = false,
2277 vfpu_status: bool = false,
2278
2279 f0: bool = false,
2280 f1: bool = false,
2281 f2: bool = false,
2282 f3: bool = false,
2283 f4: bool = false,
2284 f5: bool = false,
2285 f6: bool = false,
2286 f7: bool = false,
2287 f8: bool = false,
2288 f9: bool = false,
2289 f10: bool = false,
2290 f11: bool = false,
2291 f12: bool = false,
2292 f13: bool = false,
2293 f14: bool = false,
2294 f15: bool = false,
2295 f16: bool = false,
2296 f17: bool = false,
2297 f18: bool = false,
2298 f19: bool = false,
2299 f20: bool = false,
2300 f21: bool = false,
2301 f22: bool = false,
2302 f23: bool = false,
2303 f24: bool = false,
2304 f25: bool = false,
2305 f26: bool = false,
2306 f27: bool = false,
2307 f28: bool = false,
2308 f29: bool = false,
2309 f30: bool = false,
2310 f31: bool = false,
2311 },
2312 .loongarch32, .loongarch64 => packed struct {
2313 /// Whether the inline assembly code may perform stores to memory
2314 /// addresses other than those derived from input pointer provenance.
2315 memory: bool = false,
2316
2317 r1: bool = false,
2318 r2: bool = false,
2319 r3: bool = false,
2320 r4: bool = false,
2321 r5: bool = false,
2322 r6: bool = false,
2323 r7: bool = false,
2324 r8: bool = false,
2325 r9: bool = false,
2326 r10: bool = false,
2327 r11: bool = false,
2328 r12: bool = false,
2329 r13: bool = false,
2330 r14: bool = false,
2331 r15: bool = false,
2332 r16: bool = false,
2333 r17: bool = false,
2334 r18: bool = false,
2335 r19: bool = false,
2336 r20: bool = false,
2337 r21: bool = false,
2338 r22: bool = false,
2339 r23: bool = false,
2340 r24: bool = false,
2341 r25: bool = false,
2342 r26: bool = false,
2343 r27: bool = false,
2344 r28: bool = false,
2345 r29: bool = false,
2346 r30: bool = false,
2347 r31: bool = false,
2348
2349 fcc0: bool = false,
2350 fcc1: bool = false,
2351 fcc2: bool = false,
2352 fcc3: bool = false,
2353 fcc4: bool = false,
2354 fcc5: bool = false,
2355 fcc6: bool = false,
2356 fcc7: bool = false,
2357
2358 fcsr0: bool = false,
2359 fcsr1: bool = false,
2360 fcsr2: bool = false,
2361 fcsr3: bool = false,
2362
2363 xr0: bool = false,
2364 xr1: bool = false,
2365 xr2: bool = false,
2366 xr3: bool = false,
2367 xr4: bool = false,
2368 xr5: bool = false,
2369 xr6: bool = false,
2370 xr7: bool = false,
2371 xr8: bool = false,
2372 xr9: bool = false,
2373 xr10: bool = false,
2374 xr11: bool = false,
2375 xr12: bool = false,
2376 xr13: bool = false,
2377 xr14: bool = false,
2378 xr15: bool = false,
2379 xr16: bool = false,
2380 xr17: bool = false,
2381 xr18: bool = false,
2382 xr19: bool = false,
2383 xr20: bool = false,
2384 xr21: bool = false,
2385 xr22: bool = false,
2386 xr23: bool = false,
2387 xr24: bool = false,
2388 xr25: bool = false,
2389 xr26: bool = false,
2390 xr27: bool = false,
2391 xr28: bool = false,
2392 xr29: bool = false,
2393 xr30: bool = false,
2394 xr31: bool = false,
2395
2396 vr0: bool = false,
2397 vr1: bool = false,
2398 vr2: bool = false,
2399 vr3: bool = false,
2400 vr4: bool = false,
2401 vr5: bool = false,
2402 vr6: bool = false,
2403 vr7: bool = false,
2404 vr8: bool = false,
2405 vr9: bool = false,
2406 vr10: bool = false,
2407 vr11: bool = false,
2408 vr12: bool = false,
2409 vr13: bool = false,
2410 vr14: bool = false,
2411 vr15: bool = false,
2412 vr16: bool = false,
2413 vr17: bool = false,
2414 vr18: bool = false,
2415 vr19: bool = false,
2416 vr20: bool = false,
2417 vr21: bool = false,
2418 vr22: bool = false,
2419 vr23: bool = false,
2420 vr24: bool = false,
2421 vr25: bool = false,
2422 vr26: bool = false,
2423 vr27: bool = false,
2424 vr28: bool = false,
2425 vr29: bool = false,
2426 vr30: bool = false,
2427 vr31: bool = false,
2428
2429 f0: bool = false,
2430 f1: bool = false,
2431 f2: bool = false,
2432 f3: bool = false,
2433 f4: bool = false,
2434 f5: bool = false,
2435 f6: bool = false,
2436 f7: bool = false,
2437 f8: bool = false,
2438 f9: bool = false,
2439 f10: bool = false,
2440 f11: bool = false,
2441 f12: bool = false,
2442 f13: bool = false,
2443 f14: bool = false,
2444 f15: bool = false,
2445 f16: bool = false,
2446 f17: bool = false,
2447 f18: bool = false,
2448 f19: bool = false,
2449 f20: bool = false,
2450 f21: bool = false,
2451 f22: bool = false,
2452 f23: bool = false,
2453 f24: bool = false,
2454 f25: bool = false,
2455 f26: bool = false,
2456 f27: bool = false,
2457 f28: bool = false,
2458 f29: bool = false,
2459 f30: bool = false,
2460 f31: bool = false,
2461 },
2462 .powerpc, .powerpcle, .powerpc64, .powerpc64le => packed struct {
2463 /// Whether the inline assembly code may perform stores to memory
2464 /// addresses other than those derived from input pointer provenance.
2465 memory: bool = false,
2466
2467 cr0: bool = false,
2468 cr1: bool = false,
2469 cr2: bool = false,
2470 cr3: bool = false,
2471 cr4: bool = false,
2472 cr5: bool = false,
2473 cr6: bool = false,
2474 cr7: bool = false,
2475
2476 xer: bool = false,
2477 ctr: bool = false,
2478 lr: bool = false,
2479
2480 r0: bool = false,
2481 r1: bool = false,
2482 r2: bool = false,
2483 r3: bool = false,
2484 r4: bool = false,
2485 r5: bool = false,
2486 r6: bool = false,
2487 r7: bool = false,
2488 r8: bool = false,
2489 r9: bool = false,
2490 r10: bool = false,
2491 r11: bool = false,
2492 r12: bool = false,
2493 r13: bool = false,
2494 r14: bool = false,
2495 r15: bool = false,
2496 r16: bool = false,
2497 r17: bool = false,
2498 r18: bool = false,
2499 r19: bool = false,
2500 r20: bool = false,
2501 r21: bool = false,
2502 r22: bool = false,
2503 r23: bool = false,
2504 r24: bool = false,
2505 r25: bool = false,
2506 r26: bool = false,
2507 r27: bool = false,
2508 r28: bool = false,
2509 r29: bool = false,
2510 r30: bool = false,
2511 r31: bool = false,
2512
2513 fpscr: bool = false,
2514 vscr: bool = false,
2515
2516 vs0: bool = false,
2517 vs1: bool = false,
2518 vs2: bool = false,
2519 vs3: bool = false,
2520 vs4: bool = false,
2521 vs5: bool = false,
2522 vs6: bool = false,
2523 vs7: bool = false,
2524 vs8: bool = false,
2525 vs9: bool = false,
2526 vs10: bool = false,
2527 vs11: bool = false,
2528 vs12: bool = false,
2529 vs13: bool = false,
2530 vs14: bool = false,
2531 vs15: bool = false,
2532 vs16: bool = false,
2533 vs17: bool = false,
2534 vs18: bool = false,
2535 vs19: bool = false,
2536 vs20: bool = false,
2537 vs21: bool = false,
2538 vs22: bool = false,
2539 vs23: bool = false,
2540 vs24: bool = false,
2541 vs25: bool = false,
2542 vs26: bool = false,
2543 vs27: bool = false,
2544 vs28: bool = false,
2545 vs29: bool = false,
2546 vs30: bool = false,
2547 vs31: bool = false,
2548 vs32: bool = false,
2549 vs33: bool = false,
2550 vs34: bool = false,
2551 vs35: bool = false,
2552 vs36: bool = false,
2553 vs37: bool = false,
2554 vs38: bool = false,
2555 vs39: bool = false,
2556 vs40: bool = false,
2557 vs41: bool = false,
2558 vs42: bool = false,
2559 vs43: bool = false,
2560 vs44: bool = false,
2561 vs45: bool = false,
2562 vs46: bool = false,
2563 vs47: bool = false,
2564 vs48: bool = false,
2565 vs49: bool = false,
2566 vs50: bool = false,
2567 vs51: bool = false,
2568 vs52: bool = false,
2569 vs53: bool = false,
2570 vs54: bool = false,
2571 vs55: bool = false,
2572 vs56: bool = false,
2573 vs57: bool = false,
2574 vs58: bool = false,
2575 vs59: bool = false,
2576 vs60: bool = false,
2577 vs61: bool = false,
2578 vs62: bool = false,
2579 vs63: bool = false,
2580
2581 f0: bool = false,
2582 f1: bool = false,
2583 f2: bool = false,
2584 f3: bool = false,
2585 f4: bool = false,
2586 f5: bool = false,
2587 f6: bool = false,
2588 f7: bool = false,
2589 f8: bool = false,
2590 f9: bool = false,
2591 f10: bool = false,
2592 f11: bool = false,
2593 f12: bool = false,
2594 f13: bool = false,
2595 f14: bool = false,
2596 f15: bool = false,
2597 f16: bool = false,
2598 f17: bool = false,
2599 f18: bool = false,
2600 f19: bool = false,
2601 f20: bool = false,
2602 f21: bool = false,
2603 f22: bool = false,
2604 f23: bool = false,
2605 f24: bool = false,
2606 f25: bool = false,
2607 f26: bool = false,
2608 f27: bool = false,
2609 f28: bool = false,
2610 f29: bool = false,
2611 f30: bool = false,
2612 f31: bool = false,
2613
2614 v0: bool = false,
2615 v1: bool = false,
2616 v2: bool = false,
2617 v3: bool = false,
2618 v4: bool = false,
2619 v5: bool = false,
2620 v6: bool = false,
2621 v7: bool = false,
2622 v8: bool = false,
2623 v9: bool = false,
2624 v10: bool = false,
2625 v11: bool = false,
2626 v12: bool = false,
2627 v13: bool = false,
2628 v14: bool = false,
2629 v15: bool = false,
2630 v16: bool = false,
2631 v17: bool = false,
2632 v18: bool = false,
2633 v19: bool = false,
2634 v20: bool = false,
2635 v21: bool = false,
2636 v22: bool = false,
2637 v23: bool = false,
2638 v24: bool = false,
2639 v25: bool = false,
2640 v26: bool = false,
2641 v27: bool = false,
2642 v28: bool = false,
2643 v29: bool = false,
2644 v30: bool = false,
2645 v31: bool = false,
2646
2647 acc0: bool = false,
2648 acc1: bool = false,
2649 acc2: bool = false,
2650 acc3: bool = false,
2651 acc4: bool = false,
2652 acc5: bool = false,
2653 acc6: bool = false,
2654 acc7: bool = false,
2655
2656 acc: bool = false,
2657 spefsc: bool = false,
2658 },
2659 .mips, .mipsel, .mips64, .mips64el => packed struct {
2660 /// Whether the inline assembly code may perform stores to memory
2661 /// addresses other than those derived from input pointer provenance.
2662 memory: bool = false,
2663
2664 lr: bool = false,
2665
2666 hi: bool = false,
2667 lo: bool = false,
2668 ac0: bool = false,
2669 ac1: bool = false,
2670 ac2: bool = false,
2671 ac3: bool = false,
2672 acx: bool = false,
2673
2674 r1: bool = false,
2675 r2: bool = false,
2676 r3: bool = false,
2677 r4: bool = false,
2678 r5: bool = false,
2679 r6: bool = false,
2680 r7: bool = false,
2681 r8: bool = false,
2682 r9: bool = false,
2683 r10: bool = false,
2684 r11: bool = false,
2685 r12: bool = false,
2686 r13: bool = false,
2687 r14: bool = false,
2688 r15: bool = false,
2689 r16: bool = false,
2690 r17: bool = false,
2691 r18: bool = false,
2692 r19: bool = false,
2693 r20: bool = false,
2694 r21: bool = false,
2695 r22: bool = false,
2696 r23: bool = false,
2697 r24: bool = false,
2698 r25: bool = false,
2699 r26: bool = false,
2700 r27: bool = false,
2701 r28: bool = false,
2702 r29: bool = false,
2703 r30: bool = false,
2704 r31: bool = false,
2705
2706 fcsr: bool = false,
2707 fcc0: bool = false,
2708 fcc1: bool = false,
2709 fcc2: bool = false,
2710 fcc3: bool = false,
2711 fcc4: bool = false,
2712 fcc5: bool = false,
2713 fcc6: bool = false,
2714 fcc7: bool = false,
2715
2716 w0: bool = false,
2717 w1: bool = false,
2718 w2: bool = false,
2719 w3: bool = false,
2720 w4: bool = false,
2721 w5: bool = false,
2722 w6: bool = false,
2723 w7: bool = false,
2724 w8: bool = false,
2725 w9: bool = false,
2726 w10: bool = false,
2727 w11: bool = false,
2728 w12: bool = false,
2729 w13: bool = false,
2730 w14: bool = false,
2731 w15: bool = false,
2732 w16: bool = false,
2733 w17: bool = false,
2734 w18: bool = false,
2735 w19: bool = false,
2736 w20: bool = false,
2737 w21: bool = false,
2738 w22: bool = false,
2739 w23: bool = false,
2740 w24: bool = false,
2741 w25: bool = false,
2742 w26: bool = false,
2743 w27: bool = false,
2744 w28: bool = false,
2745 w29: bool = false,
2746 w30: bool = false,
2747 w31: bool = false,
2748
2749 f0: bool = false,
2750 f1: bool = false,
2751 f2: bool = false,
2752 f3: bool = false,
2753 f4: bool = false,
2754 f5: bool = false,
2755 f6: bool = false,
2756 f7: bool = false,
2757 f8: bool = false,
2758 f9: bool = false,
2759 f10: bool = false,
2760 f11: bool = false,
2761 f12: bool = false,
2762 f13: bool = false,
2763 f14: bool = false,
2764 f15: bool = false,
2765 f16: bool = false,
2766 f17: bool = false,
2767 f18: bool = false,
2768 f19: bool = false,
2769 f20: bool = false,
2770 f21: bool = false,
2771 f22: bool = false,
2772 f23: bool = false,
2773 f24: bool = false,
2774 f25: bool = false,
2775 f26: bool = false,
2776 f27: bool = false,
2777 f28: bool = false,
2778 f29: bool = false,
2779 f30: bool = false,
2780 f31: bool = false,
2781
2782 mpl0: bool = false,
2783 mpl1: bool = false,
2784 mpl2: bool = false,
2785
2786 p0: bool = false,
2787 p1: bool = false,
2788 p2: bool = false,
2789
2790 msa_ir: bool = false,
2791 msa_csr: bool = false,
2792 msa_access: bool = false,
2793 msa_save: bool = false,
2794 msa_modify: bool = false,
2795 msa_request: bool = false,
2796 msa_map: bool = false,
2797 msa_unmap: bool = false,
2798 },
2799 .alpha => packed struct {
2800 /// Whether the inline assembly code may perform stores to memory
2801 /// addresses other than those derived from input pointer provenance.
2802 memory: bool = false,
2803
2804 r0: bool = false,
2805 r1: bool = false,
2806 r2: bool = false,
2807 r3: bool = false,
2808 r4: bool = false,
2809 r5: bool = false,
2810 r6: bool = false,
2811 r7: bool = false,
2812 r8: bool = false,
2813 r9: bool = false,
2814 r10: bool = false,
2815 r11: bool = false,
2816 r12: bool = false,
2817 r13: bool = false,
2818 r14: bool = false,
2819 r15: bool = false,
2820 r16: bool = false,
2821 r17: bool = false,
2822 r18: bool = false,
2823 r19: bool = false,
2824 r20: bool = false,
2825 r21: bool = false,
2826 r22: bool = false,
2827 r23: bool = false,
2828 r24: bool = false,
2829 r25: bool = false,
2830 r26: bool = false,
2831 r27: bool = false,
2832 r28: bool = false,
2833 r29: bool = false,
2834 r30: bool = false,
2835
2836 f0: bool = false,
2837 f1: bool = false,
2838 f2: bool = false,
2839 f3: bool = false,
2840 f4: bool = false,
2841 f5: bool = false,
2842 f6: bool = false,
2843 f7: bool = false,
2844 f8: bool = false,
2845 f9: bool = false,
2846 f10: bool = false,
2847 f11: bool = false,
2848 f12: bool = false,
2849 f13: bool = false,
2850 f14: bool = false,
2851 f15: bool = false,
2852 f16: bool = false,
2853 f17: bool = false,
2854 f18: bool = false,
2855 f19: bool = false,
2856 f20: bool = false,
2857 f21: bool = false,
2858 f22: bool = false,
2859 f23: bool = false,
2860 f24: bool = false,
2861 f25: bool = false,
2862 f26: bool = false,
2863 f27: bool = false,
2864 f28: bool = false,
2865 f29: bool = false,
2866 f30: bool = false,
2867 },
2868 .hppa, .hppa64 => packed struct {
2869 /// Whether the inline assembly code may perform stores to memory
2870 /// addresses other than those derived from input pointer provenance.
2871 memory: bool = false,
2872
2873 sar: bool = false,
2874
2875 r1: bool = false,
2876 r2: bool = false,
2877 r3: bool = false,
2878 r4: bool = false,
2879 r5: bool = false,
2880 r6: bool = false,
2881 r7: bool = false,
2882 r8: bool = false,
2883 r9: bool = false,
2884 r10: bool = false,
2885 r11: bool = false,
2886 r12: bool = false,
2887 r13: bool = false,
2888 r14: bool = false,
2889 r15: bool = false,
2890 r16: bool = false,
2891 r17: bool = false,
2892 r18: bool = false,
2893 r19: bool = false,
2894 r20: bool = false,
2895 r21: bool = false,
2896 r22: bool = false,
2897 r23: bool = false,
2898 r24: bool = false,
2899 r25: bool = false,
2900 r26: bool = false,
2901 r27: bool = false,
2902 r28: bool = false,
2903 r29: bool = false,
2904 r30: bool = false,
2905 r31: bool = false,
2906
2907 fr4: bool = false,
2908 fr5: bool = false,
2909 fr6: bool = false,
2910 fr7: bool = false,
2911 fr8: bool = false,
2912 fr9: bool = false,
2913 fr10: bool = false,
2914 fr11: bool = false,
2915 fr12: bool = false,
2916 fr13: bool = false,
2917 fr14: bool = false,
2918 fr15: bool = false,
2919 fr16: bool = false,
2920 fr17: bool = false,
2921 fr18: bool = false,
2922 fr19: bool = false,
2923 fr20: bool = false,
2924 fr21: bool = false,
2925 fr22: bool = false,
2926 fr23: bool = false,
2927 fr24: bool = false,
2928 fr25: bool = false,
2929 fr26: bool = false,
2930 fr27: bool = false,
2931 fr28: bool = false,
2932 fr29: bool = false,
2933 fr30: bool = false,
2934 fr31: bool = false,
2935
2936 fr4r: bool = false,
2937 fr5r: bool = false,
2938 fr6r: bool = false,
2939 fr7r: bool = false,
2940 fr8r: bool = false,
2941 fr9r: bool = false,
2942 fr10r: bool = false,
2943 fr11r: bool = false,
2944 fr12r: bool = false,
2945 fr13r: bool = false,
2946 fr14r: bool = false,
2947 fr15r: bool = false,
2948 fr16r: bool = false,
2949 fr17r: bool = false,
2950 fr18r: bool = false,
2951 fr19r: bool = false,
2952 fr20r: bool = false,
2953 fr21r: bool = false,
2954 fr22r: bool = false,
2955 fr23r: bool = false,
2956 fr24r: bool = false,
2957 fr25r: bool = false,
2958 fr26r: bool = false,
2959 fr27r: bool = false,
2960 fr28r: bool = false,
2961 fr29r: bool = false,
2962 fr30r: bool = false,
2963 fr31r: bool = false,
2964 },
2965 .microblaze, .microblazeel => packed struct {
2966 /// Whether the inline assembly code may perform stores to memory
2967 /// addresses other than those derived from input pointer provenance.
2968 memory: bool = false,
2969
2970 rmsr: bool = false,
2971
2972 r1: bool = false,
2973 r2: bool = false,
2974 r3: bool = false,
2975 r4: bool = false,
2976 r5: bool = false,
2977 r6: bool = false,
2978 r7: bool = false,
2979 r8: bool = false,
2980 r9: bool = false,
2981 r10: bool = false,
2982 r11: bool = false,
2983 r12: bool = false,
2984 r13: bool = false,
2985 r14: bool = false,
2986 r15: bool = false,
2987 r16: bool = false,
2988 r17: bool = false,
2989 r18: bool = false,
2990 r19: bool = false,
2991 r20: bool = false,
2992 r21: bool = false,
2993 r22: bool = false,
2994 r23: bool = false,
2995 r24: bool = false,
2996 r25: bool = false,
2997 r26: bool = false,
2998 r27: bool = false,
2999 r28: bool = false,
3000 r29: bool = false,
3001 r30: bool = false,
3002 r31: bool = false,
3003 },
3004 .sh, .sheb => packed struct {
3005 /// Whether the inline assembly code may perform stores to memory
3006 /// addresses other than those derived from input pointer provenance.
3007 memory: bool = false,
3008
3009 sr: bool = false,
3010 gbr: bool = false,
3011 pr: bool = false,
3012
3013 r0: bool = false,
3014 r1: bool = false,
3015 r2: bool = false,
3016 r3: bool = false,
3017 r4: bool = false,
3018 r5: bool = false,
3019 r6: bool = false,
3020 r7: bool = false,
3021 r8: bool = false,
3022 r9: bool = false,
3023 r10: bool = false,
3024 r11: bool = false,
3025 r12: bool = false,
3026 r13: bool = false,
3027 r14: bool = false,
3028 r15: bool = false,
3029
3030 mach: bool = false,
3031 macl: bool = false,
3032
3033 fr0: bool = false,
3034 fr1: bool = false,
3035 fr2: bool = false,
3036 fr3: bool = false,
3037 fr4: bool = false,
3038 fr5: bool = false,
3039 fr6: bool = false,
3040 fr7: bool = false,
3041 fr8: bool = false,
3042 fr9: bool = false,
3043 fr10: bool = false,
3044 fr11: bool = false,
3045 fr12: bool = false,
3046 fr13: bool = false,
3047 fr14: bool = false,
3048 fr15: bool = false,
3049
3050 dr0: bool = false,
3051 dr2: bool = false,
3052 dr4: bool = false,
3053 dr6: bool = false,
3054 dr8: bool = false,
3055 dr10: bool = false,
3056 dr12: bool = false,
3057 dr14: bool = false,
3058
3059 fv0: bool = false,
3060 fv4: bool = false,
3061 fv8: bool = false,
3062 fv12: bool = false,
3063
3064 xf0: bool = false,
3065 xf1: bool = false,
3066 xf2: bool = false,
3067 xf3: bool = false,
3068 xf4: bool = false,
3069 xf5: bool = false,
3070 xf6: bool = false,
3071 xf7: bool = false,
3072 xf8: bool = false,
3073 xf9: bool = false,
3074 xf10: bool = false,
3075 xf11: bool = false,
3076 xf12: bool = false,
3077 xf13: bool = false,
3078 xf14: bool = false,
3079 xf15: bool = false,
3080
3081 xd0: bool = false,
3082 xd2: bool = false,
3083 xd4: bool = false,
3084 xd6: bool = false,
3085 xd8: bool = false,
3086 xd10: bool = false,
3087 xd12: bool = false,
3088 xd14: bool = false,
3089
3090 xmtrx: bool = false,
3091
3092 fpul: bool = false,
3093 fpscr: bool = false,
3094
3095 ms: bool = false,
3096 me: bool = false,
3097
3098 rs: bool = false,
3099 re: bool = false,
3100
3101 a0: bool = false,
3102 a0g: bool = false,
3103 a1: bool = false,
3104 a1g: bool = false,
3105 m0: bool = false,
3106 m1: bool = false,
3107 x0: bool = false,
3108 x1: bool = false,
3109 y0: bool = false,
3110 y1: bool = false,
3111
3112 dsr: bool = false,
3113 },
3114 else => packed struct {
3115 /// Whether the inline assembly code may perform stores to memory
3116 /// addresses other than those derived from input pointer provenance.
3117 memory: bool = false,
3118 },
3119};
lib/std/lang.zig created+1254
...@@ -0,0 +1,1254 @@
1//! Types and values provided by the Zig language.
2
3const builtin = @import("builtin");
4const std = @import("std.zig");
5const root = @import("root");
6
7pub const assembly = @import("lang/assembly.zig");
8
9/// This data structure is used by the Zig language code generation and
10/// therefore must be kept in sync with the compiler implementation.
11pub const StackTrace = struct {
12 index: usize,
13 instruction_addresses: []usize,
14};
15
16/// This data structure is used by the Zig language code generation and
17/// therefore must be kept in sync with the compiler implementation.
18pub const GlobalLinkage = enum(u2) {
19 internal,
20 strong,
21 weak,
22 link_once,
23};
24
25/// This data structure is used by the Zig language code generation and
26/// therefore must be kept in sync with the compiler implementation.
27pub const SymbolVisibility = enum(u2) {
28 default,
29 hidden,
30 protected,
31};
32
33/// This data structure is used by the Zig language code generation and
34/// therefore must be kept in sync with the compiler implementation.
35pub const AtomicOrder = enum {
36 unordered,
37 monotonic,
38 acquire,
39 release,
40 acq_rel,
41 seq_cst,
42};
43
44/// This data structure is used by the Zig language code generation and
45/// therefore must be kept in sync with the compiler implementation.
46pub const ReduceOp = enum {
47 And,
48 Or,
49 Xor,
50 Min,
51 Max,
52 Add,
53 Mul,
54};
55
56/// This data structure is used by the Zig language code generation and
57/// therefore must be kept in sync with the compiler implementation.
58pub const AtomicRmwOp = enum {
59 /// Exchange - store the operand unmodified.
60 /// Supports enums, integers, and floats.
61 Xchg,
62 /// Add operand to existing value.
63 /// Supports integers and floats.
64 /// For integers, two's complement wraparound applies.
65 Add,
66 /// Subtract operand from existing value.
67 /// Supports integers and floats.
68 /// For integers, two's complement wraparound applies.
69 Sub,
70 /// Perform bitwise AND on existing value with operand.
71 /// Supports integers.
72 And,
73 /// Perform bitwise NAND on existing value with operand.
74 /// Supports integers.
75 Nand,
76 /// Perform bitwise OR on existing value with operand.
77 /// Supports integers.
78 Or,
79 /// Perform bitwise XOR on existing value with operand.
80 /// Supports integers.
81 Xor,
82 /// Store operand if it is larger than the existing value.
83 /// Supports integers and floats.
84 Max,
85 /// Store operand if it is smaller than the existing value.
86 /// Supports integers and floats.
87 Min,
88};
89
90/// The code model puts constraints on the location of symbols and the size of code and data.
91/// The selection of a code model is a trade off on speed and restrictions that needs to be selected on a per application basis to meet its requirements.
92/// A slightly more detailed explanation can be found in (for example) the [System V Application Binary Interface (x86_64)](https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf) 3.5.1.
93///
94/// This data structure is used by the Zig language code generation and
95/// therefore must be kept in sync with the compiler implementation.
96pub const CodeModel = enum {
97 default,
98 extreme,
99 kernel,
100 large,
101 medany,
102 medium,
103 medlow,
104 medmid,
105 normal,
106 small,
107 tiny,
108};
109
110/// This data structure is used by the Zig language code generation and
111/// therefore must be kept in sync with the compiler implementation.
112pub const OptimizeMode = enum {
113 Debug,
114 ReleaseSafe,
115 ReleaseFast,
116 ReleaseSmall,
117};
118
119/// The calling convention of a function defines how arguments and return values are passed, as well
120/// as any other requirements which callers and callees must respect, such as register preservation
121/// and stack alignment.
122///
123/// This data structure is used by the Zig language code generation and
124/// therefore must be kept in sync with the compiler implementation.
125pub const CallingConvention = union(enum(u8)) {
126 pub const Tag = @typeInfo(CallingConvention).@"union".tag_type.?;
127
128 /// This is an alias for the default C calling convention for this target.
129 /// Functions marked as `extern` or `export` are given this calling convention by default.
130 pub const c = builtin.target.cCallingConvention().?;
131
132 pub const winapi: CallingConvention = switch (builtin.target.cpu.arch) {
133 .x86_64 => .{ .x86_64_win = .{} },
134 .x86 => .{ .x86_stdcall = .{} },
135 .aarch64 => .{ .aarch64_aapcs_win = .{} },
136 .thumb => .{ .arm_aapcs_vfp = .{} },
137 else => unreachable,
138 };
139
140 pub const kernel: CallingConvention = switch (builtin.target.cpu.arch) {
141 .amdgcn => .amdgcn_kernel,
142 .nvptx, .nvptx64 => .nvptx_kernel,
143 .spirv32, .spirv64 => .spirv_kernel,
144 else => unreachable,
145 };
146
147 /// The default Zig calling convention when neither `export` nor `inline` is specified.
148 /// This calling convention makes no guarantees about stack alignment, registers, etc.
149 /// It can only be used within this Zig compilation unit.
150 auto,
151
152 /// The calling convention of a function that can be called with `async` syntax. An `async` call
153 /// of a runtime-known function must target a function with this calling convention.
154 /// Comptime-known functions with other calling conventions may be coerced to this one.
155 async,
156
157 /// Functions with this calling convention have no prologue or epilogue, making the function
158 /// uncallable in regular Zig code. This can be useful when integrating with assembly.
159 naked,
160
161 /// This calling convention is exactly equivalent to using the `inline` keyword on a function
162 /// definition. This function will be semantically inlined by the Zig compiler at call sites.
163 /// Pointers to inline functions are comptime-only.
164 @"inline",
165
166 // Calling conventions for the `x86_64` architecture.
167 x86_64_sysv: CommonOptions,
168 x86_64_x32: CommonOptions,
169 x86_64_win: CommonOptions,
170 x86_64_regcall_v3_sysv: CommonOptions,
171 x86_64_regcall_v4_win: CommonOptions,
172 x86_64_vectorcall: CommonOptions,
173 x86_64_interrupt: CommonOptions,
174
175 // Calling conventions for the `x86` architecture.
176 x86_sysv: X86RegparmOptions,
177 x86_win: X86RegparmOptions,
178 x86_stdcall: X86RegparmOptions,
179 x86_fastcall: CommonOptions,
180 x86_thiscall: CommonOptions,
181 x86_thiscall_mingw: CommonOptions,
182 x86_regcall_v3: CommonOptions,
183 x86_regcall_v4_win: CommonOptions,
184 x86_vectorcall: CommonOptions,
185 x86_interrupt: CommonOptions,
186
187 // Calling conventions for the `x86_16` architecture.
188
189 x86_16_cdecl: CommonOptions,
190 x86_16_stdcall: CommonOptions,
191 x86_16_regparmcall: CommonOptions,
192 x86_16_interrupt: CommonOptions,
193
194 // Calling conventions for the `aarch64` and `aarch64_be` architectures.
195 aarch64_aapcs: CommonOptions,
196 aarch64_aapcs_darwin: CommonOptions,
197 aarch64_aapcs_win: CommonOptions,
198 aarch64_vfabi: CommonOptions,
199 aarch64_vfabi_sve: CommonOptions,
200
201 /// The standard `alpha` calling convention.
202 alpha_osf: CommonOptions,
203
204 // Calling convetions for the `arm`, `armeb`, `thumb`, and `thumbeb` architectures.
205 /// ARM Architecture Procedure Call Standard
206 arm_aapcs: CommonOptions,
207 /// ARM Architecture Procedure Call Standard Vector Floating-Point
208 arm_aapcs_vfp: CommonOptions,
209 arm_interrupt: ArmInterruptOptions,
210
211 // Calling conventions for the `mips64` and `mips64el` architectures.
212 mips64_n64: CommonOptions,
213 mips64_n32: CommonOptions,
214 mips64_interrupt: MipsInterruptOptions,
215
216 // Calling conventions for the `mips` and `mipsel` architectures.
217 mips_o32: CommonOptions,
218 mips_interrupt: MipsInterruptOptions,
219
220 // Calling conventions for the `riscv64` architecture.
221 riscv64_lp64: CommonOptions,
222 riscv64_lp64_v: CommonOptions,
223 riscv64_interrupt: RiscvInterruptOptions,
224
225 // Calling conventions for the `riscv32` architecture.
226 riscv32_ilp32: CommonOptions,
227 riscv32_ilp32_v: CommonOptions,
228 riscv32_interrupt: RiscvInterruptOptions,
229
230 // Calling conventions for the `sparc64` architecture.
231 sparc64_sysv: CommonOptions,
232
233 // Calling conventions for the `sparc` architecture.
234 sparc_sysv: CommonOptions,
235
236 // Calling conventions for the `powerpc64` and `powerpc64le` architectures.
237 powerpc64_elf: CommonOptions,
238 powerpc64_elf_altivec: CommonOptions,
239 powerpc64_elf_v2: CommonOptions,
240
241 // Calling conventions for the `powerpc` and `powerpcle` architectures.
242 powerpc_sysv: CommonOptions,
243 powerpc_sysv_altivec: CommonOptions,
244 powerpc_aix: CommonOptions,
245 powerpc_aix_altivec: CommonOptions,
246
247 /// The standard `wasm32` and `wasm64` calling convention, as specified in the WebAssembly Tool Conventions.
248 wasm_mvp: CommonOptions,
249
250 /// The standard `arc`/`arceb` calling convention.
251 arc_sysv: CommonOptions,
252 arc_interrupt: ArcInterruptOptions,
253
254 // Calling conventions for the `avr` architecture.
255 avr_gnu,
256 avr_builtin,
257 avr_signal,
258 avr_interrupt,
259
260 /// The standard `bpfel`/`bpfeb` calling convention.
261 bpf_std: CommonOptions,
262
263 // Calling conventions for the `csky` architecture.
264 csky_sysv: CommonOptions,
265 csky_interrupt: CommonOptions,
266
267 // Calling conventions for the `hexagon` architecture.
268 hexagon_sysv: CommonOptions,
269 hexagon_sysv_hvx: CommonOptions,
270
271 /// The standard `hppa` calling convention.
272 hppa_elf: CommonOptions,
273
274 /// The standard `hppa64` calling convention.
275 hppa64_elf: CommonOptions,
276
277 kvx_lp64: CommonOptions,
278 kvx_ilp32: CommonOptions,
279
280 /// The standard `lanai` calling convention.
281 lanai_sysv: CommonOptions,
282
283 /// The standard `loongarch64` calling convention.
284 loongarch64_lp64: CommonOptions,
285
286 /// The standard `loongarch32` calling convention.
287 loongarch32_ilp32: CommonOptions,
288
289 // Calling conventions for the `m68k` architecture.
290 m68k_sysv: CommonOptions,
291 m68k_gnu: CommonOptions,
292 m68k_rtd: CommonOptions,
293 m68k_interrupt: CommonOptions,
294
295 /// The standard `microblaze`/`microblazeel` calling convention.
296 microblaze_std: CommonOptions,
297 microblaze_interrupt: MicroblazeInterruptOptions,
298
299 /// The standard `msp430` calling convention.
300 msp430_eabi: CommonOptions,
301 msp430_interrupt: CommonOptions,
302
303 /// The standard `or1k` calling convention.
304 or1k_sysv: CommonOptions,
305
306 /// The standard `propeller` calling convention.
307 propeller_sysv: CommonOptions,
308
309 // Calling conventions for the `s390x` architecture.
310 s390x_sysv: CommonOptions,
311 s390x_sysv_vx: CommonOptions,
312
313 // Calling conventions for the `sh`/`sheb` architecture.
314 sh_gnu: CommonOptions,
315 sh_renesas: CommonOptions,
316 sh_interrupt: ShInterruptOptions,
317
318 /// The standard `ve` calling convention.
319 ve_sysv: CommonOptions,
320
321 // Calling conventions for the `xcore` architecture.
322 xcore_xs1: CommonOptions,
323 xcore_xs2: CommonOptions,
324
325 // Calling conventions for the `xtensa`/`xtensaeb` architecture.
326 xtensa_call0: CommonOptions,
327 xtensa_windowed: CommonOptions,
328
329 // Calling conventions for the `amdgcn` architecture.
330 amdgcn_device: CommonOptions,
331 amdgcn_kernel,
332 amdgcn_cs: CommonOptions,
333
334 // Calling conventions for the `nvptx` and `nvptx64` architectures.
335 nvptx_device,
336 nvptx_kernel,
337
338 // Calling conventions for kernels and shaders on the `spirv`, `spirv32`, and `spirv64` architectures.
339 spirv_device,
340 spirv_kernel,
341 spirv_fragment,
342 spirv_vertex,
343
344 // Calling conventions for the `ez80` architecture.
345 ez80_cet,
346 ez80_tiflags,
347
348 /// Options shared across most calling conventions.
349 pub const CommonOptions = struct {
350 /// The boundary the stack is aligned to when the function is called.
351 /// `null` means the default for this calling convention.
352 incoming_stack_alignment: ?u64 = null,
353 };
354
355 /// Options for x86 calling conventions which support the regparm attribute to pass some
356 /// arguments in registers.
357 pub const X86RegparmOptions = struct {
358 /// The boundary the stack is aligned to when the function is called.
359 /// `null` means the default for this calling convention.
360 incoming_stack_alignment: ?u64 = null,
361 /// The number of arguments to pass in registers before passing the remaining arguments
362 /// according to the calling convention.
363 /// Equivalent to `__attribute__((regparm(x)))` in Clang and GCC.
364 register_params: u2 = 0,
365 };
366
367 /// Options for the `arc_interrupt` calling convention.
368 pub const ArcInterruptOptions = struct {
369 /// The boundary the stack is aligned to when the function is called.
370 /// `null` means the default for this calling convention.
371 incoming_stack_alignment: ?u64 = null,
372 /// The kind of interrupt being received.
373 type: InterruptType,
374
375 pub const InterruptType = enum(u2) {
376 ilink1,
377 ilink2,
378 ilink,
379 firq,
380 };
381 };
382
383 /// Options for the `arm_interrupt` calling convention.
384 pub const ArmInterruptOptions = struct {
385 /// The boundary the stack is aligned to when the function is called.
386 /// `null` means the default for this calling convention.
387 incoming_stack_alignment: ?u64 = null,
388 /// The kind of interrupt being received.
389 type: InterruptType = .generic,
390
391 pub const InterruptType = enum(u3) {
392 generic,
393 irq,
394 fiq,
395 swi,
396 abort,
397 undef,
398 };
399 };
400
401 /// Options for the `microblaze_interrupt` calling convention.
402 pub const MicroblazeInterruptOptions = struct {
403 /// The boundary the stack is aligned to when the function is called.
404 /// `null` means the default for this calling convention.
405 incoming_stack_alignment: ?u64 = null,
406 type: InterruptType = .regular,
407
408 pub const InterruptType = enum(u2) {
409 /// User exception; return with `rtsd`.
410 user,
411 /// Regular interrupt; return with `rtid`.
412 regular,
413 /// Fast interrupt; return with `rtid`.
414 fast,
415 /// Software breakpoint; return with `rtbd`.
416 breakpoint,
417 };
418 };
419
420 /// Options for the `mips_interrupt` and `mips64_interrupt` calling conventions.
421 pub const MipsInterruptOptions = struct {
422 /// The boundary the stack is aligned to when the function is called.
423 /// `null` means the default for this calling convention.
424 incoming_stack_alignment: ?u64 = null,
425 /// The interrupt mode.
426 mode: InterruptMode = .eic,
427
428 pub const InterruptMode = enum(u4) {
429 eic,
430 sw0,
431 sw1,
432 hw0,
433 hw1,
434 hw2,
435 hw3,
436 hw4,
437 hw5,
438 };
439 };
440
441 /// Options for the `riscv32_interrupt` and `riscv64_interrupt` calling conventions.
442 pub const RiscvInterruptOptions = struct {
443 /// The boundary the stack is aligned to when the function is called.
444 /// `null` means the default for this calling convention.
445 incoming_stack_alignment: ?u64 = null,
446 /// The privilege mode.
447 mode: PrivilegeMode,
448
449 pub const PrivilegeMode = enum(u2) {
450 supervisor,
451 machine,
452 };
453 };
454
455 /// Options for the `sh_interrupt` calling convention.
456 pub const ShInterruptOptions = struct {
457 /// The boundary the stack is aligned to when the function is called.
458 /// `null` means the default for this calling convention.
459 incoming_stack_alignment: ?u64 = null,
460 save: SaveBehavior = .full,
461
462 pub const SaveBehavior = enum(u3) {
463 /// Save only fpscr (if applicable).
464 fpscr,
465 /// Save only high-numbered registers, i.e. r0 through r7 are *not* saved.
466 high,
467 /// Save all registers normally.
468 full,
469 /// Save all registers using the CPU's fast register bank.
470 bank,
471 };
472 };
473
474 /// Returns the array of `std.Target.Cpu.Arch` to which this `CallingConvention` applies.
475 /// Asserts that `cc` is not `.auto`, `.@"async"`, `.naked`, or `.@"inline"`.
476 pub fn archs(cc: CallingConvention) []const std.Target.Cpu.Arch {
477 return std.Target.Cpu.Arch.fromCallingConvention(cc);
478 }
479
480 pub fn eql(a: CallingConvention, b: CallingConvention) bool {
481 return std.meta.eql(a, b);
482 }
483
484 pub fn withStackAlign(cc: CallingConvention, incoming_stack_alignment: u64) CallingConvention {
485 const tag: CallingConvention.Tag = cc;
486 var result = cc;
487 @field(result, @tagName(tag)).incoming_stack_alignment = incoming_stack_alignment;
488 return result;
489 }
490};
491
492/// This data structure is used by the Zig language code generation and
493/// therefore must be kept in sync with the compiler implementation.
494pub const AddressSpace = enum(u5) {
495 // CPU address spaces.
496 generic,
497 gs,
498 fs,
499 ss,
500
501 // x86_16 extra address spaces.
502 /// Allows addressing the entire address space by storing both segment and offset.
503 far,
504
505 // GPU address spaces.
506 global,
507 constant,
508 param,
509 shared,
510 local,
511 input,
512 output,
513 uniform,
514 push_constant,
515 storage_buffer,
516 physical_storage_buffer,
517
518 // AVR address spaces.
519 flash,
520 flash1,
521 flash2,
522 flash3,
523 flash4,
524 flash5,
525
526 // Propeller address spaces.
527
528 /// This address space only addresses the cog-local ram.
529 cog,
530
531 /// This address space only addresses shared hub ram.
532 hub,
533
534 /// This address space only addresses the "lookup" ram
535 lut,
536};
537
538/// This data structure is used by the Zig language code generation and
539/// therefore must be kept in sync with the compiler implementation.
540pub const SourceLocation = struct {
541 /// The name chosen when compiling. Not a file path.
542 module: [:0]const u8,
543 /// Relative to the root directory of its module.
544 file: [:0]const u8,
545 fn_name: [:0]const u8,
546 line: u32,
547 column: u32,
548};
549
550pub const TypeId = std.meta.Tag(Type);
551
552/// This data structure is used by the Zig language code generation and
553/// therefore must be kept in sync with the compiler implementation.
554pub const Type = union(enum) {
555 type,
556 void,
557 bool,
558 noreturn,
559 int: Int,
560 float: Float,
561 pointer: Pointer,
562 array: Array,
563 @"struct": Struct,
564 comptime_float,
565 comptime_int,
566 undefined,
567 null,
568 optional: Optional,
569 error_union: ErrorUnion,
570 error_set: ErrorSet,
571 @"enum": Enum,
572 @"union": Union,
573 @"fn": Fn,
574 @"opaque": Opaque,
575 frame: Frame,
576 @"anyframe": AnyFrame,
577 vector: Vector,
578 enum_literal,
579
580 /// This data structure is used by the Zig language code generation and
581 /// therefore must be kept in sync with the compiler implementation.
582 pub const Int = struct {
583 signedness: Signedness,
584 bits: u16,
585 };
586
587 /// This data structure is used by the Zig language code generation and
588 /// therefore must be kept in sync with the compiler implementation.
589 pub const Float = struct {
590 bits: u16,
591 };
592
593 /// This data structure is used by the Zig language code generation and
594 /// therefore must be kept in sync with the compiler implementation.
595 pub const Pointer = struct {
596 size: Size,
597 is_const: bool,
598 is_volatile: bool,
599 /// `null` means implicit alignment, which is equivalent to `@alignOf(child)`.
600 alignment: ?usize,
601 address_space: AddressSpace,
602 child: type,
603 is_allowzero: bool,
604
605 /// The type of the sentinel is the element type of the pointer, which is
606 /// the value of the `child` field in this struct. However there is no way
607 /// to refer to that type here, so we use `*const anyopaque`.
608 /// See also: `sentinel`
609 sentinel_ptr: ?*const anyopaque,
610
611 /// Loads the pointer type's sentinel value from `sentinel_ptr`.
612 /// Returns `null` if the pointer type has no sentinel.
613 pub inline fn sentinel(comptime ptr: Pointer) ?ptr.child {
614 const sp: *const ptr.child = @ptrCast(@alignCast(ptr.sentinel_ptr orelse return null));
615 return sp.*;
616 }
617
618 /// This data structure is used by the Zig language code generation and
619 /// therefore must be kept in sync with the compiler implementation.
620 pub const Size = enum(u2) {
621 one,
622 many,
623 slice,
624 c,
625 };
626
627 /// This data structure is used by the Zig language code generation and
628 /// therefore must be kept in sync with the compiler implementation.
629 pub const Attributes = struct {
630 @"const": bool = false,
631 @"volatile": bool = false,
632 @"allowzero": bool = false,
633 @"addrspace": ?AddressSpace = null,
634 @"align": ?usize = null,
635 };
636 };
637
638 /// This data structure is used by the Zig language code generation and
639 /// therefore must be kept in sync with the compiler implementation.
640 pub const Array = struct {
641 len: comptime_int,
642 child: type,
643
644 /// The type of the sentinel is the element type of the array, which is
645 /// the value of the `child` field in this struct. However there is no way
646 /// to refer to that type here, so we use `*const anyopaque`.
647 /// See also: `sentinel`.
648 sentinel_ptr: ?*const anyopaque,
649
650 /// Loads the array type's sentinel value from `sentinel_ptr`.
651 /// Returns `null` if the array type has no sentinel.
652 pub inline fn sentinel(comptime arr: Array) ?arr.child {
653 const sp: *const arr.child = @ptrCast(@alignCast(arr.sentinel_ptr orelse return null));
654 return sp.*;
655 }
656 };
657
658 /// This data structure is used by the Zig language code generation and
659 /// therefore must be kept in sync with the compiler implementation.
660 pub const ContainerLayout = enum(u2) {
661 auto,
662 @"extern",
663 @"packed",
664 };
665
666 /// This data structure is used by the Zig language code generation and
667 /// therefore must be kept in sync with the compiler implementation.
668 pub const StructField = struct {
669 name: [:0]const u8,
670 type: type,
671 /// The type of the default value is the type of this struct field, which
672 /// is the value of the `type` field in this struct. However there is no
673 /// way to refer to that type here, so we use `*const anyopaque`.
674 /// See also: `defaultValue`.
675 default_value_ptr: ?*const anyopaque,
676 is_comptime: bool,
677 /// `null` means the field alignment was not explicitly specified. The
678 /// field will still be aligned to at least `@alignOf` its `type`.
679 alignment: ?usize,
680
681 /// Loads the field's default value from `default_value_ptr`.
682 /// Returns `null` if the field has no default value.
683 pub inline fn defaultValue(comptime sf: StructField) ?sf.type {
684 const dp: *const sf.type = @ptrCast(@alignCast(sf.default_value_ptr orelse return null));
685 return dp.*;
686 }
687
688 /// This data structure is used by the Zig language code generation and
689 /// therefore must be kept in sync with the compiler implementation.
690 pub const Attributes = struct {
691 @"comptime": bool = false,
692 @"align": ?usize = null,
693 default_value_ptr: ?*const anyopaque = null,
694 };
695 };
696
697 /// This data structure is used by the Zig language code generation and
698 /// therefore must be kept in sync with the compiler implementation.
699 pub const Struct = struct {
700 layout: ContainerLayout,
701 /// Only valid if layout is .@"packed"
702 backing_integer: ?type = null,
703 fields: []const StructField,
704 decls: []const Declaration,
705 is_tuple: bool,
706 };
707
708 /// This data structure is used by the Zig language code generation and
709 /// therefore must be kept in sync with the compiler implementation.
710 pub const Optional = struct {
711 child: type,
712 };
713
714 /// This data structure is used by the Zig language code generation and
715 /// therefore must be kept in sync with the compiler implementation.
716 pub const ErrorUnion = struct {
717 error_set: type,
718 payload: type,
719 };
720
721 /// This data structure is used by the Zig language code generation and
722 /// therefore must be kept in sync with the compiler implementation.
723 pub const Error = struct {
724 name: [:0]const u8,
725 };
726
727 /// This data structure is used by the Zig language code generation and
728 /// therefore must be kept in sync with the compiler implementation.
729 pub const ErrorSet = ?[]const Error;
730
731 /// This data structure is used by the Zig language code generation and
732 /// therefore must be kept in sync with the compiler implementation.
733 pub const EnumField = struct {
734 name: [:0]const u8,
735 value: comptime_int,
736 };
737
738 /// This data structure is used by the Zig language code generation and
739 /// therefore must be kept in sync with the compiler implementation.
740 pub const Enum = struct {
741 tag_type: type,
742 fields: []const EnumField,
743 decls: []const Declaration,
744 is_exhaustive: bool,
745
746 /// This data structure is used by the Zig language code generation and
747 /// therefore must be kept in sync with the compiler implementation.
748 pub const Mode = enum { exhaustive, nonexhaustive };
749 };
750
751 /// This data structure is used by the Zig language code generation and
752 /// therefore must be kept in sync with the compiler implementation.
753 pub const UnionField = struct {
754 name: [:0]const u8,
755 type: type,
756 /// `null` means the field alignment was not explicitly specified. The
757 /// field will still be aligned to at least `@alignOf` its `type`.
758 alignment: ?usize,
759
760 /// This data structure is used by the Zig language code generation and
761 /// therefore must be kept in sync with the compiler implementation.
762 pub const Attributes = struct {
763 @"align": ?usize = null,
764 };
765 };
766
767 /// This data structure is used by the Zig language code generation and
768 /// therefore must be kept in sync with the compiler implementation.
769 pub const Union = struct {
770 layout: ContainerLayout,
771 tag_type: ?type,
772 fields: []const UnionField,
773 decls: []const Declaration,
774 };
775
776 /// This data structure is used by the Zig language code generation and
777 /// therefore must be kept in sync with the compiler implementation.
778 pub const Fn = struct {
779 calling_convention: CallingConvention,
780 is_generic: bool,
781 is_var_args: bool,
782 /// TODO change the language spec to make this not optional.
783 return_type: ?type,
784 params: []const Param,
785
786 /// This data structure is used by the Zig language code generation and
787 /// therefore must be kept in sync with the compiler implementation.
788 pub const Param = struct {
789 is_generic: bool,
790 is_noalias: bool,
791 type: ?type,
792
793 /// This data structure is used by the Zig language code generation and
794 /// therefore must be kept in sync with the compiler implementation.
795 pub const Attributes = struct {
796 @"noalias": bool = false,
797 };
798 };
799
800 /// This data structure is used by the Zig language code generation and
801 /// therefore must be kept in sync with the compiler implementation.
802 pub const Attributes = struct {
803 @"callconv": CallingConvention = .auto,
804 varargs: bool = false,
805 };
806 };
807
808 /// This data structure is used by the Zig language code generation and
809 /// therefore must be kept in sync with the compiler implementation.
810 pub const Opaque = struct {
811 decls: []const Declaration,
812 };
813
814 /// This data structure is used by the Zig language code generation and
815 /// therefore must be kept in sync with the compiler implementation.
816 pub const Frame = struct {
817 function: *const anyopaque,
818 };
819
820 /// This data structure is used by the Zig language code generation and
821 /// therefore must be kept in sync with the compiler implementation.
822 pub const AnyFrame = struct {
823 child: ?type,
824 };
825
826 /// This data structure is used by the Zig language code generation and
827 /// therefore must be kept in sync with the compiler implementation.
828 pub const Vector = struct {
829 len: comptime_int,
830 child: type,
831 };
832
833 /// This data structure is used by the Zig language code generation and
834 /// therefore must be kept in sync with the compiler implementation.
835 pub const Declaration = struct {
836 name: [:0]const u8,
837 };
838};
839
840/// This data structure is used by the Zig language code generation and
841/// therefore must be kept in sync with the compiler implementation.
842pub const FloatMode = enum {
843 strict,
844 optimized,
845};
846
847/// This data structure is used by the Zig language code generation and
848/// therefore must be kept in sync with the compiler implementation.
849pub const Endian = enum {
850 big,
851 little,
852
853 pub const native = builtin.target.cpu.arch.endian();
854 pub const foreign: Endian = @enumFromInt(1 - @intFromEnum(native));
855};
856
857/// This data structure is used by the Zig language code generation and
858/// therefore must be kept in sync with the compiler implementation.
859pub const Signedness = enum(u1) {
860 signed,
861 unsigned,
862};
863
864/// This data structure is used by the Zig language code generation and
865/// therefore must be kept in sync with the compiler implementation.
866pub const OutputMode = enum {
867 Exe,
868 Lib,
869 Obj,
870};
871
872/// This data structure is used by the Zig language code generation and
873/// therefore must be kept in sync with the compiler implementation.
874pub const LinkMode = enum {
875 static,
876 dynamic,
877};
878
879/// This data structure is used by the Zig language code generation and
880/// therefore must be kept in sync with the compiler implementation.
881pub const UnwindTables = enum {
882 none,
883 sync,
884 async,
885};
886
887/// This data structure is used by the Zig language code generation and
888/// therefore must be kept in sync with the compiler implementation.
889pub const WasiExecModel = enum {
890 command,
891 reactor,
892};
893
894/// This data structure is used by the Zig language code generation and
895/// therefore must be kept in sync with the compiler implementation.
896pub const CallModifier = enum {
897 /// Equivalent to function call syntax.
898 auto,
899 /// Prevents tail call optimization. This guarantees that the return
900 /// address will point to the callsite, as opposed to the callsite's
901 /// callsite. If the call is otherwise required to be tail-called
902 /// or inlined, a compile error is emitted instead.
903 never_tail,
904 /// Guarantees that the call will not be inlined. If the call is
905 /// otherwise required to be inlined, a compile error is emitted instead.
906 never_inline,
907 /// Asserts that the function call will not suspend. This allows a
908 /// non-async function to call an async function.
909 no_suspend,
910 /// Guarantees that the call will be generated with tail call optimization.
911 /// If this is not possible, a compile error is emitted instead.
912 always_tail,
913 /// Guarantees that the call will be inlined at the callsite.
914 /// If this is not possible, a compile error is emitted instead.
915 always_inline,
916 /// Evaluates the call at compile-time. If the call cannot be completed at
917 /// compile-time, a compile error is emitted instead.
918 compile_time,
919};
920
921/// This data structure is used by the Zig language code generation and
922/// therefore must be kept in sync with the compiler implementation.
923pub const VaListAarch64 = extern struct {
924 __stack: *anyopaque,
925 __gr_top: *anyopaque,
926 __vr_top: *anyopaque,
927 __gr_offs: c_int,
928 __vr_offs: c_int,
929};
930
931/// This data structure is used by the Zig language code generation and
932/// therefore must be kept in sync with the compiler implementation.
933pub const VaListAlpha = extern struct {
934 __base: *anyopaque,
935 __offset: c_int,
936};
937
938/// This data structure is used by the Zig language code generation and
939/// therefore must be kept in sync with the compiler implementation.
940pub const VaListArm = extern struct {
941 __ap: *anyopaque,
942};
943
944/// This data structure is used by the Zig language code generation and
945/// therefore must be kept in sync with the compiler implementation.
946pub const VaListHexagon = extern struct {
947 __gpr: c_long,
948 __fpr: c_long,
949 __overflow_arg_area: *anyopaque,
950 __reg_save_area: *anyopaque,
951};
952
953/// This data structure is used by the Zig language code generation and
954/// therefore must be kept in sync with the compiler implementation.
955pub const VaListPowerPc = extern struct {
956 gpr: u8,
957 fpr: u8,
958 reserved: c_ushort,
959 overflow_arg_area: *anyopaque,
960 reg_save_area: *anyopaque,
961};
962
963/// This data structure is used by the Zig language code generation and
964/// therefore must be kept in sync with the compiler implementation.
965pub const VaListS390x = extern struct {
966 __current_saved_reg_area_pointer: *anyopaque,
967 __saved_reg_area_end_pointer: *anyopaque,
968 __overflow_area_pointer: *anyopaque,
969};
970
971/// This data structure is used by the Zig language code generation and
972/// therefore must be kept in sync with the compiler implementation.
973pub const VaListSh = extern struct {
974 __va_next_o: *anyopaque,
975 __va_next_o_limit: *anyopaque,
976 __va_next_fp: *anyopaque,
977 __va_next_fp_limit: *anyopaque,
978 __va_next_stack: *anyopaque,
979};
980
981/// This data structure is used by the Zig language code generation and
982/// therefore must be kept in sync with the compiler implementation.
983pub const VaListX86_64 = extern struct {
984 gp_offset: c_uint,
985 fp_offset: c_uint,
986 overflow_arg_area: *anyopaque,
987 reg_save_area: *anyopaque,
988};
989
990/// This data structure is used by the Zig language code generation and
991/// therefore must be kept in sync with the compiler implementation.
992pub const VaListXtensa = extern struct {
993 __va_stk: *c_int,
994 __va_reg: *c_int,
995 __va_ndx: c_int,
996};
997
998/// This data structure is used by the Zig language code generation and
999/// therefore must be kept in sync with the compiler implementation.
1000pub const VaList = switch (builtin.cpu.arch) {
1001 .amdgcn,
1002 .msp430,
1003 .nvptx,
1004 .nvptx64,
1005 .powerpc64,
1006 .powerpc64le,
1007 .x86,
1008 => *u8,
1009 .arc,
1010 .arceb,
1011 .avr,
1012 .bpfel,
1013 .bpfeb,
1014 .csky,
1015 .hppa,
1016 .hppa64,
1017 .kvx,
1018 .lanai,
1019 .loongarch32,
1020 .loongarch64,
1021 .m68k,
1022 .microblaze,
1023 .microblazeel,
1024 .mips,
1025 .mipsel,
1026 .mips64,
1027 .mips64el,
1028 .riscv32,
1029 .riscv32be,
1030 .riscv64,
1031 .riscv64be,
1032 .sparc,
1033 .sparc64,
1034 .spirv32,
1035 .spirv64,
1036 .ve,
1037 .wasm32,
1038 .wasm64,
1039 .xcore,
1040 => *anyopaque,
1041 .aarch64, .aarch64_be => switch (builtin.os.tag) {
1042 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .windows => *u8,
1043 else => switch (builtin.zig_backend) {
1044 else => VaListAarch64,
1045 .stage2_llvm => @compileError("disabled due to miscompilations"),
1046 },
1047 },
1048 .alpha => VaListAlpha,
1049 .arm, .armeb, .thumb, .thumbeb => VaListArm,
1050 .hexagon => if (builtin.target.abi.isMusl()) VaListHexagon else *u8,
1051 .powerpc, .powerpcle => VaListPowerPc,
1052 .s390x => VaListS390x,
1053 .sh, .sheb => VaListSh, // This is wrong for `sh_renesas`: https://github.com/ziglang/zig/issues/24692#issuecomment-3150779829
1054 .x86_64 => switch (builtin.os.tag) {
1055 .uefi, .windows => switch (builtin.zig_backend) {
1056 else => *u8,
1057 .stage2_llvm => @compileError("disabled due to miscompilations"),
1058 },
1059 else => VaListX86_64,
1060 },
1061 .xtensa, .xtensaeb => VaListXtensa,
1062 else => @compileError("VaList not supported for this target yet"),
1063};
1064
1065/// This data structure is used by the Zig language code generation and
1066/// therefore must be kept in sync with the compiler implementation.
1067pub const PrefetchOptions = struct {
1068 /// Whether the prefetch should prepare for a read or a write.
1069 rw: Rw = .read,
1070 /// The data's locality in an inclusive range from 0 to 3.
1071 ///
1072 /// 0 means no temporal locality. That is, the data can be immediately
1073 /// dropped from the cache after it is accessed.
1074 ///
1075 /// 3 means high temporal locality. That is, the data should be kept in
1076 /// the cache as it is likely to be accessed again soon.
1077 locality: u2 = 3,
1078 /// The cache that the prefetch should be performed on.
1079 cache: Cache = .data,
1080
1081 pub const Rw = enum(u1) {
1082 read,
1083 write,
1084 };
1085
1086 pub const Cache = enum(u1) {
1087 instruction,
1088 data,
1089 };
1090};
1091
1092/// This data structure is used by the Zig language code generation and
1093/// therefore must be kept in sync with the compiler implementation.
1094pub const ExportOptions = struct {
1095 name: []const u8,
1096 linkage: GlobalLinkage = .strong,
1097 section: ?[]const u8 = null,
1098 visibility: SymbolVisibility = .default,
1099};
1100
1101/// This data structure is used by the Zig language code generation and
1102/// therefore must be kept in sync with the compiler implementation.
1103pub const ExternOptions = struct {
1104 name: []const u8,
1105 library_name: ?[]const u8 = null,
1106 linkage: GlobalLinkage = .strong,
1107 visibility: SymbolVisibility = .default,
1108 /// Setting this to `true` makes the `@extern` a runtime value.
1109 is_thread_local: bool = false,
1110 is_dll_import: bool = false,
1111 relocation: Relocation = .any,
1112 decoration: ?Decoration = null,
1113
1114 pub const Decoration = union(enum) {
1115 location: u32,
1116 descriptor: Descriptor,
1117
1118 pub const Descriptor = struct {
1119 binding: u32,
1120 set: u32,
1121 };
1122 };
1123
1124 pub const Relocation = enum(u1) {
1125 /// Any type of relocation is allowed.
1126 any,
1127 /// A program-counter-relative relocation is required.
1128 /// Using this value makes the `@extern` a runtime value.
1129 pcrel,
1130 };
1131};
1132
1133/// This data structure is used by the Zig language code generation and
1134/// therefore must be kept in sync with the compiler implementation.
1135pub const BranchHint = enum(u3) {
1136 /// Equivalent to no hint given.
1137 none,
1138 /// This branch of control flow is more likely to be reached than its peers.
1139 /// The optimizer should optimize for reaching it.
1140 likely,
1141 /// This branch of control flow is less likely to be reached than its peers.
1142 /// The optimizer should optimize for not reaching it.
1143 unlikely,
1144 /// This branch of control flow is unlikely to *ever* be reached.
1145 /// The optimizer may place it in a different page of memory to optimize other branches.
1146 cold,
1147 /// It is difficult to predict whether this branch of control flow will be reached.
1148 /// The optimizer should avoid branching behavior with expensive mispredictions.
1149 unpredictable,
1150};
1151
1152/// This enum is set by the compiler and communicates which compiler backend is
1153/// used to produce machine code.
1154/// Think carefully before deciding to observe this value. Nearly all code should
1155/// be agnostic to the backend that implements the language. The use case
1156/// to use this value is to **work around problems with compiler implementations.**
1157///
1158/// Avoid failing the compilation if the compiler backend does not match a
1159/// whitelist of backends; rather one should detect that a known problem would
1160/// occur in a blacklist of backends.
1161///
1162/// The enum is nonexhaustive so that alternate Zig language implementations may
1163/// choose a number as their tag (please use a random number generator rather
1164/// than a "cute" number) and codebases can interact with these values even if
1165/// this upstream enum does not have a name for the number. Of course, upstream
1166/// is happy to accept pull requests to add Zig implementations to this enum.
1167///
1168/// This data structure is part of the Zig language specification.
1169pub const CompilerBackend = enum(u64) {
1170 /// It is allowed for a compiler implementation to not reveal its identity,
1171 /// in which case this value is appropriate. Be cool and make sure your
1172 /// code supports `other` Zig compilers!
1173 other = 0,
1174 /// The original Zig compiler created in 2015 by Andrew Kelley. Implemented
1175 /// in C++. Used LLVM. Deleted from the ZSF ziglang/zig codebase on
1176 /// December 6th, 2022.
1177 stage1 = 1,
1178 /// The reference implementation self-hosted compiler of Zig, using the
1179 /// LLVM backend.
1180 stage2_llvm = 2,
1181 /// The reference implementation self-hosted compiler of Zig, using the
1182 /// backend that generates C source code.
1183 /// Note that one can observe whether the compilation will output C code
1184 /// directly with `object_format` value rather than the `compiler_backend` value.
1185 stage2_c = 3,
1186 /// The reference implementation self-hosted compiler of Zig, using the
1187 /// WebAssembly backend.
1188 stage2_wasm = 4,
1189 /// The reference implementation self-hosted compiler of Zig, using the
1190 /// arm backend.
1191 stage2_arm = 5,
1192 /// The reference implementation self-hosted compiler of Zig, using the
1193 /// x86_64 backend.
1194 stage2_x86_64 = 6,
1195 /// The reference implementation self-hosted compiler of Zig, using the
1196 /// aarch64 backend.
1197 stage2_aarch64 = 7,
1198 /// The reference implementation self-hosted compiler of Zig, using the
1199 /// x86 backend.
1200 stage2_x86 = 8,
1201 /// The reference implementation self-hosted compiler of Zig, using the
1202 /// riscv64 backend.
1203 stage2_riscv64 = 9,
1204 /// The reference implementation self-hosted compiler of Zig, using the
1205 /// sparc64 backend.
1206 stage2_sparc64 = 10,
1207 /// The reference implementation self-hosted compiler of Zig, using the
1208 /// spirv backend.
1209 stage2_spirv = 11,
1210 /// The reference implementation self-hosted compiler of Zig, using the
1211 /// powerpc backend.
1212 stage2_powerpc = 12,
1213
1214 _,
1215};
1216
1217/// This function type is used by the Zig language code generation and
1218/// therefore must be kept in sync with the compiler implementation.
1219pub const TestFn = struct {
1220 name: []const u8,
1221 func: *const fn () anyerror!void,
1222};
1223
1224/// This namespace is used by the Zig compiler to emit various kinds of safety
1225/// panics. These can be overridden by making a public `panic` namespace in the
1226/// root source file.
1227pub const panic: type = p: {
1228 if (@hasDecl(root, "panic")) {
1229 if (@TypeOf(root.panic) != type) {
1230 // Deprecated; make `panic` a namespace instead.
1231 break :p std.debug.FullPanic(struct {
1232 fn panic(msg: []const u8, ra: ?usize) noreturn {
1233 root.panic(msg, @errorReturnTrace(), ra);
1234 }
1235 }.panic);
1236 }
1237 break :p root.panic;
1238 }
1239 break :p switch (builtin.zig_backend) {
1240 .stage2_powerpc,
1241 .stage2_riscv64,
1242 => std.debug.simple_panic,
1243 else => std.debug.FullPanic(std.debug.defaultPanic),
1244 };
1245};
1246
1247pub noinline fn returnError() void {
1248 @branchHint(.unlikely);
1249 @setRuntimeSafety(false);
1250 const st = @errorReturnTrace().?;
1251 if (st.index < st.instruction_addresses.len)
1252 st.instruction_addresses[st.index] = @returnAddress();
1253 st.index += 1;
1254}
lib/std/lang/assembly.zig created+3119
...@@ -0,0 +1,3119 @@
1pub const Clobbers = switch (@import("builtin").cpu.arch) {
2 .x86_16, .x86, .x86_64 => packed struct {
3 /// Whether the inline assembly code may perform stores to memory
4 /// addresses other than those derived from input pointer provenance.
5 memory: bool = false,
6
7 /// Condition codes. Subset of the bits in `eflags` and `rflags`.
8 cc: bool = false,
9 dirflag: bool = false,
10 eflags: bool = false,
11 flags: bool = false,
12 fpcr: bool = false,
13 fpsr: bool = false,
14 mxcsr: bool = false,
15 rflags: bool = false,
16
17 rax: bool = false,
18 rcx: bool = false,
19 rdx: bool = false,
20 rbx: bool = false,
21 rsp: bool = false,
22 rbp: bool = false,
23 rsi: bool = false,
24 rdi: bool = false,
25 r8: bool = false,
26 r9: bool = false,
27 r10: bool = false,
28 r11: bool = false,
29 r12: bool = false,
30 r13: bool = false,
31 r14: bool = false,
32 r15: bool = false,
33 eax: bool = false,
34 ecx: bool = false,
35 edx: bool = false,
36 ebx: bool = false,
37 esp: bool = false,
38 ebp: bool = false,
39 esi: bool = false,
40 edi: bool = false,
41 r8d: bool = false,
42 r9d: bool = false,
43 r10d: bool = false,
44 r11d: bool = false,
45 r12d: bool = false,
46 r13d: bool = false,
47 r14d: bool = false,
48 r15d: bool = false,
49 ax: bool = false,
50 cx: bool = false,
51 dx: bool = false,
52 bx: bool = false,
53 sp: bool = false,
54 bp: bool = false,
55 si: bool = false,
56 di: bool = false,
57 r8w: bool = false,
58 r9w: bool = false,
59 r10w: bool = false,
60 r11w: bool = false,
61 r12w: bool = false,
62 r13w: bool = false,
63 r14w: bool = false,
64 r15w: bool = false,
65 al: bool = false,
66 cl: bool = false,
67 dl: bool = false,
68 bl: bool = false,
69 spl: bool = false,
70 bpl: bool = false,
71 sil: bool = false,
72 dil: bool = false,
73 r8b: bool = false,
74 r9b: bool = false,
75 r10b: bool = false,
76 r11b: bool = false,
77 r12b: bool = false,
78 r13b: bool = false,
79 r14b: bool = false,
80 r15b: bool = false,
81 ah: bool = false,
82 ch: bool = false,
83 dh: bool = false,
84 bh: bool = false,
85 zmm0: bool = false,
86 zmm1: bool = false,
87 zmm2: bool = false,
88 zmm3: bool = false,
89 zmm4: bool = false,
90 zmm5: bool = false,
91 zmm6: bool = false,
92 zmm7: bool = false,
93 zmm8: bool = false,
94 zmm9: bool = false,
95 zmm10: bool = false,
96 zmm11: bool = false,
97 zmm12: bool = false,
98 zmm13: bool = false,
99 zmm14: bool = false,
100 zmm15: bool = false,
101 zmm16: bool = false,
102 zmm17: bool = false,
103 zmm18: bool = false,
104 zmm19: bool = false,
105 zmm20: bool = false,
106 zmm21: bool = false,
107 zmm22: bool = false,
108 zmm23: bool = false,
109 zmm24: bool = false,
110 zmm25: bool = false,
111 zmm26: bool = false,
112 zmm27: bool = false,
113 zmm28: bool = false,
114 zmm29: bool = false,
115 zmm30: bool = false,
116 zmm31: bool = false,
117 ymm0: bool = false,
118 ymm1: bool = false,
119 ymm2: bool = false,
120 ymm3: bool = false,
121 ymm4: bool = false,
122 ymm5: bool = false,
123 ymm6: bool = false,
124 ymm7: bool = false,
125 ymm8: bool = false,
126 ymm9: bool = false,
127 ymm10: bool = false,
128 ymm11: bool = false,
129 ymm12: bool = false,
130 ymm13: bool = false,
131 ymm14: bool = false,
132 ymm15: bool = false,
133 ymm16: bool = false,
134 ymm17: bool = false,
135 ymm18: bool = false,
136 ymm19: bool = false,
137 ymm20: bool = false,
138 ymm21: bool = false,
139 ymm22: bool = false,
140 ymm23: bool = false,
141 ymm24: bool = false,
142 ymm25: bool = false,
143 ymm26: bool = false,
144 ymm27: bool = false,
145 ymm28: bool = false,
146 ymm29: bool = false,
147 ymm30: bool = false,
148 ymm31: bool = false,
149 xmm0: bool = false,
150 xmm1: bool = false,
151 xmm2: bool = false,
152 xmm3: bool = false,
153 xmm4: bool = false,
154 xmm5: bool = false,
155 xmm6: bool = false,
156 xmm7: bool = false,
157 xmm8: bool = false,
158 xmm9: bool = false,
159 xmm10: bool = false,
160 xmm11: bool = false,
161 xmm12: bool = false,
162 xmm13: bool = false,
163 xmm14: bool = false,
164 xmm15: bool = false,
165 xmm16: bool = false,
166 xmm17: bool = false,
167 xmm18: bool = false,
168 xmm19: bool = false,
169 xmm20: bool = false,
170 xmm21: bool = false,
171 xmm22: bool = false,
172 xmm23: bool = false,
173 xmm24: bool = false,
174 xmm25: bool = false,
175 xmm26: bool = false,
176 xmm27: bool = false,
177 xmm28: bool = false,
178 xmm29: bool = false,
179 xmm30: bool = false,
180 xmm31: bool = false,
181 mm0: bool = false,
182 mm1: bool = false,
183 mm2: bool = false,
184 mm3: bool = false,
185 mm4: bool = false,
186 mm5: bool = false,
187 mm6: bool = false,
188 mm7: bool = false,
189 st0: bool = false,
190 st1: bool = false,
191 st2: bool = false,
192 st3: bool = false,
193 st4: bool = false,
194 st5: bool = false,
195 st6: bool = false,
196 st7: bool = false,
197 es: bool = false,
198 cs: bool = false,
199 ss: bool = false,
200 ds: bool = false,
201 fs: bool = false,
202 gs: bool = false,
203 },
204 .aarch64, .aarch64_be => packed struct {
205 /// Whether the inline assembly code may perform stores to memory
206 /// addresses other than those derived from input pointer provenance.
207 memory: bool = false,
208
209 nzcv: bool = false,
210
211 x0: bool = false,
212 x1: bool = false,
213 x2: bool = false,
214 x3: bool = false,
215 x4: bool = false,
216 x5: bool = false,
217 x6: bool = false,
218 x7: bool = false,
219 x8: bool = false,
220 x9: bool = false,
221 x10: bool = false,
222 x11: bool = false,
223 x12: bool = false,
224 x13: bool = false,
225 x14: bool = false,
226 x15: bool = false,
227 x16: bool = false,
228 x17: bool = false,
229 x18: bool = false,
230 x19: bool = false,
231 x20: bool = false,
232 x21: bool = false,
233 x22: bool = false,
234 x23: bool = false,
235 x24: bool = false,
236 x25: bool = false,
237 x26: bool = false,
238 x27: bool = false,
239 x28: bool = false,
240 x29: bool = false,
241 x30: bool = false,
242
243 w0: bool = false,
244 w1: bool = false,
245 w2: bool = false,
246 w3: bool = false,
247 w4: bool = false,
248 w5: bool = false,
249 w6: bool = false,
250 w7: bool = false,
251 w8: bool = false,
252 w9: bool = false,
253 w10: bool = false,
254 w11: bool = false,
255 w12: bool = false,
256 w13: bool = false,
257 w14: bool = false,
258 w15: bool = false,
259 w16: bool = false,
260 w17: bool = false,
261 w18: bool = false,
262 w19: bool = false,
263 w20: bool = false,
264 w21: bool = false,
265 w22: bool = false,
266 w23: bool = false,
267 w24: bool = false,
268 w25: bool = false,
269 w26: bool = false,
270 w27: bool = false,
271 w28: bool = false,
272 w29: bool = false,
273
274 lr: bool = false,
275 sp: bool = false,
276 wsp: bool = false,
277 fpcr: bool = false,
278 fpmr: bool = false,
279 fpsr: bool = false,
280 ffr: bool = false,
281
282 p0: bool = false,
283 p1: bool = false,
284 p2: bool = false,
285 p3: bool = false,
286 p4: bool = false,
287 p5: bool = false,
288 p6: bool = false,
289 p7: bool = false,
290 p8: bool = false,
291 p9: bool = false,
292 p10: bool = false,
293 p11: bool = false,
294 p12: bool = false,
295 p13: bool = false,
296 p14: bool = false,
297 p15: bool = false,
298
299 z0: bool = false,
300 z1: bool = false,
301 z2: bool = false,
302 z3: bool = false,
303 z4: bool = false,
304 z5: bool = false,
305 z6: bool = false,
306 z7: bool = false,
307 z8: bool = false,
308 z9: bool = false,
309 z10: bool = false,
310 z11: bool = false,
311 z12: bool = false,
312 z13: bool = false,
313 z14: bool = false,
314 z15: bool = false,
315 z16: bool = false,
316 z17: bool = false,
317 z18: bool = false,
318 z19: bool = false,
319 z20: bool = false,
320 z21: bool = false,
321 z22: bool = false,
322 z23: bool = false,
323 z24: bool = false,
324 z25: bool = false,
325 z26: bool = false,
326 z27: bool = false,
327 z28: bool = false,
328 z29: bool = false,
329 z30: bool = false,
330 z31: bool = false,
331
332 v0: bool = false,
333 v1: bool = false,
334 v2: bool = false,
335 v3: bool = false,
336 v4: bool = false,
337 v5: bool = false,
338 v6: bool = false,
339 v7: bool = false,
340 v8: bool = false,
341 v9: bool = false,
342 v10: bool = false,
343 v11: bool = false,
344 v12: bool = false,
345 v13: bool = false,
346 v14: bool = false,
347 v15: bool = false,
348 v16: bool = false,
349 v17: bool = false,
350 v18: bool = false,
351 v19: bool = false,
352 v20: bool = false,
353 v21: bool = false,
354 v22: bool = false,
355 v23: bool = false,
356 v24: bool = false,
357 v25: bool = false,
358 v26: bool = false,
359 v27: bool = false,
360 v28: bool = false,
361 v29: bool = false,
362 v30: bool = false,
363 v31: bool = false,
364
365 d0: bool = false,
366 d1: bool = false,
367 d2: bool = false,
368 d3: bool = false,
369 d4: bool = false,
370 d5: bool = false,
371 d6: bool = false,
372 d7: bool = false,
373 d8: bool = false,
374 d9: bool = false,
375 d10: bool = false,
376 d11: bool = false,
377 d12: bool = false,
378 d13: bool = false,
379 d14: bool = false,
380 d15: bool = false,
381 d16: bool = false,
382 d17: bool = false,
383 d18: bool = false,
384 d19: bool = false,
385 d20: bool = false,
386 d21: bool = false,
387 d22: bool = false,
388 d23: bool = false,
389 d24: bool = false,
390 d25: bool = false,
391 d26: bool = false,
392 d27: bool = false,
393 d28: bool = false,
394 d29: bool = false,
395 d30: bool = false,
396 d31: bool = false,
397
398 s0: bool = false,
399 s1: bool = false,
400 s2: bool = false,
401 s3: bool = false,
402 s4: bool = false,
403 s5: bool = false,
404 s6: bool = false,
405 s7: bool = false,
406 s8: bool = false,
407 s9: bool = false,
408 s10: bool = false,
409 s11: bool = false,
410 s12: bool = false,
411 s13: bool = false,
412 s14: bool = false,
413 s15: bool = false,
414 s16: bool = false,
415 s17: bool = false,
416 s18: bool = false,
417 s19: bool = false,
418 s20: bool = false,
419 s21: bool = false,
420 s22: bool = false,
421 s23: bool = false,
422 s24: bool = false,
423 s25: bool = false,
424 s26: bool = false,
425 s27: bool = false,
426 s28: bool = false,
427 s29: bool = false,
428 s30: bool = false,
429 s31: bool = false,
430
431 h0: bool = false,
432 h1: bool = false,
433 h2: bool = false,
434 h3: bool = false,
435 h4: bool = false,
436 h5: bool = false,
437 h6: bool = false,
438 h7: bool = false,
439 h8: bool = false,
440 h9: bool = false,
441 h10: bool = false,
442 h11: bool = false,
443 h12: bool = false,
444 h13: bool = false,
445 h14: bool = false,
446 h15: bool = false,
447 h16: bool = false,
448 h17: bool = false,
449 h18: bool = false,
450 h19: bool = false,
451 h20: bool = false,
452 h21: bool = false,
453 h22: bool = false,
454 h23: bool = false,
455 h24: bool = false,
456 h25: bool = false,
457 h26: bool = false,
458 h27: bool = false,
459 h28: bool = false,
460 h29: bool = false,
461 h30: bool = false,
462 h31: bool = false,
463
464 b0: bool = false,
465 b1: bool = false,
466 b2: bool = false,
467 b3: bool = false,
468 b4: bool = false,
469 b5: bool = false,
470 b6: bool = false,
471 b7: bool = false,
472 b8: bool = false,
473 b9: bool = false,
474 b10: bool = false,
475 b11: bool = false,
476 b12: bool = false,
477 b13: bool = false,
478 b14: bool = false,
479 b15: bool = false,
480 b16: bool = false,
481 b17: bool = false,
482 b18: bool = false,
483 b19: bool = false,
484 b20: bool = false,
485 b21: bool = false,
486 b22: bool = false,
487 b23: bool = false,
488 b24: bool = false,
489 b25: bool = false,
490 b26: bool = false,
491 b27: bool = false,
492 b28: bool = false,
493 b29: bool = false,
494 b30: bool = false,
495 b31: bool = false,
496
497 za0q: bool = false,
498 za1q: bool = false,
499 za2q: bool = false,
500 za3q: bool = false,
501 za4q: bool = false,
502 za5q: bool = false,
503 za6q: bool = false,
504 za7q: bool = false,
505 za8q: bool = false,
506 za9q: bool = false,
507 za10q: bool = false,
508 za11q: bool = false,
509 za12q: bool = false,
510 za13q: bool = false,
511 za14q: bool = false,
512 za15q: bool = false,
513
514 za0d: bool = false,
515 za1d: bool = false,
516 za2d: bool = false,
517 za3d: bool = false,
518 za4d: bool = false,
519 za5d: bool = false,
520 za6d: bool = false,
521 za7d: bool = false,
522
523 za0s: bool = false,
524 za1s: bool = false,
525 za2s: bool = false,
526 za3s: bool = false,
527
528 za0h: bool = false,
529 za1h: bool = false,
530 za0b: bool = false,
531
532 zt0: bool = false,
533 },
534 .arm, .armeb, .thumb, .thumbeb => packed struct {
535 /// Whether the inline assembly code may perform stores to memory
536 /// addresses other than those derived from input pointer provenance.
537 memory: bool = false,
538
539 apsr: bool = false,
540 cpsr: bool = false,
541 spsr: bool = false,
542 r0: bool = false,
543 r1: bool = false,
544 r2: bool = false,
545 r3: bool = false,
546 r4: bool = false,
547 r5: bool = false,
548 r6: bool = false,
549 r7: bool = false,
550 r8: bool = false,
551 r9: bool = false,
552 r10: bool = false,
553 r11: bool = false,
554 r12: bool = false,
555 r13: bool = false,
556 r14: bool = false,
557
558 lr: bool = false,
559 sp: bool = false,
560 fpscr: bool = false,
561 vpr: bool = false,
562
563 d0: bool = false,
564 d1: bool = false,
565 d2: bool = false,
566 d3: bool = false,
567 d4: bool = false,
568 d5: bool = false,
569 d6: bool = false,
570 d7: bool = false,
571 d8: bool = false,
572 d9: bool = false,
573 d10: bool = false,
574 d11: bool = false,
575 d12: bool = false,
576 d13: bool = false,
577 d14: bool = false,
578 d15: bool = false,
579 d16: bool = false,
580 d17: bool = false,
581 d18: bool = false,
582 d19: bool = false,
583 d20: bool = false,
584 d21: bool = false,
585 d22: bool = false,
586 d23: bool = false,
587 d24: bool = false,
588 d25: bool = false,
589 d26: bool = false,
590 d27: bool = false,
591 d28: bool = false,
592 d29: bool = false,
593 d30: bool = false,
594 d31: bool = false,
595
596 s0: bool = false,
597 s1: bool = false,
598 s2: bool = false,
599 s3: bool = false,
600 s4: bool = false,
601 s5: bool = false,
602 s6: bool = false,
603 s7: bool = false,
604 s8: bool = false,
605 s9: bool = false,
606 s10: bool = false,
607 s11: bool = false,
608 s12: bool = false,
609 s13: bool = false,
610 s14: bool = false,
611 s15: bool = false,
612 s16: bool = false,
613 s17: bool = false,
614 s18: bool = false,
615 s19: bool = false,
616 s20: bool = false,
617 s21: bool = false,
618 s22: bool = false,
619 s23: bool = false,
620 s24: bool = false,
621 s25: bool = false,
622 s26: bool = false,
623 s27: bool = false,
624 s28: bool = false,
625 s29: bool = false,
626 s30: bool = false,
627 s31: bool = false,
628
629 q0: bool = false,
630 q1: bool = false,
631 q2: bool = false,
632 q3: bool = false,
633 q4: bool = false,
634 q5: bool = false,
635 q6: bool = false,
636 q7: bool = false,
637 q8: bool = false,
638 q9: bool = false,
639 q10: bool = false,
640 q11: bool = false,
641 q12: bool = false,
642 q13: bool = false,
643 q14: bool = false,
644 q15: bool = false,
645 },
646 .riscv32, .riscv32be, .riscv64, .riscv64be => packed struct {
647 /// Whether the inline assembly code may perform stores to memory
648 /// addresses other than those derived from input pointer provenance.
649 memory: bool = false,
650
651 ssp: bool = false,
652
653 x1: bool = false,
654 x2: bool = false,
655 x3: bool = false,
656 x4: bool = false,
657 x5: bool = false,
658 x6: bool = false,
659 x7: bool = false,
660 x8: bool = false,
661 x9: bool = false,
662 x10: bool = false,
663 x11: bool = false,
664 x12: bool = false,
665 x13: bool = false,
666 x14: bool = false,
667 x15: bool = false,
668 x16: bool = false,
669 x17: bool = false,
670 x18: bool = false,
671 x19: bool = false,
672 x20: bool = false,
673 x21: bool = false,
674 x22: bool = false,
675 x23: bool = false,
676 x24: bool = false,
677 x25: bool = false,
678 x26: bool = false,
679 x27: bool = false,
680 x28: bool = false,
681 x29: bool = false,
682 x30: bool = false,
683 x31: bool = false,
684
685 // ABI aliases for integer registers
686 ra: bool = false,
687 sp: bool = false,
688 gp: bool = false,
689 tp: bool = false,
690 t0: bool = false,
691 t1: bool = false,
692 t2: bool = false,
693 s0: bool = false,
694 fp: bool = false,
695 s1: bool = false,
696 a0: bool = false,
697 a1: bool = false,
698 a2: bool = false,
699 a3: bool = false,
700 a4: bool = false,
701 a5: bool = false,
702 a6: bool = false,
703 a7: bool = false,
704 s2: bool = false,
705 s3: bool = false,
706 s4: bool = false,
707 s5: bool = false,
708 s6: bool = false,
709 s7: bool = false,
710 s8: bool = false,
711 s9: bool = false,
712 s10: bool = false,
713 s11: bool = false,
714 t3: bool = false,
715 t4: bool = false,
716 t5: bool = false,
717 t6: bool = false,
718
719 fflags: bool = false,
720 frm: bool = false,
721
722 f0: bool = false,
723 f1: bool = false,
724 f2: bool = false,
725 f3: bool = false,
726 f4: bool = false,
727 f5: bool = false,
728 f6: bool = false,
729 f7: bool = false,
730 f8: bool = false,
731 f9: bool = false,
732 f10: bool = false,
733 f11: bool = false,
734 f12: bool = false,
735 f13: bool = false,
736 f14: bool = false,
737 f15: bool = false,
738 f16: bool = false,
739 f17: bool = false,
740 f18: bool = false,
741 f19: bool = false,
742 f20: bool = false,
743 f21: bool = false,
744 f22: bool = false,
745 f23: bool = false,
746 f24: bool = false,
747 f25: bool = false,
748 f26: bool = false,
749 f27: bool = false,
750 f28: bool = false,
751 f29: bool = false,
752 f30: bool = false,
753 f31: bool = false,
754
755 // ABI aliases for float registers
756 ft0: bool = false,
757 ft1: bool = false,
758 ft2: bool = false,
759 ft3: bool = false,
760 ft4: bool = false,
761 ft5: bool = false,
762 ft6: bool = false,
763 ft7: bool = false,
764 fs0: bool = false,
765 fs1: bool = false,
766 fa0: bool = false,
767 fa1: bool = false,
768 fa2: bool = false,
769 fa3: bool = false,
770 fa4: bool = false,
771 fa5: bool = false,
772 fa6: bool = false,
773 fa7: bool = false,
774 fs2: bool = false,
775 fs3: bool = false,
776 fs4: bool = false,
777 fs5: bool = false,
778 fs6: bool = false,
779 fs7: bool = false,
780 fs8: bool = false,
781 fs9: bool = false,
782 fs10: bool = false,
783 fs11: bool = false,
784 ft8: bool = false,
785 ft9: bool = false,
786 ft10: bool = false,
787 ft11: bool = false,
788
789 vtype: bool = false,
790 vl: bool = false,
791 vxsat: bool = false,
792 vxrm: bool = false,
793 vcsr: bool = false,
794
795 v0: bool = false,
796 v1: bool = false,
797 v2: bool = false,
798 v3: bool = false,
799 v4: bool = false,
800 v5: bool = false,
801 v6: bool = false,
802 v7: bool = false,
803 v8: bool = false,
804 v9: bool = false,
805 v10: bool = false,
806 v11: bool = false,
807 v12: bool = false,
808 v13: bool = false,
809 v14: bool = false,
810 v15: bool = false,
811 v16: bool = false,
812 v17: bool = false,
813 v18: bool = false,
814 v19: bool = false,
815 v20: bool = false,
816 v21: bool = false,
817 v22: bool = false,
818 v23: bool = false,
819 v24: bool = false,
820 v25: bool = false,
821 v26: bool = false,
822 v27: bool = false,
823 v28: bool = false,
824 v29: bool = false,
825 v30: bool = false,
826 v31: bool = false,
827 },
828 .xcore => packed struct {
829 /// Whether the inline assembly code may perform stores to memory
830 /// addresses other than those derived from input pointer provenance.
831 memory: bool = false,
832
833 r0: bool = false,
834 r1: bool = false,
835 r2: bool = false,
836 r3: bool = false,
837 r4: bool = false,
838 r5: bool = false,
839 r6: bool = false,
840 r7: bool = false,
841 r8: bool = false,
842 r9: bool = false,
843 r10: bool = false,
844 r11: bool = false,
845
846 cp: bool = false,
847 dp: bool = false,
848 sp: bool = false,
849 lr: bool = false,
850 sr: bool = false,
851 },
852 .xtensa, .xtensaeb => packed struct {
853 /// Whether the inline assembly code may perform stores to memory
854 /// addresses other than those derived from input pointer provenance.
855 memory: bool = false,
856
857 sar: bool = false,
858 lbeg: bool = false,
859 lend: bool = false,
860 lcount: bool = false,
861 atomctl: bool = false,
862 scompare1: bool = false,
863 threadptr: bool = false,
864 litbase: bool = false,
865 windowbase: bool = false,
866 windowstart: bool = false,
867 ps: bool = false,
868
869 a0: bool = false,
870 a1: bool = false,
871 a2: bool = false,
872 a3: bool = false,
873 a4: bool = false,
874 a5: bool = false,
875 a6: bool = false,
876 a7: bool = false,
877 a8: bool = false,
878 a9: bool = false,
879 a10: bool = false,
880 a11: bool = false,
881 a12: bool = false,
882 a13: bool = false,
883 a14: bool = false,
884 a15: bool = false,
885
886 br: bool = false,
887 b0: bool = false,
888 b1: bool = false,
889 b2: bool = false,
890 b3: bool = false,
891 b4: bool = false,
892 b5: bool = false,
893 b6: bool = false,
894 b7: bool = false,
895 b8: bool = false,
896 b9: bool = false,
897 b10: bool = false,
898 b11: bool = false,
899 b12: bool = false,
900 b13: bool = false,
901 b14: bool = false,
902 b15: bool = false,
903
904 acchi: bool = false,
905 acclo: bool = false,
906 m0: bool = false,
907 m1: bool = false,
908 m2: bool = false,
909 m3: bool = false,
910 fcr: bool = false,
911 fsr: bool = false,
912
913 f0: bool = false,
914 f1: bool = false,
915 f2: bool = false,
916 f3: bool = false,
917 f4: bool = false,
918 f5: bool = false,
919 f6: bool = false,
920 f7: bool = false,
921 f8: bool = false,
922 f9: bool = false,
923 f10: bool = false,
924 f11: bool = false,
925 f12: bool = false,
926 f13: bool = false,
927 f14: bool = false,
928 f15: bool = false,
929 },
930 .kvx => packed struct {
931 /// Whether the inline assembly code may perform stores to memory
932 /// addresses other than those derived from input pointer provenance.
933 memory: bool = false,
934
935 cs: bool = false,
936
937 ra: bool = false,
938
939 ls: bool = false,
940 le: bool = false,
941 lc: bool = false,
942
943 r0: bool = false,
944 r1: bool = false,
945 r2: bool = false,
946 r3: bool = false,
947 r4: bool = false,
948 r5: bool = false,
949 r6: bool = false,
950 r7: bool = false,
951 r8: bool = false,
952 r9: bool = false,
953 r10: bool = false,
954 r11: bool = false,
955 r12: bool = false,
956 r13: bool = false,
957 r14: bool = false,
958 r15: bool = false,
959 r16: bool = false,
960 r17: bool = false,
961 r18: bool = false,
962 r19: bool = false,
963 r20: bool = false,
964 r21: bool = false,
965 r22: bool = false,
966 r23: bool = false,
967 r24: bool = false,
968 r25: bool = false,
969 r26: bool = false,
970 r27: bool = false,
971 r28: bool = false,
972 r29: bool = false,
973 r30: bool = false,
974 r31: bool = false,
975 r32: bool = false,
976 r33: bool = false,
977 r34: bool = false,
978 r35: bool = false,
979 r36: bool = false,
980 r37: bool = false,
981 r38: bool = false,
982 r39: bool = false,
983 r40: bool = false,
984 r41: bool = false,
985 r42: bool = false,
986 r43: bool = false,
987 r44: bool = false,
988 r45: bool = false,
989 r46: bool = false,
990 r47: bool = false,
991 r48: bool = false,
992 r49: bool = false,
993 r50: bool = false,
994 r51: bool = false,
995 r52: bool = false,
996 r53: bool = false,
997 r54: bool = false,
998 r55: bool = false,
999 r56: bool = false,
1000 r57: bool = false,
1001 r58: bool = false,
1002 r59: bool = false,
1003 r60: bool = false,
1004 r61: bool = false,
1005 r62: bool = false,
1006 r63: bool = false,
1007
1008 a0: bool = false,
1009 a1: bool = false,
1010 a2: bool = false,
1011 a3: bool = false,
1012 a4: bool = false,
1013 a5: bool = false,
1014 a6: bool = false,
1015 a7: bool = false,
1016 a8: bool = false,
1017 a9: bool = false,
1018 a10: bool = false,
1019 a11: bool = false,
1020 a12: bool = false,
1021 a13: bool = false,
1022 a14: bool = false,
1023 a15: bool = false,
1024 a16: bool = false,
1025 a17: bool = false,
1026 a18: bool = false,
1027 a19: bool = false,
1028 a20: bool = false,
1029 a21: bool = false,
1030 a22: bool = false,
1031 a23: bool = false,
1032 a24: bool = false,
1033 a25: bool = false,
1034 a26: bool = false,
1035 a27: bool = false,
1036 a28: bool = false,
1037 a29: bool = false,
1038 a30: bool = false,
1039 a31: bool = false,
1040 a32: bool = false,
1041 a33: bool = false,
1042 a34: bool = false,
1043 a35: bool = false,
1044 a36: bool = false,
1045 a37: bool = false,
1046 a38: bool = false,
1047 a39: bool = false,
1048 a40: bool = false,
1049 a41: bool = false,
1050 a42: bool = false,
1051 a43: bool = false,
1052 a44: bool = false,
1053 a45: bool = false,
1054 a46: bool = false,
1055 a47: bool = false,
1056 a48: bool = false,
1057 a49: bool = false,
1058 a50: bool = false,
1059 a51: bool = false,
1060 a52: bool = false,
1061 a53: bool = false,
1062 a54: bool = false,
1063 a55: bool = false,
1064 a56: bool = false,
1065 a57: bool = false,
1066 a58: bool = false,
1067 a59: bool = false,
1068 a60: bool = false,
1069 a61: bool = false,
1070 a62: bool = false,
1071 a63: bool = false,
1072
1073 a0_lo: bool = false,
1074 a0_hi: bool = false,
1075 a1_lo: bool = false,
1076 a1_hi: bool = false,
1077 a2_lo: bool = false,
1078 a2_hi: bool = false,
1079 a3_lo: bool = false,
1080 a3_hi: bool = false,
1081 a4_lo: bool = false,
1082 a4_hi: bool = false,
1083 a5_lo: bool = false,
1084 a5_hi: bool = false,
1085 a6_lo: bool = false,
1086 a6_hi: bool = false,
1087 a7_lo: bool = false,
1088 a7_hi: bool = false,
1089 a8_lo: bool = false,
1090 a8_hi: bool = false,
1091 a9_lo: bool = false,
1092 a9_hi: bool = false,
1093 a10_lo: bool = false,
1094 a10_hi: bool = false,
1095 a11_lo: bool = false,
1096 a11_hi: bool = false,
1097 a12_lo: bool = false,
1098 a12_hi: bool = false,
1099 a13_lo: bool = false,
1100 a13_hi: bool = false,
1101 a14_lo: bool = false,
1102 a14_hi: bool = false,
1103 a15_lo: bool = false,
1104 a15_hi: bool = false,
1105 a16_lo: bool = false,
1106 a16_hi: bool = false,
1107 a17_lo: bool = false,
1108 a17_hi: bool = false,
1109 a18_lo: bool = false,
1110 a18_hi: bool = false,
1111 a19_lo: bool = false,
1112 a19_hi: bool = false,
1113 a20_lo: bool = false,
1114 a20_hi: bool = false,
1115 a21_lo: bool = false,
1116 a21_hi: bool = false,
1117 a22_lo: bool = false,
1118 a22_hi: bool = false,
1119 a23_lo: bool = false,
1120 a23_hi: bool = false,
1121 a24_lo: bool = false,
1122 a24_hi: bool = false,
1123 a25_lo: bool = false,
1124 a25_hi: bool = false,
1125 a26_lo: bool = false,
1126 a26_hi: bool = false,
1127 a27_lo: bool = false,
1128 a27_hi: bool = false,
1129 a28_lo: bool = false,
1130 a28_hi: bool = false,
1131 a29_lo: bool = false,
1132 a29_hi: bool = false,
1133 a30_lo: bool = false,
1134 a30_hi: bool = false,
1135 a31_lo: bool = false,
1136 a31_hi: bool = false,
1137 a32_lo: bool = false,
1138 a32_hi: bool = false,
1139 a33_lo: bool = false,
1140 a33_hi: bool = false,
1141 a34_lo: bool = false,
1142 a34_hi: bool = false,
1143 a35_lo: bool = false,
1144 a35_hi: bool = false,
1145 a36_lo: bool = false,
1146 a36_hi: bool = false,
1147 a37_lo: bool = false,
1148 a37_hi: bool = false,
1149 a38_lo: bool = false,
1150 a38_hi: bool = false,
1151 a39_lo: bool = false,
1152 a39_hi: bool = false,
1153 a40_lo: bool = false,
1154 a40_hi: bool = false,
1155 a41_lo: bool = false,
1156 a41_hi: bool = false,
1157 a42_lo: bool = false,
1158 a42_hi: bool = false,
1159 a43_lo: bool = false,
1160 a43_hi: bool = false,
1161 a44_lo: bool = false,
1162 a44_hi: bool = false,
1163 a45_lo: bool = false,
1164 a45_hi: bool = false,
1165 a46_lo: bool = false,
1166 a46_hi: bool = false,
1167 a47_lo: bool = false,
1168 a47_hi: bool = false,
1169 a48_lo: bool = false,
1170 a48_hi: bool = false,
1171 a49_lo: bool = false,
1172 a49_hi: bool = false,
1173 a50_lo: bool = false,
1174 a50_hi: bool = false,
1175 a51_lo: bool = false,
1176 a51_hi: bool = false,
1177 a52_lo: bool = false,
1178 a52_hi: bool = false,
1179 a53_lo: bool = false,
1180 a53_hi: bool = false,
1181 a54_lo: bool = false,
1182 a54_hi: bool = false,
1183 a55_lo: bool = false,
1184 a55_hi: bool = false,
1185 a56_lo: bool = false,
1186 a56_hi: bool = false,
1187 a57_lo: bool = false,
1188 a57_hi: bool = false,
1189 a58_lo: bool = false,
1190 a58_hi: bool = false,
1191 a59_lo: bool = false,
1192 a59_hi: bool = false,
1193 a60_lo: bool = false,
1194 a60_hi: bool = false,
1195 a61_lo: bool = false,
1196 a61_hi: bool = false,
1197 a62_lo: bool = false,
1198 a62_hi: bool = false,
1199 a63_lo: bool = false,
1200 a63_hi: bool = false,
1201
1202 a0_x: bool = false,
1203 a0_y: bool = false,
1204 a0_z: bool = false,
1205 a0_t: bool = false,
1206 a1_x: bool = false,
1207 a1_y: bool = false,
1208 a1_z: bool = false,
1209 a1_t: bool = false,
1210 a2_x: bool = false,
1211 a2_y: bool = false,
1212 a2_z: bool = false,
1213 a2_t: bool = false,
1214 a3_x: bool = false,
1215 a3_y: bool = false,
1216 a3_z: bool = false,
1217 a3_t: bool = false,
1218 a4_x: bool = false,
1219 a4_y: bool = false,
1220 a4_z: bool = false,
1221 a4_t: bool = false,
1222 a5_x: bool = false,
1223 a5_y: bool = false,
1224 a5_z: bool = false,
1225 a5_t: bool = false,
1226 a6_x: bool = false,
1227 a6_y: bool = false,
1228 a6_z: bool = false,
1229 a6_t: bool = false,
1230 a7_x: bool = false,
1231 a7_y: bool = false,
1232 a7_z: bool = false,
1233 a7_t: bool = false,
1234 a8_x: bool = false,
1235 a8_y: bool = false,
1236 a8_z: bool = false,
1237 a8_t: bool = false,
1238 a9_x: bool = false,
1239 a9_y: bool = false,
1240 a9_z: bool = false,
1241 a9_t: bool = false,
1242 a10_x: bool = false,
1243 a10_y: bool = false,
1244 a10_z: bool = false,
1245 a10_t: bool = false,
1246 a11_x: bool = false,
1247 a11_y: bool = false,
1248 a11_z: bool = false,
1249 a11_t: bool = false,
1250 a12_x: bool = false,
1251 a12_y: bool = false,
1252 a12_z: bool = false,
1253 a12_t: bool = false,
1254 a13_x: bool = false,
1255 a13_y: bool = false,
1256 a13_z: bool = false,
1257 a13_t: bool = false,
1258 a14_x: bool = false,
1259 a14_y: bool = false,
1260 a14_z: bool = false,
1261 a14_t: bool = false,
1262 a15_x: bool = false,
1263 a15_y: bool = false,
1264 a15_z: bool = false,
1265 a15_t: bool = false,
1266 a16_x: bool = false,
1267 a16_y: bool = false,
1268 a16_z: bool = false,
1269 a16_t: bool = false,
1270 a17_x: bool = false,
1271 a17_y: bool = false,
1272 a17_z: bool = false,
1273 a17_t: bool = false,
1274 a18_x: bool = false,
1275 a18_y: bool = false,
1276 a18_z: bool = false,
1277 a18_t: bool = false,
1278 a19_x: bool = false,
1279 a19_y: bool = false,
1280 a19_z: bool = false,
1281 a19_t: bool = false,
1282 a20_x: bool = false,
1283 a20_y: bool = false,
1284 a20_z: bool = false,
1285 a20_t: bool = false,
1286 a21_x: bool = false,
1287 a21_y: bool = false,
1288 a21_z: bool = false,
1289 a21_t: bool = false,
1290 a22_x: bool = false,
1291 a22_y: bool = false,
1292 a22_z: bool = false,
1293 a22_t: bool = false,
1294 a23_x: bool = false,
1295 a23_y: bool = false,
1296 a23_z: bool = false,
1297 a23_t: bool = false,
1298 a24_x: bool = false,
1299 a24_y: bool = false,
1300 a24_z: bool = false,
1301 a24_t: bool = false,
1302 a25_x: bool = false,
1303 a25_y: bool = false,
1304 a25_z: bool = false,
1305 a25_t: bool = false,
1306 a26_x: bool = false,
1307 a26_y: bool = false,
1308 a26_z: bool = false,
1309 a26_t: bool = false,
1310 a27_x: bool = false,
1311 a27_y: bool = false,
1312 a27_z: bool = false,
1313 a27_t: bool = false,
1314 a28_x: bool = false,
1315 a28_y: bool = false,
1316 a28_z: bool = false,
1317 a28_t: bool = false,
1318 a29_x: bool = false,
1319 a29_y: bool = false,
1320 a29_z: bool = false,
1321 a29_t: bool = false,
1322 a30_x: bool = false,
1323 a30_y: bool = false,
1324 a30_z: bool = false,
1325 a30_t: bool = false,
1326 a31_x: bool = false,
1327 a31_y: bool = false,
1328 a31_z: bool = false,
1329 a31_t: bool = false,
1330 a32_x: bool = false,
1331 a32_y: bool = false,
1332 a32_z: bool = false,
1333 a32_t: bool = false,
1334 a33_x: bool = false,
1335 a33_y: bool = false,
1336 a33_z: bool = false,
1337 a33_t: bool = false,
1338 a34_x: bool = false,
1339 a34_y: bool = false,
1340 a34_z: bool = false,
1341 a34_t: bool = false,
1342 a35_x: bool = false,
1343 a35_y: bool = false,
1344 a35_z: bool = false,
1345 a35_t: bool = false,
1346 a36_x: bool = false,
1347 a36_y: bool = false,
1348 a36_z: bool = false,
1349 a36_t: bool = false,
1350 a37_x: bool = false,
1351 a37_y: bool = false,
1352 a37_z: bool = false,
1353 a37_t: bool = false,
1354 a38_x: bool = false,
1355 a38_y: bool = false,
1356 a38_z: bool = false,
1357 a38_t: bool = false,
1358 a39_x: bool = false,
1359 a39_y: bool = false,
1360 a39_z: bool = false,
1361 a39_t: bool = false,
1362 a40_x: bool = false,
1363 a40_y: bool = false,
1364 a40_z: bool = false,
1365 a40_t: bool = false,
1366 a41_x: bool = false,
1367 a41_y: bool = false,
1368 a41_z: bool = false,
1369 a41_t: bool = false,
1370 a42_x: bool = false,
1371 a42_y: bool = false,
1372 a42_z: bool = false,
1373 a42_t: bool = false,
1374 a43_x: bool = false,
1375 a43_y: bool = false,
1376 a43_z: bool = false,
1377 a43_t: bool = false,
1378 a44_x: bool = false,
1379 a44_y: bool = false,
1380 a44_z: bool = false,
1381 a44_t: bool = false,
1382 a45_x: bool = false,
1383 a45_y: bool = false,
1384 a45_z: bool = false,
1385 a45_t: bool = false,
1386 a46_x: bool = false,
1387 a46_y: bool = false,
1388 a46_z: bool = false,
1389 a46_t: bool = false,
1390 a47_x: bool = false,
1391 a47_y: bool = false,
1392 a47_z: bool = false,
1393 a47_t: bool = false,
1394 a48_x: bool = false,
1395 a48_y: bool = false,
1396 a48_z: bool = false,
1397 a48_t: bool = false,
1398 a49_x: bool = false,
1399 a49_y: bool = false,
1400 a49_z: bool = false,
1401 a49_t: bool = false,
1402 a50_x: bool = false,
1403 a50_y: bool = false,
1404 a50_z: bool = false,
1405 a50_t: bool = false,
1406 a51_x: bool = false,
1407 a51_y: bool = false,
1408 a51_z: bool = false,
1409 a51_t: bool = false,
1410 a52_x: bool = false,
1411 a52_y: bool = false,
1412 a52_z: bool = false,
1413 a52_t: bool = false,
1414 a53_x: bool = false,
1415 a53_y: bool = false,
1416 a53_z: bool = false,
1417 a53_t: bool = false,
1418 a54_x: bool = false,
1419 a54_y: bool = false,
1420 a54_z: bool = false,
1421 a54_t: bool = false,
1422 a55_x: bool = false,
1423 a55_y: bool = false,
1424 a55_z: bool = false,
1425 a55_t: bool = false,
1426 a56_x: bool = false,
1427 a56_y: bool = false,
1428 a56_z: bool = false,
1429 a56_t: bool = false,
1430 a57_x: bool = false,
1431 a57_y: bool = false,
1432 a57_z: bool = false,
1433 a57_t: bool = false,
1434 a58_x: bool = false,
1435 a58_y: bool = false,
1436 a58_z: bool = false,
1437 a58_t: bool = false,
1438 a59_x: bool = false,
1439 a59_y: bool = false,
1440 a59_z: bool = false,
1441 a59_t: bool = false,
1442 a60_x: bool = false,
1443 a60_y: bool = false,
1444 a60_z: bool = false,
1445 a60_t: bool = false,
1446 a61_x: bool = false,
1447 a61_y: bool = false,
1448 a61_z: bool = false,
1449 a61_t: bool = false,
1450 a62_x: bool = false,
1451 a62_y: bool = false,
1452 a62_z: bool = false,
1453 a62_t: bool = false,
1454 a63_x: bool = false,
1455 a63_y: bool = false,
1456 a63_z: bool = false,
1457 a63_t: bool = false,
1458 },
1459 .lanai => packed struct {
1460 /// Whether the inline assembly code may perform stores to memory
1461 /// addresses other than those derived from input pointer provenance.
1462 memory: bool = false,
1463 /// Condition flags which aren't accessible outside of conditional execution.
1464 sw: bool = false,
1465
1466 r3: bool = false,
1467 r4: bool = false,
1468 r5: bool = false,
1469 r6: bool = false,
1470 r7: bool = false,
1471 r8: bool = false,
1472 r9: bool = false,
1473 r10: bool = false,
1474 r11: bool = false,
1475 r12: bool = false,
1476 r13: bool = false,
1477 r14: bool = false,
1478 r15: bool = false,
1479 r16: bool = false,
1480 r17: bool = false,
1481 r18: bool = false,
1482 r19: bool = false,
1483 r20: bool = false,
1484 r21: bool = false,
1485 r22: bool = false,
1486 r23: bool = false,
1487 r24: bool = false,
1488 r25: bool = false,
1489 r26: bool = false,
1490 r27: bool = false,
1491 r28: bool = false,
1492 r29: bool = false,
1493 r30: bool = false,
1494 r31: bool = false,
1495 },
1496 .avr => packed struct {
1497 /// Whether the inline assembly code may perform stores to memory
1498 /// addresses other than those derived from input pointer provenance.
1499 memory: bool = false,
1500 flags: bool = false,
1501 r0: bool = false,
1502 r1: bool = false,
1503 r2: bool = false,
1504 r3: bool = false,
1505 r4: bool = false,
1506 r5: bool = false,
1507 r6: bool = false,
1508 r7: bool = false,
1509 r8: bool = false,
1510 r9: bool = false,
1511 r10: bool = false,
1512 r11: bool = false,
1513 r12: bool = false,
1514 r13: bool = false,
1515 r14: bool = false,
1516 r15: bool = false,
1517 r16: bool = false,
1518 r17: bool = false,
1519 r18: bool = false,
1520 r19: bool = false,
1521 r20: bool = false,
1522 r21: bool = false,
1523 r22: bool = false,
1524 r23: bool = false,
1525 r24: bool = false,
1526 r25: bool = false,
1527 r26: bool = false,
1528 r27: bool = false,
1529 r28: bool = false,
1530 r29: bool = false,
1531 r30: bool = false,
1532 r31: bool = false,
1533 },
1534 .msp430 => packed struct {
1535 /// Whether the inline assembly code may perform stores to memory
1536 /// addresses other than those derived from input pointer provenance.
1537 memory: bool = false,
1538
1539 r0: bool = false,
1540 r1: bool = false,
1541 r2: bool = false,
1542
1543 r4: bool = false,
1544 r5: bool = false,
1545 r6: bool = false,
1546 r7: bool = false,
1547 r8: bool = false,
1548 r9: bool = false,
1549 r10: bool = false,
1550 r11: bool = false,
1551 r12: bool = false,
1552 r13: bool = false,
1553 r14: bool = false,
1554 r15: bool = false,
1555 },
1556 .m68k => packed struct {
1557 /// Whether the inline assembly code may perform stores to memory
1558 /// addresses other than those derived from input pointer provenance.
1559 memory: bool = false,
1560
1561 ccr: bool = false,
1562
1563 d0: bool = false,
1564 d1: bool = false,
1565 d2: bool = false,
1566 d3: bool = false,
1567 d4: bool = false,
1568 d5: bool = false,
1569 d6: bool = false,
1570 d7: bool = false,
1571
1572 a0: bool = false,
1573 a1: bool = false,
1574 a2: bool = false,
1575 a3: bool = false,
1576 a4: bool = false,
1577 a5: bool = false,
1578 a6: bool = false,
1579 a7: bool = false,
1580
1581 macsr: bool = false,
1582 acc: bool = false,
1583 acc0: bool = false,
1584 acc1: bool = false,
1585 acc2: bool = false,
1586 acc3: bool = false,
1587
1588 mask: bool = false,
1589 fpcr: bool = false,
1590 fpsr: bool = false,
1591
1592 fp0: bool = false,
1593 fp1: bool = false,
1594 fp2: bool = false,
1595 fp3: bool = false,
1596 fp4: bool = false,
1597 fp5: bool = false,
1598 fp6: bool = false,
1599 fp7: bool = false,
1600 },
1601 .sparc, .sparc64 => packed struct {
1602 /// Whether the inline assembly code may perform stores to memory
1603 /// addresses other than those derived from input pointer provenance.
1604 memory: bool = false,
1605
1606 psr: bool = false,
1607 gsr: bool = false,
1608 y: bool = false,
1609
1610 /// asr2; v9+
1611 ccr: bool = false,
1612 /// Lower bits of `ccr`.
1613 icc: bool = false,
1614 /// Upper bits of `ccr`.
1615 xcc: bool = false,
1616
1617 g1: bool = false,
1618 g2: bool = false,
1619 g3: bool = false,
1620 g4: bool = false,
1621 g5: bool = false,
1622 g6: bool = false,
1623 g7: bool = false,
1624
1625 o0: bool = false,
1626 o1: bool = false,
1627 o2: bool = false,
1628 o3: bool = false,
1629 o4: bool = false,
1630 o5: bool = false,
1631 o6: bool = false,
1632 o7: bool = false,
1633
1634 l0: bool = false,
1635 l1: bool = false,
1636 l2: bool = false,
1637 l3: bool = false,
1638 l4: bool = false,
1639 l5: bool = false,
1640 l6: bool = false,
1641 l7: bool = false,
1642
1643 i0: bool = false,
1644 i1: bool = false,
1645 i2: bool = false,
1646 i3: bool = false,
1647 i4: bool = false,
1648 i5: bool = false,
1649 i6: bool = false,
1650 i7: bool = false,
1651
1652 fsr: bool = false,
1653 fprs: bool = false,
1654
1655 q0: bool = false,
1656 q1: bool = false,
1657 q2: bool = false,
1658 q3: bool = false,
1659 q4: bool = false,
1660 q5: bool = false,
1661 q6: bool = false,
1662 q7: bool = false,
1663 q8: bool = false,
1664 q9: bool = false,
1665 q10: bool = false,
1666 q11: bool = false,
1667 q12: bool = false,
1668 q13: bool = false,
1669 q14: bool = false,
1670 q15: bool = false,
1671 },
1672 .bpfel, .bpfeb => packed struct {
1673 /// Whether the inline assembly code may perform stores to memory
1674 /// addresses other than those derived from input pointer provenance.
1675 memory: bool = false,
1676
1677 r0: bool = false,
1678 r1: bool = false,
1679 r2: bool = false,
1680 r3: bool = false,
1681 r4: bool = false,
1682 r5: bool = false,
1683 r6: bool = false,
1684 r7: bool = false,
1685 r8: bool = false,
1686 r9: bool = false,
1687
1688 w0: bool = false,
1689 w1: bool = false,
1690 w2: bool = false,
1691 w3: bool = false,
1692 w4: bool = false,
1693 w5: bool = false,
1694 w6: bool = false,
1695 w7: bool = false,
1696 w8: bool = false,
1697 w9: bool = false,
1698 },
1699 .hexagon => packed struct {
1700 /// Whether the inline assembly code may perform stores to memory
1701 /// addresses other than those derived from input pointer provenance.
1702 memory: bool = false,
1703
1704 sa0: bool = false,
1705 sa1: bool = false,
1706 lc0: bool = false,
1707 lc1: bool = false,
1708 m0: bool = false,
1709 m1: bool = false,
1710 usr: bool = false,
1711 ugp: bool = false,
1712 gp: bool = false,
1713 cs0: bool = false,
1714 cs1: bool = false,
1715 framelimit: bool = false,
1716 framekey: bool = false,
1717
1718 p0: bool = false,
1719 p1: bool = false,
1720 p2: bool = false,
1721 p3: bool = false,
1722
1723 r0: bool = false,
1724 r1: bool = false,
1725 r2: bool = false,
1726 r3: bool = false,
1727 r4: bool = false,
1728 r5: bool = false,
1729 r6: bool = false,
1730 r7: bool = false,
1731 r8: bool = false,
1732 r9: bool = false,
1733 r10: bool = false,
1734 r11: bool = false,
1735 r12: bool = false,
1736 r13: bool = false,
1737 r14: bool = false,
1738 r15: bool = false,
1739 r16: bool = false,
1740 r17: bool = false,
1741 r18: bool = false,
1742 r19: bool = false,
1743 r20: bool = false,
1744 r21: bool = false,
1745 r22: bool = false,
1746 r23: bool = false,
1747 r24: bool = false,
1748 r25: bool = false,
1749 r26: bool = false,
1750 r27: bool = false,
1751 r28: bool = false,
1752 r29: bool = false,
1753 r30: bool = false,
1754 r31: bool = false,
1755
1756 q0: bool = false,
1757 q1: bool = false,
1758 q2: bool = false,
1759 q3: bool = false,
1760
1761 v0: bool = false,
1762 v1: bool = false,
1763 v2: bool = false,
1764 v3: bool = false,
1765 v4: bool = false,
1766 v5: bool = false,
1767 v6: bool = false,
1768 v7: bool = false,
1769 v8: bool = false,
1770 v9: bool = false,
1771 v10: bool = false,
1772 v11: bool = false,
1773 v12: bool = false,
1774 v13: bool = false,
1775 v14: bool = false,
1776 v15: bool = false,
1777 v16: bool = false,
1778 v17: bool = false,
1779 v18: bool = false,
1780 v19: bool = false,
1781 v20: bool = false,
1782 v21: bool = false,
1783 v22: bool = false,
1784 v23: bool = false,
1785 v24: bool = false,
1786 v25: bool = false,
1787 v26: bool = false,
1788 v27: bool = false,
1789 v28: bool = false,
1790 v29: bool = false,
1791 v30: bool = false,
1792 v31: bool = false,
1793 },
1794 .s390x => packed struct {
1795 /// Whether the inline assembly code may perform stores to memory
1796 /// addresses other than those derived from input pointer provenance.
1797 memory: bool = false,
1798
1799 ps: bool = false,
1800 r0: bool = false,
1801 r1: bool = false,
1802 r2: bool = false,
1803 r3: bool = false,
1804 r4: bool = false,
1805 r5: bool = false,
1806 r6: bool = false,
1807 r7: bool = false,
1808 r8: bool = false,
1809 r9: bool = false,
1810 r10: bool = false,
1811 r11: bool = false,
1812 r12: bool = false,
1813 r13: bool = false,
1814 r14: bool = false,
1815 r15: bool = false,
1816
1817 fpc: bool = false,
1818
1819 v0: bool = false,
1820 v1: bool = false,
1821 v2: bool = false,
1822 v3: bool = false,
1823 v4: bool = false,
1824 v5: bool = false,
1825 v6: bool = false,
1826 v7: bool = false,
1827 v8: bool = false,
1828 v9: bool = false,
1829 v10: bool = false,
1830 v11: bool = false,
1831 v12: bool = false,
1832 v13: bool = false,
1833 v14: bool = false,
1834 v15: bool = false,
1835 v16: bool = false,
1836 v17: bool = false,
1837 v18: bool = false,
1838 v19: bool = false,
1839 v20: bool = false,
1840 v21: bool = false,
1841 v22: bool = false,
1842 v23: bool = false,
1843 v24: bool = false,
1844 v25: bool = false,
1845 v26: bool = false,
1846 v27: bool = false,
1847 v28: bool = false,
1848 v29: bool = false,
1849 v30: bool = false,
1850 v31: bool = false,
1851
1852 f0: bool = false,
1853 f1: bool = false,
1854 f2: bool = false,
1855 f3: bool = false,
1856 f4: bool = false,
1857 f5: bool = false,
1858 f6: bool = false,
1859 f7: bool = false,
1860 f8: bool = false,
1861 f9: bool = false,
1862 f10: bool = false,
1863 f11: bool = false,
1864 f12: bool = false,
1865 f13: bool = false,
1866 f14: bool = false,
1867 f15: bool = false,
1868 },
1869 .ve => packed struct {
1870 /// Whether the inline assembly code may perform stores to memory
1871 /// addresses other than those derived from input pointer provenance.
1872 memory: bool = false,
1873
1874 psw: bool = false,
1875
1876 s0: bool = false,
1877 s1: bool = false,
1878 s2: bool = false,
1879 s3: bool = false,
1880 s4: bool = false,
1881 s5: bool = false,
1882 s6: bool = false,
1883 s7: bool = false,
1884 s8: bool = false,
1885 s9: bool = false,
1886 s10: bool = false,
1887 s11: bool = false,
1888 s12: bool = false,
1889 s13: bool = false,
1890 s14: bool = false,
1891 s15: bool = false,
1892 s16: bool = false,
1893 s17: bool = false,
1894 s18: bool = false,
1895 s19: bool = false,
1896 s20: bool = false,
1897 s21: bool = false,
1898 s22: bool = false,
1899 s23: bool = false,
1900 s24: bool = false,
1901 s25: bool = false,
1902 s26: bool = false,
1903 s27: bool = false,
1904 s28: bool = false,
1905 s29: bool = false,
1906 s30: bool = false,
1907 s31: bool = false,
1908 s32: bool = false,
1909 s33: bool = false,
1910 s34: bool = false,
1911 s35: bool = false,
1912 s36: bool = false,
1913 s37: bool = false,
1914 s38: bool = false,
1915 s39: bool = false,
1916 s40: bool = false,
1917 s41: bool = false,
1918 s42: bool = false,
1919 s43: bool = false,
1920 s44: bool = false,
1921 s45: bool = false,
1922 s46: bool = false,
1923 s47: bool = false,
1924 s48: bool = false,
1925 s49: bool = false,
1926 s50: bool = false,
1927 s51: bool = false,
1928 s52: bool = false,
1929 s53: bool = false,
1930 s54: bool = false,
1931 s55: bool = false,
1932 s56: bool = false,
1933 s57: bool = false,
1934 s58: bool = false,
1935 s59: bool = false,
1936 s60: bool = false,
1937 s61: bool = false,
1938 s62: bool = false,
1939 s63: bool = false,
1940
1941 vixr: bool = false,
1942 vl: bool = false,
1943
1944 vm0: bool = false,
1945 vm1: bool = false,
1946 vm2: bool = false,
1947 vm3: bool = false,
1948 vm4: bool = false,
1949 vm5: bool = false,
1950 vm6: bool = false,
1951 vm7: bool = false,
1952 vm8: bool = false,
1953 vm9: bool = false,
1954 vm10: bool = false,
1955 vm11: bool = false,
1956 vm12: bool = false,
1957 vm13: bool = false,
1958 vm14: bool = false,
1959 vm15: bool = false,
1960
1961 v0: bool = false,
1962 v1: bool = false,
1963 v2: bool = false,
1964 v3: bool = false,
1965 v4: bool = false,
1966 v5: bool = false,
1967 v6: bool = false,
1968 v7: bool = false,
1969 v8: bool = false,
1970 v9: bool = false,
1971 v10: bool = false,
1972 v11: bool = false,
1973 v12: bool = false,
1974 v13: bool = false,
1975 v14: bool = false,
1976 v15: bool = false,
1977 v16: bool = false,
1978 v17: bool = false,
1979 v18: bool = false,
1980 v19: bool = false,
1981 v20: bool = false,
1982 v21: bool = false,
1983 v22: bool = false,
1984 v23: bool = false,
1985 v24: bool = false,
1986 v25: bool = false,
1987 v26: bool = false,
1988 v27: bool = false,
1989 v28: bool = false,
1990 v29: bool = false,
1991 v30: bool = false,
1992 v31: bool = false,
1993 v32: bool = false,
1994 v33: bool = false,
1995 v34: bool = false,
1996 v35: bool = false,
1997 v36: bool = false,
1998 v37: bool = false,
1999 v38: bool = false,
2000 v39: bool = false,
2001 v40: bool = false,
2002 v41: bool = false,
2003 v42: bool = false,
2004 v43: bool = false,
2005 v44: bool = false,
2006 v45: bool = false,
2007 v46: bool = false,
2008 v47: bool = false,
2009 v48: bool = false,
2010 v49: bool = false,
2011 v50: bool = false,
2012 v51: bool = false,
2013 v52: bool = false,
2014 v53: bool = false,
2015 v54: bool = false,
2016 v55: bool = false,
2017 v56: bool = false,
2018 v57: bool = false,
2019 v58: bool = false,
2020 v59: bool = false,
2021 v60: bool = false,
2022 v61: bool = false,
2023 v62: bool = false,
2024 v63: bool = false,
2025 },
2026 .kalimba => packed struct {
2027 /// Whether the inline assembly code may perform stores to memory
2028 /// addresses other than those derived from input pointer provenance.
2029 memory: bool = false,
2030
2031 i0: bool = false,
2032 i1: bool = false,
2033 i2: bool = false,
2034 i3: bool = false,
2035 i4: bool = false,
2036 i5: bool = false,
2037 i6: bool = false,
2038 i7: bool = false,
2039
2040 m0: bool = false,
2041 m1: bool = false,
2042 m2: bool = false,
2043 m3: bool = false,
2044 l0: bool = false,
2045 l1: bool = false,
2046 l2: bool = false,
2047 l3: bool = false,
2048 l4: bool = false,
2049 l5: bool = false,
2050 doloopstart: bool = false,
2051 doloopend: bool = false,
2052 divresult: bool = false,
2053 divremainder: bool = false,
2054 rmac: bool = false,
2055 rmac0: bool = false,
2056 rmac1: bool = false,
2057 rmac2: bool = false,
2058 rlink: bool = false,
2059 rflags: bool = false,
2060 r0: bool = false,
2061 r1: bool = false,
2062 r2: bool = false,
2063 r3: bool = false,
2064 r4: bool = false,
2065 r5: bool = false,
2066 r6: bool = false,
2067 r7: bool = false,
2068 r8: bool = false,
2069 r9: bool = false,
2070 r10: bool = false,
2071 },
2072 .or1k => packed struct {
2073 /// Whether the inline assembly code may perform stores to memory
2074 /// addresses other than those derived from input pointer provenance.
2075 memory: bool = false,
2076
2077 maclo: bool = false,
2078 machi: bool = false,
2079 fpcsr: bool = false,
2080 fpmaddlo: bool = false,
2081 fpmaddhi: bool = false,
2082 vmaclo: bool = false,
2083 vmachi: bool = false,
2084
2085 r0: bool = false,
2086 r1: bool = false,
2087 r2: bool = false,
2088 r3: bool = false,
2089 r4: bool = false,
2090 r5: bool = false,
2091 r6: bool = false,
2092 r7: bool = false,
2093 r8: bool = false,
2094 r9: bool = false,
2095 r10: bool = false,
2096 r11: bool = false,
2097 r12: bool = false,
2098 r13: bool = false,
2099 r14: bool = false,
2100 r15: bool = false,
2101 r16: bool = false,
2102 r17: bool = false,
2103 r18: bool = false,
2104 r19: bool = false,
2105 r20: bool = false,
2106 r21: bool = false,
2107 r22: bool = false,
2108 r23: bool = false,
2109 r24: bool = false,
2110 r25: bool = false,
2111 r26: bool = false,
2112 r27: bool = false,
2113 r28: bool = false,
2114 r29: bool = false,
2115 r30: bool = false,
2116 r31: bool = false,
2117 },
2118 .csky => packed struct {
2119 /// Whether the inline assembly code may perform stores to memory
2120 /// addresses other than those derived from input pointer provenance.
2121 memory: bool = false,
2122
2123 psr: bool = false,
2124 hi: bool = false,
2125 lo: bool = false,
2126
2127 r0: bool = false,
2128 r1: bool = false,
2129 r2: bool = false,
2130 r3: bool = false,
2131 r4: bool = false,
2132 r5: bool = false,
2133 r6: bool = false,
2134 r7: bool = false,
2135 r8: bool = false,
2136 r9: bool = false,
2137 r10: bool = false,
2138 r11: bool = false,
2139 r12: bool = false,
2140 r13: bool = false,
2141 r14: bool = false,
2142 r15: bool = false,
2143 r16: bool = false,
2144 r17: bool = false,
2145 r18: bool = false,
2146 r19: bool = false,
2147 r20: bool = false,
2148 r21: bool = false,
2149 r22: bool = false,
2150 r23: bool = false,
2151 r24: bool = false,
2152 r25: bool = false,
2153 r26: bool = false,
2154 r27: bool = false,
2155 r28: bool = false,
2156 r29: bool = false,
2157 r30: bool = false,
2158 r31: bool = false,
2159
2160 vr0: bool = false,
2161 vr1: bool = false,
2162 vr2: bool = false,
2163 vr3: bool = false,
2164 vr4: bool = false,
2165 vr5: bool = false,
2166 vr6: bool = false,
2167 vr7: bool = false,
2168 vr8: bool = false,
2169 vr9: bool = false,
2170 vr10: bool = false,
2171 vr11: bool = false,
2172 vr12: bool = false,
2173 vr13: bool = false,
2174 vr14: bool = false,
2175 vr15: bool = false,
2176 vr16: bool = false,
2177 vr17: bool = false,
2178 vr18: bool = false,
2179 vr19: bool = false,
2180 vr20: bool = false,
2181 vr21: bool = false,
2182 vr22: bool = false,
2183 vr23: bool = false,
2184 vr24: bool = false,
2185 vr25: bool = false,
2186 vr26: bool = false,
2187 vr27: bool = false,
2188 vr28: bool = false,
2189 vr29: bool = false,
2190 vr30: bool = false,
2191 vr31: bool = false,
2192 },
2193 .arc, .arceb => packed struct {
2194 /// Whether the inline assembly code may perform stores to memory
2195 /// addresses other than those derived from input pointer provenance.
2196 memory: bool = false,
2197
2198 status32: bool = false,
2199 aux_macmode: bool = false,
2200 mulhi: bool = false,
2201 lp_start: bool = false,
2202 lp_end: bool = false,
2203 jli_base: bool = false,
2204 ldi_base: bool = false,
2205 ei_base: bool = false,
2206
2207 r0: bool = false,
2208 r1: bool = false,
2209 r2: bool = false,
2210 r3: bool = false,
2211 r4: bool = false,
2212 r5: bool = false,
2213 r6: bool = false,
2214 r7: bool = false,
2215 r8: bool = false,
2216 r9: bool = false,
2217 r10: bool = false,
2218 r11: bool = false,
2219 r12: bool = false,
2220 r13: bool = false,
2221 r14: bool = false,
2222 r15: bool = false,
2223 r16: bool = false,
2224 r17: bool = false,
2225 r18: bool = false,
2226 r19: bool = false,
2227 r20: bool = false,
2228 r21: bool = false,
2229 r22: bool = false,
2230 r23: bool = false,
2231 r24: bool = false,
2232 r25: bool = false,
2233 r26: bool = false,
2234 r27: bool = false,
2235 r28: bool = false,
2236 r29: bool = false,
2237 r30: bool = false,
2238 r31: bool = false,
2239 r32: bool = false,
2240 r33: bool = false,
2241 r34: bool = false,
2242 r35: bool = false,
2243 r36: bool = false,
2244 r37: bool = false,
2245 r38: bool = false,
2246 r39: bool = false,
2247 r40: bool = false,
2248 r41: bool = false,
2249 r42: bool = false,
2250 r43: bool = false,
2251 r44: bool = false,
2252 r45: bool = false,
2253 r46: bool = false,
2254 r47: bool = false,
2255 r48: bool = false,
2256 r49: bool = false,
2257 r50: bool = false,
2258 r51: bool = false,
2259 r52: bool = false,
2260 r53: bool = false,
2261 r54: bool = false,
2262 r55: bool = false,
2263 r56: bool = false,
2264 r57: bool = false,
2265 r58: bool = false,
2266 r59: bool = false,
2267 r60: bool = false,
2268
2269 fmp_ctrl: bool = false,
2270 dsp_ctrl: bool = false,
2271 acc0_lo: bool = false,
2272 acc0_glo: bool = false,
2273 acc0_hi: bool = false,
2274 acc0_ghi: bool = false,
2275 fp_ctrl: bool = false,
2276 fpu_status: bool = false,
2277 vfpu_status: bool = false,
2278
2279 f0: bool = false,
2280 f1: bool = false,
2281 f2: bool = false,
2282 f3: bool = false,
2283 f4: bool = false,
2284 f5: bool = false,
2285 f6: bool = false,
2286 f7: bool = false,
2287 f8: bool = false,
2288 f9: bool = false,
2289 f10: bool = false,
2290 f11: bool = false,
2291 f12: bool = false,
2292 f13: bool = false,
2293 f14: bool = false,
2294 f15: bool = false,
2295 f16: bool = false,
2296 f17: bool = false,
2297 f18: bool = false,
2298 f19: bool = false,
2299 f20: bool = false,
2300 f21: bool = false,
2301 f22: bool = false,
2302 f23: bool = false,
2303 f24: bool = false,
2304 f25: bool = false,
2305 f26: bool = false,
2306 f27: bool = false,
2307 f28: bool = false,
2308 f29: bool = false,
2309 f30: bool = false,
2310 f31: bool = false,
2311 },
2312 .loongarch32, .loongarch64 => packed struct {
2313 /// Whether the inline assembly code may perform stores to memory
2314 /// addresses other than those derived from input pointer provenance.
2315 memory: bool = false,
2316
2317 r1: bool = false,
2318 r2: bool = false,
2319 r3: bool = false,
2320 r4: bool = false,
2321 r5: bool = false,
2322 r6: bool = false,
2323 r7: bool = false,
2324 r8: bool = false,
2325 r9: bool = false,
2326 r10: bool = false,
2327 r11: bool = false,
2328 r12: bool = false,
2329 r13: bool = false,
2330 r14: bool = false,
2331 r15: bool = false,
2332 r16: bool = false,
2333 r17: bool = false,
2334 r18: bool = false,
2335 r19: bool = false,
2336 r20: bool = false,
2337 r21: bool = false,
2338 r22: bool = false,
2339 r23: bool = false,
2340 r24: bool = false,
2341 r25: bool = false,
2342 r26: bool = false,
2343 r27: bool = false,
2344 r28: bool = false,
2345 r29: bool = false,
2346 r30: bool = false,
2347 r31: bool = false,
2348
2349 fcc0: bool = false,
2350 fcc1: bool = false,
2351 fcc2: bool = false,
2352 fcc3: bool = false,
2353 fcc4: bool = false,
2354 fcc5: bool = false,
2355 fcc6: bool = false,
2356 fcc7: bool = false,
2357
2358 fcsr0: bool = false,
2359 fcsr1: bool = false,
2360 fcsr2: bool = false,
2361 fcsr3: bool = false,
2362
2363 xr0: bool = false,
2364 xr1: bool = false,
2365 xr2: bool = false,
2366 xr3: bool = false,
2367 xr4: bool = false,
2368 xr5: bool = false,
2369 xr6: bool = false,
2370 xr7: bool = false,
2371 xr8: bool = false,
2372 xr9: bool = false,
2373 xr10: bool = false,
2374 xr11: bool = false,
2375 xr12: bool = false,
2376 xr13: bool = false,
2377 xr14: bool = false,
2378 xr15: bool = false,
2379 xr16: bool = false,
2380 xr17: bool = false,
2381 xr18: bool = false,
2382 xr19: bool = false,
2383 xr20: bool = false,
2384 xr21: bool = false,
2385 xr22: bool = false,
2386 xr23: bool = false,
2387 xr24: bool = false,
2388 xr25: bool = false,
2389 xr26: bool = false,
2390 xr27: bool = false,
2391 xr28: bool = false,
2392 xr29: bool = false,
2393 xr30: bool = false,
2394 xr31: bool = false,
2395
2396 vr0: bool = false,
2397 vr1: bool = false,
2398 vr2: bool = false,
2399 vr3: bool = false,
2400 vr4: bool = false,
2401 vr5: bool = false,
2402 vr6: bool = false,
2403 vr7: bool = false,
2404 vr8: bool = false,
2405 vr9: bool = false,
2406 vr10: bool = false,
2407 vr11: bool = false,
2408 vr12: bool = false,
2409 vr13: bool = false,
2410 vr14: bool = false,
2411 vr15: bool = false,
2412 vr16: bool = false,
2413 vr17: bool = false,
2414 vr18: bool = false,
2415 vr19: bool = false,
2416 vr20: bool = false,
2417 vr21: bool = false,
2418 vr22: bool = false,
2419 vr23: bool = false,
2420 vr24: bool = false,
2421 vr25: bool = false,
2422 vr26: bool = false,
2423 vr27: bool = false,
2424 vr28: bool = false,
2425 vr29: bool = false,
2426 vr30: bool = false,
2427 vr31: bool = false,
2428
2429 f0: bool = false,
2430 f1: bool = false,
2431 f2: bool = false,
2432 f3: bool = false,
2433 f4: bool = false,
2434 f5: bool = false,
2435 f6: bool = false,
2436 f7: bool = false,
2437 f8: bool = false,
2438 f9: bool = false,
2439 f10: bool = false,
2440 f11: bool = false,
2441 f12: bool = false,
2442 f13: bool = false,
2443 f14: bool = false,
2444 f15: bool = false,
2445 f16: bool = false,
2446 f17: bool = false,
2447 f18: bool = false,
2448 f19: bool = false,
2449 f20: bool = false,
2450 f21: bool = false,
2451 f22: bool = false,
2452 f23: bool = false,
2453 f24: bool = false,
2454 f25: bool = false,
2455 f26: bool = false,
2456 f27: bool = false,
2457 f28: bool = false,
2458 f29: bool = false,
2459 f30: bool = false,
2460 f31: bool = false,
2461 },
2462 .powerpc, .powerpcle, .powerpc64, .powerpc64le => packed struct {
2463 /// Whether the inline assembly code may perform stores to memory
2464 /// addresses other than those derived from input pointer provenance.
2465 memory: bool = false,
2466
2467 cr0: bool = false,
2468 cr1: bool = false,
2469 cr2: bool = false,
2470 cr3: bool = false,
2471 cr4: bool = false,
2472 cr5: bool = false,
2473 cr6: bool = false,
2474 cr7: bool = false,
2475
2476 xer: bool = false,
2477 ctr: bool = false,
2478 lr: bool = false,
2479
2480 r0: bool = false,
2481 r1: bool = false,
2482 r2: bool = false,
2483 r3: bool = false,
2484 r4: bool = false,
2485 r5: bool = false,
2486 r6: bool = false,
2487 r7: bool = false,
2488 r8: bool = false,
2489 r9: bool = false,
2490 r10: bool = false,
2491 r11: bool = false,
2492 r12: bool = false,
2493 r13: bool = false,
2494 r14: bool = false,
2495 r15: bool = false,
2496 r16: bool = false,
2497 r17: bool = false,
2498 r18: bool = false,
2499 r19: bool = false,
2500 r20: bool = false,
2501 r21: bool = false,
2502 r22: bool = false,
2503 r23: bool = false,
2504 r24: bool = false,
2505 r25: bool = false,
2506 r26: bool = false,
2507 r27: bool = false,
2508 r28: bool = false,
2509 r29: bool = false,
2510 r30: bool = false,
2511 r31: bool = false,
2512
2513 fpscr: bool = false,
2514 vscr: bool = false,
2515
2516 vs0: bool = false,
2517 vs1: bool = false,
2518 vs2: bool = false,
2519 vs3: bool = false,
2520 vs4: bool = false,
2521 vs5: bool = false,
2522 vs6: bool = false,
2523 vs7: bool = false,
2524 vs8: bool = false,
2525 vs9: bool = false,
2526 vs10: bool = false,
2527 vs11: bool = false,
2528 vs12: bool = false,
2529 vs13: bool = false,
2530 vs14: bool = false,
2531 vs15: bool = false,
2532 vs16: bool = false,
2533 vs17: bool = false,
2534 vs18: bool = false,
2535 vs19: bool = false,
2536 vs20: bool = false,
2537 vs21: bool = false,
2538 vs22: bool = false,
2539 vs23: bool = false,
2540 vs24: bool = false,
2541 vs25: bool = false,
2542 vs26: bool = false,
2543 vs27: bool = false,
2544 vs28: bool = false,
2545 vs29: bool = false,
2546 vs30: bool = false,
2547 vs31: bool = false,
2548 vs32: bool = false,
2549 vs33: bool = false,
2550 vs34: bool = false,
2551 vs35: bool = false,
2552 vs36: bool = false,
2553 vs37: bool = false,
2554 vs38: bool = false,
2555 vs39: bool = false,
2556 vs40: bool = false,
2557 vs41: bool = false,
2558 vs42: bool = false,
2559 vs43: bool = false,
2560 vs44: bool = false,
2561 vs45: bool = false,
2562 vs46: bool = false,
2563 vs47: bool = false,
2564 vs48: bool = false,
2565 vs49: bool = false,
2566 vs50: bool = false,
2567 vs51: bool = false,
2568 vs52: bool = false,
2569 vs53: bool = false,
2570 vs54: bool = false,
2571 vs55: bool = false,
2572 vs56: bool = false,
2573 vs57: bool = false,
2574 vs58: bool = false,
2575 vs59: bool = false,
2576 vs60: bool = false,
2577 vs61: bool = false,
2578 vs62: bool = false,
2579 vs63: bool = false,
2580
2581 f0: bool = false,
2582 f1: bool = false,
2583 f2: bool = false,
2584 f3: bool = false,
2585 f4: bool = false,
2586 f5: bool = false,
2587 f6: bool = false,
2588 f7: bool = false,
2589 f8: bool = false,
2590 f9: bool = false,
2591 f10: bool = false,
2592 f11: bool = false,
2593 f12: bool = false,
2594 f13: bool = false,
2595 f14: bool = false,
2596 f15: bool = false,
2597 f16: bool = false,
2598 f17: bool = false,
2599 f18: bool = false,
2600 f19: bool = false,
2601 f20: bool = false,
2602 f21: bool = false,
2603 f22: bool = false,
2604 f23: bool = false,
2605 f24: bool = false,
2606 f25: bool = false,
2607 f26: bool = false,
2608 f27: bool = false,
2609 f28: bool = false,
2610 f29: bool = false,
2611 f30: bool = false,
2612 f31: bool = false,
2613
2614 v0: bool = false,
2615 v1: bool = false,
2616 v2: bool = false,
2617 v3: bool = false,
2618 v4: bool = false,
2619 v5: bool = false,
2620 v6: bool = false,
2621 v7: bool = false,
2622 v8: bool = false,
2623 v9: bool = false,
2624 v10: bool = false,
2625 v11: bool = false,
2626 v12: bool = false,
2627 v13: bool = false,
2628 v14: bool = false,
2629 v15: bool = false,
2630 v16: bool = false,
2631 v17: bool = false,
2632 v18: bool = false,
2633 v19: bool = false,
2634 v20: bool = false,
2635 v21: bool = false,
2636 v22: bool = false,
2637 v23: bool = false,
2638 v24: bool = false,
2639 v25: bool = false,
2640 v26: bool = false,
2641 v27: bool = false,
2642 v28: bool = false,
2643 v29: bool = false,
2644 v30: bool = false,
2645 v31: bool = false,
2646
2647 acc0: bool = false,
2648 acc1: bool = false,
2649 acc2: bool = false,
2650 acc3: bool = false,
2651 acc4: bool = false,
2652 acc5: bool = false,
2653 acc6: bool = false,
2654 acc7: bool = false,
2655
2656 acc: bool = false,
2657 spefsc: bool = false,
2658 },
2659 .mips, .mipsel, .mips64, .mips64el => packed struct {
2660 /// Whether the inline assembly code may perform stores to memory
2661 /// addresses other than those derived from input pointer provenance.
2662 memory: bool = false,
2663
2664 lr: bool = false,
2665
2666 hi: bool = false,
2667 lo: bool = false,
2668 ac0: bool = false,
2669 ac1: bool = false,
2670 ac2: bool = false,
2671 ac3: bool = false,
2672 acx: bool = false,
2673
2674 r1: bool = false,
2675 r2: bool = false,
2676 r3: bool = false,
2677 r4: bool = false,
2678 r5: bool = false,
2679 r6: bool = false,
2680 r7: bool = false,
2681 r8: bool = false,
2682 r9: bool = false,
2683 r10: bool = false,
2684 r11: bool = false,
2685 r12: bool = false,
2686 r13: bool = false,
2687 r14: bool = false,
2688 r15: bool = false,
2689 r16: bool = false,
2690 r17: bool = false,
2691 r18: bool = false,
2692 r19: bool = false,
2693 r20: bool = false,
2694 r21: bool = false,
2695 r22: bool = false,
2696 r23: bool = false,
2697 r24: bool = false,
2698 r25: bool = false,
2699 r26: bool = false,
2700 r27: bool = false,
2701 r28: bool = false,
2702 r29: bool = false,
2703 r30: bool = false,
2704 r31: bool = false,
2705
2706 fcsr: bool = false,
2707 fcc0: bool = false,
2708 fcc1: bool = false,
2709 fcc2: bool = false,
2710 fcc3: bool = false,
2711 fcc4: bool = false,
2712 fcc5: bool = false,
2713 fcc6: bool = false,
2714 fcc7: bool = false,
2715
2716 w0: bool = false,
2717 w1: bool = false,
2718 w2: bool = false,
2719 w3: bool = false,
2720 w4: bool = false,
2721 w5: bool = false,
2722 w6: bool = false,
2723 w7: bool = false,
2724 w8: bool = false,
2725 w9: bool = false,
2726 w10: bool = false,
2727 w11: bool = false,
2728 w12: bool = false,
2729 w13: bool = false,
2730 w14: bool = false,
2731 w15: bool = false,
2732 w16: bool = false,
2733 w17: bool = false,
2734 w18: bool = false,
2735 w19: bool = false,
2736 w20: bool = false,
2737 w21: bool = false,
2738 w22: bool = false,
2739 w23: bool = false,
2740 w24: bool = false,
2741 w25: bool = false,
2742 w26: bool = false,
2743 w27: bool = false,
2744 w28: bool = false,
2745 w29: bool = false,
2746 w30: bool = false,
2747 w31: bool = false,
2748
2749 f0: bool = false,
2750 f1: bool = false,
2751 f2: bool = false,
2752 f3: bool = false,
2753 f4: bool = false,
2754 f5: bool = false,
2755 f6: bool = false,
2756 f7: bool = false,
2757 f8: bool = false,
2758 f9: bool = false,
2759 f10: bool = false,
2760 f11: bool = false,
2761 f12: bool = false,
2762 f13: bool = false,
2763 f14: bool = false,
2764 f15: bool = false,
2765 f16: bool = false,
2766 f17: bool = false,
2767 f18: bool = false,
2768 f19: bool = false,
2769 f20: bool = false,
2770 f21: bool = false,
2771 f22: bool = false,
2772 f23: bool = false,
2773 f24: bool = false,
2774 f25: bool = false,
2775 f26: bool = false,
2776 f27: bool = false,
2777 f28: bool = false,
2778 f29: bool = false,
2779 f30: bool = false,
2780 f31: bool = false,
2781
2782 mpl0: bool = false,
2783 mpl1: bool = false,
2784 mpl2: bool = false,
2785
2786 p0: bool = false,
2787 p1: bool = false,
2788 p2: bool = false,
2789
2790 msa_ir: bool = false,
2791 msa_csr: bool = false,
2792 msa_access: bool = false,
2793 msa_save: bool = false,
2794 msa_modify: bool = false,
2795 msa_request: bool = false,
2796 msa_map: bool = false,
2797 msa_unmap: bool = false,
2798 },
2799 .alpha => packed struct {
2800 /// Whether the inline assembly code may perform stores to memory
2801 /// addresses other than those derived from input pointer provenance.
2802 memory: bool = false,
2803
2804 r0: bool = false,
2805 r1: bool = false,
2806 r2: bool = false,
2807 r3: bool = false,
2808 r4: bool = false,
2809 r5: bool = false,
2810 r6: bool = false,
2811 r7: bool = false,
2812 r8: bool = false,
2813 r9: bool = false,
2814 r10: bool = false,
2815 r11: bool = false,
2816 r12: bool = false,
2817 r13: bool = false,
2818 r14: bool = false,
2819 r15: bool = false,
2820 r16: bool = false,
2821 r17: bool = false,
2822 r18: bool = false,
2823 r19: bool = false,
2824 r20: bool = false,
2825 r21: bool = false,
2826 r22: bool = false,
2827 r23: bool = false,
2828 r24: bool = false,
2829 r25: bool = false,
2830 r26: bool = false,
2831 r27: bool = false,
2832 r28: bool = false,
2833 r29: bool = false,
2834 r30: bool = false,
2835
2836 f0: bool = false,
2837 f1: bool = false,
2838 f2: bool = false,
2839 f3: bool = false,
2840 f4: bool = false,
2841 f5: bool = false,
2842 f6: bool = false,
2843 f7: bool = false,
2844 f8: bool = false,
2845 f9: bool = false,
2846 f10: bool = false,
2847 f11: bool = false,
2848 f12: bool = false,
2849 f13: bool = false,
2850 f14: bool = false,
2851 f15: bool = false,
2852 f16: bool = false,
2853 f17: bool = false,
2854 f18: bool = false,
2855 f19: bool = false,
2856 f20: bool = false,
2857 f21: bool = false,
2858 f22: bool = false,
2859 f23: bool = false,
2860 f24: bool = false,
2861 f25: bool = false,
2862 f26: bool = false,
2863 f27: bool = false,
2864 f28: bool = false,
2865 f29: bool = false,
2866 f30: bool = false,
2867 },
2868 .hppa, .hppa64 => packed struct {
2869 /// Whether the inline assembly code may perform stores to memory
2870 /// addresses other than those derived from input pointer provenance.
2871 memory: bool = false,
2872
2873 sar: bool = false,
2874
2875 r1: bool = false,
2876 r2: bool = false,
2877 r3: bool = false,
2878 r4: bool = false,
2879 r5: bool = false,
2880 r6: bool = false,
2881 r7: bool = false,
2882 r8: bool = false,
2883 r9: bool = false,
2884 r10: bool = false,
2885 r11: bool = false,
2886 r12: bool = false,
2887 r13: bool = false,
2888 r14: bool = false,
2889 r15: bool = false,
2890 r16: bool = false,
2891 r17: bool = false,
2892 r18: bool = false,
2893 r19: bool = false,
2894 r20: bool = false,
2895 r21: bool = false,
2896 r22: bool = false,
2897 r23: bool = false,
2898 r24: bool = false,
2899 r25: bool = false,
2900 r26: bool = false,
2901 r27: bool = false,
2902 r28: bool = false,
2903 r29: bool = false,
2904 r30: bool = false,
2905 r31: bool = false,
2906
2907 fr4: bool = false,
2908 fr5: bool = false,
2909 fr6: bool = false,
2910 fr7: bool = false,
2911 fr8: bool = false,
2912 fr9: bool = false,
2913 fr10: bool = false,
2914 fr11: bool = false,
2915 fr12: bool = false,
2916 fr13: bool = false,
2917 fr14: bool = false,
2918 fr15: bool = false,
2919 fr16: bool = false,
2920 fr17: bool = false,
2921 fr18: bool = false,
2922 fr19: bool = false,
2923 fr20: bool = false,
2924 fr21: bool = false,
2925 fr22: bool = false,
2926 fr23: bool = false,
2927 fr24: bool = false,
2928 fr25: bool = false,
2929 fr26: bool = false,
2930 fr27: bool = false,
2931 fr28: bool = false,
2932 fr29: bool = false,
2933 fr30: bool = false,
2934 fr31: bool = false,
2935
2936 fr4r: bool = false,
2937 fr5r: bool = false,
2938 fr6r: bool = false,
2939 fr7r: bool = false,
2940 fr8r: bool = false,
2941 fr9r: bool = false,
2942 fr10r: bool = false,
2943 fr11r: bool = false,
2944 fr12r: bool = false,
2945 fr13r: bool = false,
2946 fr14r: bool = false,
2947 fr15r: bool = false,
2948 fr16r: bool = false,
2949 fr17r: bool = false,
2950 fr18r: bool = false,
2951 fr19r: bool = false,
2952 fr20r: bool = false,
2953 fr21r: bool = false,
2954 fr22r: bool = false,
2955 fr23r: bool = false,
2956 fr24r: bool = false,
2957 fr25r: bool = false,
2958 fr26r: bool = false,
2959 fr27r: bool = false,
2960 fr28r: bool = false,
2961 fr29r: bool = false,
2962 fr30r: bool = false,
2963 fr31r: bool = false,
2964 },
2965 .microblaze, .microblazeel => packed struct {
2966 /// Whether the inline assembly code may perform stores to memory
2967 /// addresses other than those derived from input pointer provenance.
2968 memory: bool = false,
2969
2970 rmsr: bool = false,
2971
2972 r1: bool = false,
2973 r2: bool = false,
2974 r3: bool = false,
2975 r4: bool = false,
2976 r5: bool = false,
2977 r6: bool = false,
2978 r7: bool = false,
2979 r8: bool = false,
2980 r9: bool = false,
2981 r10: bool = false,
2982 r11: bool = false,
2983 r12: bool = false,
2984 r13: bool = false,
2985 r14: bool = false,
2986 r15: bool = false,
2987 r16: bool = false,
2988 r17: bool = false,
2989 r18: bool = false,
2990 r19: bool = false,
2991 r20: bool = false,
2992 r21: bool = false,
2993 r22: bool = false,
2994 r23: bool = false,
2995 r24: bool = false,
2996 r25: bool = false,
2997 r26: bool = false,
2998 r27: bool = false,
2999 r28: bool = false,
3000 r29: bool = false,
3001 r30: bool = false,
3002 r31: bool = false,
3003 },
3004 .sh, .sheb => packed struct {
3005 /// Whether the inline assembly code may perform stores to memory
3006 /// addresses other than those derived from input pointer provenance.
3007 memory: bool = false,
3008
3009 sr: bool = false,
3010 gbr: bool = false,
3011 pr: bool = false,
3012
3013 r0: bool = false,
3014 r1: bool = false,
3015 r2: bool = false,
3016 r3: bool = false,
3017 r4: bool = false,
3018 r5: bool = false,
3019 r6: bool = false,
3020 r7: bool = false,
3021 r8: bool = false,
3022 r9: bool = false,
3023 r10: bool = false,
3024 r11: bool = false,
3025 r12: bool = false,
3026 r13: bool = false,
3027 r14: bool = false,
3028 r15: bool = false,
3029
3030 mach: bool = false,
3031 macl: bool = false,
3032
3033 fr0: bool = false,
3034 fr1: bool = false,
3035 fr2: bool = false,
3036 fr3: bool = false,
3037 fr4: bool = false,
3038 fr5: bool = false,
3039 fr6: bool = false,
3040 fr7: bool = false,
3041 fr8: bool = false,
3042 fr9: bool = false,
3043 fr10: bool = false,
3044 fr11: bool = false,
3045 fr12: bool = false,
3046 fr13: bool = false,
3047 fr14: bool = false,
3048 fr15: bool = false,
3049
3050 dr0: bool = false,
3051 dr2: bool = false,
3052 dr4: bool = false,
3053 dr6: bool = false,
3054 dr8: bool = false,
3055 dr10: bool = false,
3056 dr12: bool = false,
3057 dr14: bool = false,
3058
3059 fv0: bool = false,
3060 fv4: bool = false,
3061 fv8: bool = false,
3062 fv12: bool = false,
3063
3064 xf0: bool = false,
3065 xf1: bool = false,
3066 xf2: bool = false,
3067 xf3: bool = false,
3068 xf4: bool = false,
3069 xf5: bool = false,
3070 xf6: bool = false,
3071 xf7: bool = false,
3072 xf8: bool = false,
3073 xf9: bool = false,
3074 xf10: bool = false,
3075 xf11: bool = false,
3076 xf12: bool = false,
3077 xf13: bool = false,
3078 xf14: bool = false,
3079 xf15: bool = false,
3080
3081 xd0: bool = false,
3082 xd2: bool = false,
3083 xd4: bool = false,
3084 xd6: bool = false,
3085 xd8: bool = false,
3086 xd10: bool = false,
3087 xd12: bool = false,
3088 xd14: bool = false,
3089
3090 xmtrx: bool = false,
3091
3092 fpul: bool = false,
3093 fpscr: bool = false,
3094
3095 ms: bool = false,
3096 me: bool = false,
3097
3098 rs: bool = false,
3099 re: bool = false,
3100
3101 a0: bool = false,
3102 a0g: bool = false,
3103 a1: bool = false,
3104 a1g: bool = false,
3105 m0: bool = false,
3106 m1: bool = false,
3107 x0: bool = false,
3108 x1: bool = false,
3109 y0: bool = false,
3110 y1: bool = false,
3111
3112 dsr: bool = false,
3113 },
3114 else => packed struct {
3115 /// Whether the inline assembly code may perform stores to memory
3116 /// addresses other than those derived from input pointer provenance.
3117 memory: bool = false,
3118 },
3119};
lib/std/std.zig+4-1
...@@ -65,8 +65,11 @@ pub const array_hash_map = @import("array_hash_map.zig");...@@ -65,8 +65,11 @@ pub const array_hash_map = @import("array_hash_map.zig");
65pub const atomic = @import("atomic.zig");65pub const atomic = @import("atomic.zig");
66pub const base64 = @import("base64.zig");66pub const base64 = @import("base64.zig");
67pub const bit_set = @import("bit_set.zig");67pub const bit_set = @import("bit_set.zig");
68/// Deprecated; use `lang`.
69///
70/// To be removed after Zig 0.17.0.
68pub const builtin = lang;71pub const builtin = lang;
69pub const lang = @import("builtin.zig");72pub const lang = @import("lang.zig");
70pub const c = @import("c.zig");73pub const c = @import("c.zig");
71pub const coff = @import("coff.zig");74pub const coff = @import("coff.zig");
72pub const compress = @import("compress.zig");75pub const compress = @import("compress.zig");