package core:rexcode/isa/rsp

⌘K
Ctrl+K
or
/

    Overview

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    rexcode · Brendan Punsky (dotbmp@github), original author

    Index

    Procedures (514)
    Procedure Groups (0)

    This section is empty.

    Types

    CP0_Reg ¶

    CP0_Reg :: enum u8 {
    	SP_MEM_ADDR  = 0,  // DMEM/IMEM offset for DMA
    	SP_DRAM_ADDR = 1,  // RDRAM address for DMA
    	SP_RD_LEN    = 2,  // DMA read length
    	SP_WR_LEN    = 3,  // DMA write length
    	SP_STATUS    = 4,  // RSP status (halt/broke/busy)
    	SP_DMA_FULL  = 5, 
    	SP_DMA_BUSY  = 6, 
    	SP_SEMAPHORE = 7, 
    	DP_START     = 8,  // RDP command buffer start
    	DP_END       = 9, 
    	DP_CURRENT   = 10, 
    	DP_STATUS    = 11, 
    	DP_CLOCK     = 12, 
    	DP_BUFBUSY   = 13, 
    	DP_PIPEBUSY  = 14, 
    	DP_TMEM      = 15, 
    }

    Decode_Entry ¶

    Decode_Entry :: struct #packed {
    	mnemonic: Mnemonic,
    	// 2
    	ops:      [4]Operand_Type,
    	// 4
    	enc:      [4]Operand_Encoding,
    	// 4
    	bits:     u32,
    	// 4
    	mask:     u32,
    	// 4
    	feature:  Feature,
    	// 1
    	flags:    Encoding_Flags,
    }

    Decode_Index ¶

    Decode_Index :: struct #packed {
    	start: u16,
    	count: u16,
    }

    Encode_Run ¶

    Encode_Run :: struct {
    	start: u32,
    	count: u32,
    }
     

    Companion run index: ENCODE_RUNS[mnemonic] -> contiguous run in ENCODE_FORMS.

    Encoding ¶

    Encoding :: struct #packed {
    	mnemonic: Mnemonic,
    	// 2
    	ops:      [4]Operand_Type,
    	// 4
    	enc:      [4]Operand_Encoding,
    	// 4
    	bits:     u32,
    	// 4
    	mask:     u32,
    	// 4
    	feature:  Feature,
    	// 1
    	flags:    Encoding_Flags,
    }

    Encoding_Flags ¶

    Encoding_Flags :: distinct bit_field u8 {
    	delay_slot: bool | 1,
    	likely:     bool | 1,
    	_:          u8 | 6,
    }

    Endianness ¶

    Endianness :: enum u8 {
    	LITTLE = 0, 
    	BIG    = 1, 
    }
     

    N64 is big-endian; carry the same Endianness enum as mips/ for uniformity even though only BIG is "wire-correct" for RSP IMEM in most toolchains.

    Related Procedures With Parameters

    Error ¶

    Error :: rexcode_isa.Error

    Error_Code ¶

    Error_Code :: rexcode_isa.Error_Code

    Feature ¶

    Feature :: enum u8 {
    	RSP_SCALAR, // scalar MIPS subset on the RSP core
    	RSP_VU,     // RSP vector unit (COP2 with CO=1)
    	RSP_VLS,    // RSP vector load/store (op=0x32/0x3A)
    }

    GPR ¶

    GPR :: enum u8 {
    	ZERO = 0, 
    	AT   = 1, 
    	V0   = 2, 
    	V1   = 3, 
    	A0   = 4, 
    	A1   = 5, 
    	A2   = 6, 
    	A3   = 7, 
    	T0   = 8, 
    	T1   = 9, 
    	T2   = 10, 
    	T3   = 11, 
    	T4   = 12, 
    	T5   = 13, 
    	T6   = 14, 
    	T7   = 15, 
    	S0   = 16, 
    	S1   = 17, 
    	S2   = 18, 
    	S3   = 19, 
    	S4   = 20, 
    	S5   = 21, 
    	S6   = 22, 
    	S7   = 23, 
    	T8   = 24, 
    	T9   = 25, 
    	K0   = 26, 
    	K1   = 27, 
    	GP   = 28, 
    	SP   = 29, 
    	FP   = 30, 
    	RA   = 31, 
    }

    Instruction ¶

    Instruction :: struct #packed {
    	ops:           [4]Operand `fmt:"v,operand_count"`,
    	// 48 bytes
    	mnemonic:      Mnemonic,
    	//  2 bytes
    	operand_count: u8,
    	//  1 byte
    	flags:         Instruction_Flags,
    	//  1 byte
    	length:        u8,
    	//  1 byte (always 4)
    	_:             [11]u8,
    }
    Related Procedures With Returns

    Instruction_Flags ¶

    Instruction_Flags :: distinct bit_field u8 {
    	_: u8 | 8,
    }

    Instruction_Info ¶

    Instruction_Info :: struct {
    	offset:       u32,
    	decode_entry: u16,
    	_:            u16,
    }

    Label_Definition ¶

    Label_Definition :: rexcode_isa.Label_Definition
    Related Constants

    Label_Map ¶

    Label_Map :: rexcode_isa.Label_Map

    Mnemonic ¶

    Mnemonic :: enum u16 {
    	INVALID = 0, 
    	// R-type arithmetic / logical / shift
    	ADD, 
    	ADDU, 
    	SUB, 
    	SUBU, 
    	AND, 
    	OR, 
    	XOR, 
    	NOR, 
    	SLT, 
    	SLTU, 
    	SLL, 
    	SRL, 
    	SRA, 
    	SLLV, 
    	SRLV, 
    	SRAV, 
    	// I-type
    	ADDI, 
    	ADDIU, 
    	SLTI, 
    	SLTIU, 
    	ANDI, 
    	ORI, 
    	XORI, 
    	LUI, 
    	// Branches (with delay slot)
    	BEQ, 
    	BNE, 
    	BLEZ, 
    	BGTZ, 
    	BLTZ, 
    	BGEZ, 
    	BLTZAL, 
    	BGEZAL, 
    	// Jumps
    	J, 
    	JAL, 
    	JR, 
    	JALR, 
    	// Load / Store (no LWL/LWR/SWL/SWR on the RSP).
    	LB, 
    	LH, 
    	LW, 
    	LBU, 
    	LHU, 
    	SB, 
    	SH, 
    	SW, 
    	// System
    	BREAK, 
    	NOP, 
    	// Coprocessor moves
    	MFC0, 
    	MTC0, 
    	MFC2, 
    	MTC2, 
    	CFC2, 
    	CTC2, 
    	VMULF, 
    	VMULU, 
    	VMUDL, 
    	VMUDM, 
    	VMUDN, 
    	VMUDH, 
    	VMACF, 
    	VMACU, 
    	VMADL, 
    	VMADM, 
    	VMADN, 
    	VMADH, 
    	VADD, 
    	VSUB, 
    	VABS, 
    	VADDC, 
    	VSUBC, 
    	VSAR, 
    	VLT, 
    	VEQ, 
    	VNE, 
    	VGE, 
    	VCL, 
    	VCH, 
    	VCR, 
    	VMRG, 
    	VAND, 
    	VNAND, 
    	VOR, 
    	VNOR, 
    	VXOR, 
    	VNXOR, 
    	VRCP, 
    	VRCPL, 
    	VRCPH, 
    	VMOV, 
    	VRSQ, 
    	VRSQL, 
    	VRSQH, 
    	VNOP, 
    	LBV, 
    	LSV, 
    	LLV, 
    	LDV, 
    	LQV, 
    	LRV, 
    	LPV, 
    	LUV, 
    	LHV, 
    	LFV, 
    	LWV, 
    	LTV, 
    	SBV, 
    	SSV, 
    	SLV, 
    	SDV, 
    	SQV, 
    	SRV, 
    	SPV, 
    	SUV, 
    	SHV, 
    	SFV, 
    	SWV, 
    	STV, 
    }
    Related Procedures With Parameters

    Operand ¶

    Operand :: struct #packed {
    	using _: struct #raw_union {
    		reg:       Register,
    		// for REGISTER and VECTOR_REG
    		mem:       Memory,
    		vmem:      Vector_Mem,
    		immediate: i64,
    		relative:  i64,
    	},
    	kind:    Operand_Kind,
    	// 1 byte
    	size:    u8,
    	// 1 byte
    	element: u8,
    	// 1 byte — for VECTOR_REG
    	_:       [1]u8,
    }
    Related Procedures With Returns

    Operand_Encoding ¶

    Operand_Encoding :: enum u8 {
    	NONE, 
    	RS,          // bits 25-21
    	RT,          // bits 20-16
    	RD,          // bits 15-11
    	SHAMT,       // bits 10-6
    	IMM_16,      // bits 15-0
    	IMM_5,       // bits 10-6
    	IMM_20,      // bits 25-6
    	IMM_26,      // bits 25-0
    	OFFSET_BASE, // scalar memory (rs + 16-bit offset)
    	BRANCH_16, 
    	IMPL, 
    	// Vector-unit placements
    	VT,          // bits 20-16 (vector source 2)
    	VS,          // bits 15-11 (vector source 1)
    	VD,          // bits 10-6  (vector destination)
    	ELEM,        // bits 24-21 (element selector for vector ALU)
    	// Vector L/S placements
    	VT_LS,       // bits 20-16 (target vector reg)
    	VOP,         // bits 15-11 (vector L/S op selector LBV..LTV)
    	VELEM_LS,    // bits 10-7  (element offset for L/S)
    	VOFFSET,     // bits  6-0  (signed 7-bit offset, element-scaled)
    	VBASE,       // bits 25-21 (GPR base for vector L/S)
    }

    Operand_Kind ¶

    Operand_Kind :: enum u8 {
    	NONE, 
    	REGISTER, 
    	VECTOR_REG, // vector register with element selector
    	MEMORY, 
    	VECTOR_MEM, // vector memory: base + 7-bit offset + element selector
    	IMMEDIATE, 
    	RELATIVE, 
    }

    Operand_Type ¶

    Operand_Type :: enum u8 {
    	NONE, 
    	GPR,      // scalar GPR
    	VR,       // vector register $v0..$v31
    	VR_ELEM,  // vector register with element selector (e.g. $v3[4])
    	CP0_REG,  // RSP CP0 (DMA/status registers)
    	CP2_CTRL, // VCO / VCC / VCE
    	IMM5, 
    	IMM16S, 
    	IMM16U, 
    	IMM20, 
    	IMM26, 
    	REL16, 
    	REL_J26, 
    	MEM,      // scalar memory (base+disp16)
    	VMEM,     // vector memory (base+offset7 with element)
    }
    Print_Result :: rexcode_isa.Print_Result

    Register ¶

    Register :: distinct u16
    Related Procedures With Parameters
    Related Procedures With Returns
    Related Constants

    Relocation ¶

    Relocation :: struct #packed {
    	offset:   u32,
    	label_id: u32,
    	addend:   i32,
    	type:     Relocation_Type,
    	size:     u8,
    	inst_idx: u16,
    }

    Relocation_Type ¶

    Relocation_Type :: enum u8 {
    	NONE  = 0, 
    	REL16,     // 16-bit signed PC-rel branch (BEQ/BNE/BLEZ/BGTZ/...)
    	J26,       // 26-bit J-type region target ((target_addr >> 2) & 0x3FFFFFF)
    }

    Token ¶

    Token :: rexcode_isa.Token

    Token_Kind ¶

    Token_Kind :: rexcode_isa.Token_Kind

    VR ¶

    VR :: enum u8 {
    	V0  = 0, 
    	V1  = 1, 
    	V2  = 2, 
    	V3  = 3, 
    	V4  = 4, 
    	V5  = 5, 
    	V6  = 6, 
    	V7  = 7, 
    	V8  = 8, 
    	V9  = 9, 
    	V10 = 10, 
    	V11 = 11, 
    	V12 = 12, 
    	V13 = 13, 
    	V14 = 14, 
    	V15 = 15, 
    	V16 = 16, 
    	V17 = 17, 
    	V18 = 18, 
    	V19 = 19, 
    	V20 = 20, 
    	V21 = 21, 
    	V22 = 22, 
    	V23 = 23, 
    	V24 = 24, 
    	V25 = 25, 
    	V26 = 26, 
    	V27 = 27, 
    	V28 = 28, 
    	V29 = 29, 
    	V30 = 30, 
    	V31 = 31, 
    }

    Constants

    A0 ¶

    A0 :: Register(REG_GPR | 4)

    A1 ¶

    A1 :: Register(REG_GPR | 5)

    A2 ¶

    A2 :: Register(REG_GPR | 6)

    A3 ¶

    A3 :: Register(REG_GPR | 7)

    AT ¶

    AT :: Register(REG_GPR | 1)

    DEFAULT_PRINT_OPTIONS ¶

    DEFAULT_PRINT_OPTIONS: rexcode_isa.Print_Options : isa.DEFAULT_PRINT_OPTIONS

    FP ¶

    FP :: Register(REG_GPR | 30)

    GP ¶

    GP :: Register(REG_GPR | 28)

    K0 ¶

    K0 :: Register(REG_GPR | 26)

    K1 ¶

    K1 :: Register(REG_GPR | 27)

    LABEL_UNDEFINED ¶

    LABEL_UNDEFINED: rexcode_isa.Label_Definition : isa.LABEL_UNDEFINED

    MASK_FUNCT ¶

    MASK_FUNCT :: u32(0x0000003F)

    MASK_OPCODE ¶

    MASK_OPCODE :: u32(0xFC000000)

    MASK_RD ¶

    MASK_RD :: u32(0x0000F800)

    MASK_RS ¶

    MASK_RS :: u32(0x03E00000)

    MASK_RT ¶

    MASK_RT :: u32(0x001F0000)

    MASK_SHAMT ¶

    MASK_SHAMT :: u32(0x000007C0)

    MASK_VELEM ¶

    MASK_VELEM :: u32(0x01E00000)
     

    vector ALU element field (bits 24-21)

    MASK_VOFFS7 ¶

    MASK_VOFFS7 :: u32(0x0000007F)
     

    vector L/S offset (bits 6-0)

    MAX_INST_SIZE ¶

    MAX_INST_SIZE :: 4

    NONE ¶

    NONE :: Register(0xFFFF)

    RA ¶

    RA :: Register(REG_GPR | 31)

    REG_CP0 ¶

    REG_CP0 :: 0x0400
     

    RSP CP0 (DMA control etc.)

    REG_GPR ¶

    REG_GPR :: 0x0100

    REG_NONE ¶

    REG_NONE :: 0x0000

    REG_VC ¶

    REG_VC :: 0x0300
     

    VCO/VCC/VCE

    REG_VR ¶

    REG_VR :: 0x0200
     

    vector $v0..$v31

    S0 ¶

    S0 :: Register(REG_GPR | 16)

    S1 ¶

    S1 :: Register(REG_GPR | 17)

    S2 ¶

    S2 :: Register(REG_GPR | 18)

    S3 ¶

    S3 :: Register(REG_GPR | 19)

    S4 ¶

    S4 :: Register(REG_GPR | 20)

    S5 ¶

    S5 :: Register(REG_GPR | 21)

    S6 ¶

    S6 :: Register(REG_GPR | 22)

    S7 ¶

    S7 :: Register(REG_GPR | 23)

    SP ¶

    SP :: Register(REG_GPR | 29)

    T0 ¶

    T0 :: Register(REG_GPR | 8)

    T1 ¶

    T1 :: Register(REG_GPR | 9)

    T2 ¶

    T2 :: Register(REG_GPR | 10)

    T3 ¶

    T3 :: Register(REG_GPR | 11)

    T4 ¶

    T4 :: Register(REG_GPR | 12)

    T5 ¶

    T5 :: Register(REG_GPR | 13)

    T6 ¶

    T6 :: Register(REG_GPR | 14)

    T7 ¶

    T7 :: Register(REG_GPR | 15)

    T8 ¶

    T8 :: Register(REG_GPR | 24)

    T9 ¶

    T9 :: Register(REG_GPR | 25)

    V0 ¶

    V0 :: Register(REG_GPR | 2)

    V1 ¶

    V1 :: Register(REG_GPR | 3)

    VCC ¶

    VCC :: Register(REG_VC | 1)
     

    compare results

    VCE ¶

    VCE :: Register(REG_VC | 2)
     

    VCH/VCR low-byte carry

    VCO ¶

    VCO :: Register(REG_VC | 0)
     

    carry/overflow from vector add/sub

    VR0 ¶

    VR0 :: Register(REG_VR | 0)

    VR1 ¶

    VR1 :: Register(REG_VR | 1)

    VR10 ¶

    VR10 :: Register(REG_VR | 10)

    VR11 ¶

    VR11 :: Register(REG_VR | 11)

    VR12 ¶

    VR12 :: Register(REG_VR | 12)

    VR13 ¶

    VR13 :: Register(REG_VR | 13)

    VR14 ¶

    VR14 :: Register(REG_VR | 14)

    VR15 ¶

    VR15 :: Register(REG_VR | 15)

    VR16 ¶

    VR16 :: Register(REG_VR | 16)

    VR17 ¶

    VR17 :: Register(REG_VR | 17)

    VR18 ¶

    VR18 :: Register(REG_VR | 18)

    VR19 ¶

    VR19 :: Register(REG_VR | 19)

    VR2 ¶

    VR2 :: Register(REG_VR | 2)

    VR20 ¶

    VR20 :: Register(REG_VR | 20)

    VR21 ¶

    VR21 :: Register(REG_VR | 21)

    VR22 ¶

    VR22 :: Register(REG_VR | 22)

    VR23 ¶

    VR23 :: Register(REG_VR | 23)

    VR24 ¶

    VR24 :: Register(REG_VR | 24)

    VR25 ¶

    VR25 :: Register(REG_VR | 25)

    VR26 ¶

    VR26 :: Register(REG_VR | 26)

    VR27 ¶

    VR27 :: Register(REG_VR | 27)

    VR28 ¶

    VR28 :: Register(REG_VR | 28)

    VR29 ¶

    VR29 :: Register(REG_VR | 29)

    VR3 ¶

    VR3 :: Register(REG_VR | 3)

    VR30 ¶

    VR30 :: Register(REG_VR | 30)

    VR31 ¶

    VR31 :: Register(REG_VR | 31)

    VR4 ¶

    VR4 :: Register(REG_VR | 4)

    VR5 ¶

    VR5 :: Register(REG_VR | 5)

    VR6 ¶

    VR6 :: Register(REG_VR | 6)

    VR7 ¶

    VR7 :: Register(REG_VR | 7)

    VR8 ¶

    VR8 :: Register(REG_VR | 8)

    VR9 ¶

    VR9 :: Register(REG_VR | 9)

    ZERO ¶

    ZERO :: Register(REG_GPR | 0)

    Variables

    DECODE_ENTRIES ¶

    @(rodata)
    DECODE_ENTRIES: []Decode_Entry = …

    DECODE_INDEX_COP2 ¶

    @(rodata)
    DECODE_INDEX_COP2: []Decode_Index = …

    DECODE_INDEX_LWC2 ¶

    @(rodata)
    DECODE_INDEX_LWC2: []Decode_Index = …

    DECODE_INDEX_PRIMARY ¶

    @(rodata)
    DECODE_INDEX_PRIMARY: []Decode_Index = …

    DECODE_INDEX_REGIMM ¶

    @(rodata)
    DECODE_INDEX_REGIMM: []Decode_Index = …

    DECODE_INDEX_SPECIAL ¶

    @(rodata)
    DECODE_INDEX_SPECIAL: []Decode_Index = …

    DECODE_INDEX_SWC2 ¶

    @(rodata)
    DECODE_INDEX_SWC2: []Decode_Index = …

    ENCODE_FORMS ¶

    @(rodata)
    ENCODE_FORMS: []Encoding = …

    ENCODE_RUNS ¶

    @(rodata)
    ENCODE_RUNS: []Encode_Run = …

    Procedures

    aprint ¶

    aprint :: proc(
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    	allocator := context.allocator, 
    ) -> string {…}

    aprintln ¶

    aprintln :: proc(
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    	allocator := context.allocator, 
    ) -> string {…}

    bprint ¶

    bprint :: proc(
    	buf:          []u8, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) -> string {…}

    bprintln ¶

    bprintln :: proc(
    	buf:          []u8, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) -> string {…}

    decode ¶

    decode :: proc(
    	data:         []u8, 
    	relocs:       []Relocation, 
    	instructions: ^[dynamic]Instruction, 
    	inst_info:    ^[dynamic]Instruction_Info, 
    	label_defs:   ^[dynamic]rexcode_isa.Label_Definition, 
    	errors:       ^[dynamic]rexcode_isa.Error, 
    	endianness:   Endianness = .BIG, 
    ) -> (byte_count: u32, ok: bool) {…}

    decode_estimate_instruction_count ¶

    decode_estimate_instruction_count :: proc "contextless" (data: []u8) -> int {…}
     

    Typical-case estimate of the instruction count for data.

    decode_max_instruction_count ¶

    decode_max_instruction_count :: proc "contextless" (data: []u8) -> int {…}
     

    Instruction-count ceiling for data (RSP instructions are 4 bytes).

    decode_reserve ¶

    decode_reserve :: proc(instructions: ^[dynamic]Instruction, inst_info: ^[dynamic]Instruction_Info, label_defs: ^[dynamic]rexcode_isa.Label_Definition, data: []u8, exact: bool = false) {…}
     

    Pre-size the caller's decode output arrays for data (reserves on top of any existing elements; nil to skip; exact=true for the ceiling, else the estimate).

    emit_add_gpr_gpr_gpr ¶

    emit_add_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_addi_gpr_gpr_imm16 ¶

    emit_addi_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_addiu_gpr_gpr_imm16 ¶

    emit_addiu_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_addu_gpr_gpr_gpr ¶

    emit_addu_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_and_gpr_gpr_gpr ¶

    emit_and_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_andi_gpr_gpr_imm16 ¶

    emit_andi_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_beq_gpr_gpr_rel ¶

    emit_beq_gpr_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, label_id: u32) {…}

    emit_bgez_gpr_rel ¶

    emit_bgez_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) {…}

    emit_bgezal_gpr_rel ¶

    emit_bgezal_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) {…}

    emit_bgtz_gpr_rel ¶

    emit_bgtz_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) {…}

    emit_blez_gpr_rel ¶

    emit_blez_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) {…}

    emit_bltz_gpr_rel ¶

    emit_bltz_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) {…}

    emit_bltzal_gpr_rel ¶

    emit_bltzal_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) {…}

    emit_bne_gpr_gpr_rel ¶

    emit_bne_gpr_gpr_rel :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, label_id: u32) {…}

    emit_break_imm20 ¶

    emit_break_imm20 :: proc(instructions: ^[dynamic]Instruction, imm: i64) {…}

    emit_cfc2_gpr_cp2 ¶

    emit_cfc2_gpr_cp2 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_ctc2_gpr_cp2 ¶

    emit_ctc2_gpr_cp2 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_j_rel ¶

    emit_j_rel :: proc(instructions: ^[dynamic]Instruction, label_id: u32) {…}

    emit_jal_rel ¶

    emit_jal_rel :: proc(instructions: ^[dynamic]Instruction, label_id: u32) {…}

    emit_jalr_gpr_gpr ¶

    emit_jalr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_jr_gpr ¶

    emit_jr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register) {…}

    emit_lb_gpr_mem ¶

    emit_lb_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_lbu_gpr_mem ¶

    emit_lbu_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_lbv_vr_vmem ¶

    emit_lbv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_ldv_vr_vmem ¶

    emit_ldv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lfv_vr_vmem ¶

    emit_lfv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lh_gpr_mem ¶

    emit_lh_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_lhu_gpr_mem ¶

    emit_lhu_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_lhv_vr_vmem ¶

    emit_lhv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_llv_vr_vmem ¶

    emit_llv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lpv_vr_vmem ¶

    emit_lpv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lqv_vr_vmem ¶

    emit_lqv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lrv_vr_vmem ¶

    emit_lrv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lsv_vr_vmem ¶

    emit_lsv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_ltv_vr_vmem ¶

    emit_ltv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lui_gpr_imm16 ¶

    emit_lui_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, imm: i64) {…}

    emit_luv_vr_vmem ¶

    emit_luv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_lw_gpr_mem ¶

    emit_lw_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_lwv_vr_vmem ¶

    emit_lwv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_mfc0_gpr_cp0 ¶

    emit_mfc0_gpr_cp0 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_mfc2_gpr_vr ¶

    emit_mfc2_gpr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_mtc0_gpr_cp0 ¶

    emit_mtc0_gpr_cp0 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_mtc2_gpr_vr ¶

    emit_mtc2_gpr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) {…}

    emit_nop_none ¶

    emit_nop_none :: proc(instructions: ^[dynamic]Instruction) {…}

    emit_nor_gpr_gpr_gpr ¶

    emit_nor_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_or_gpr_gpr_gpr ¶

    emit_or_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_ori_gpr_gpr_imm16 ¶

    emit_ori_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_sb_gpr_mem ¶

    emit_sb_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_sbv_vr_vmem ¶

    emit_sbv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sdv_vr_vmem ¶

    emit_sdv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sfv_vr_vmem ¶

    emit_sfv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sh_gpr_mem ¶

    emit_sh_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_shv_vr_vmem ¶

    emit_shv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sll_gpr_gpr_imm5 ¶

    emit_sll_gpr_gpr_imm5 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_sllv_gpr_gpr_gpr ¶

    emit_sllv_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_slt_gpr_gpr_gpr ¶

    emit_slt_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_slti_gpr_gpr_imm16 ¶

    emit_slti_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_sltiu_gpr_gpr_imm16 ¶

    emit_sltiu_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_sltu_gpr_gpr_gpr ¶

    emit_sltu_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_slv_vr_vmem ¶

    emit_slv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_spv_vr_vmem ¶

    emit_spv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sqv_vr_vmem ¶

    emit_sqv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sra_gpr_gpr_imm5 ¶

    emit_sra_gpr_gpr_imm5 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_srav_gpr_gpr_gpr ¶

    emit_srav_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_srl_gpr_gpr_imm5 ¶

    emit_srl_gpr_gpr_imm5 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    emit_srlv_gpr_gpr_gpr ¶

    emit_srlv_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_srv_vr_vmem ¶

    emit_srv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_ssv_vr_vmem ¶

    emit_ssv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_stv_vr_vmem ¶

    emit_stv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sub_gpr_gpr_gpr ¶

    emit_sub_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_subu_gpr_gpr_gpr ¶

    emit_subu_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_suv_vr_vmem ¶

    emit_suv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_sw_gpr_mem ¶

    emit_sw_gpr_mem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) {…}

    emit_swv_vr_vmem ¶

    emit_swv_vr_vmem :: proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) {…}

    emit_vabs_vr_vr_vr ¶

    emit_vabs_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vadd_vr_vr_vr ¶

    emit_vadd_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vaddc_vr_vr_vr ¶

    emit_vaddc_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vand_vr_vr_vr ¶

    emit_vand_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vch_vr_vr_vr ¶

    emit_vch_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vcl_vr_vr_vr ¶

    emit_vcl_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vcr_vr_vr_vr ¶

    emit_vcr_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_veq_vr_vr_vr ¶

    emit_veq_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vge_vr_vr_vr ¶

    emit_vge_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vlt_vr_vr_vr ¶

    emit_vlt_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmacf_vr_vr_vr ¶

    emit_vmacf_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmacu_vr_vr_vr ¶

    emit_vmacu_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmadh_vr_vr_vr ¶

    emit_vmadh_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmadl_vr_vr_vr ¶

    emit_vmadl_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmadm_vr_vr_vr ¶

    emit_vmadm_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmadn_vr_vr_vr ¶

    emit_vmadn_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmov_vr_vr ¶

    emit_vmov_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, element: u8 = 0) {…}

    emit_vmrg_vr_vr_vr ¶

    emit_vmrg_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmudh_vr_vr_vr ¶

    emit_vmudh_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmudl_vr_vr_vr ¶

    emit_vmudl_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmudm_vr_vr_vr ¶

    emit_vmudm_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmudn_vr_vr_vr ¶

    emit_vmudn_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmulf_vr_vr_vr ¶

    emit_vmulf_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vmulu_vr_vr_vr ¶

    emit_vmulu_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vnand_vr_vr_vr ¶

    emit_vnand_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vne_vr_vr_vr ¶

    emit_vne_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vnop_none ¶

    emit_vnop_none :: proc(instructions: ^[dynamic]Instruction) {…}

    emit_vnor_vr_vr_vr ¶

    emit_vnor_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vnxor_vr_vr_vr ¶

    emit_vnxor_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vor_vr_vr_vr ¶

    emit_vor_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vrcp_vr_vr_vr ¶

    emit_vrcp_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vrcph_vr_vr_vr ¶

    emit_vrcph_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vrcpl_vr_vr_vr ¶

    emit_vrcpl_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vrsq_vr_vr_vr ¶

    emit_vrsq_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vrsqh_vr_vr_vr ¶

    emit_vrsqh_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vrsql_vr_vr_vr ¶

    emit_vrsql_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vsar_vr_vr_vr ¶

    emit_vsar_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vsub_vr_vr_vr ¶

    emit_vsub_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vsubc_vr_vr_vr ¶

    emit_vsubc_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_vxor_vr_vr_vr ¶

    emit_vxor_vr_vr_vr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) {…}

    emit_xor_gpr_gpr_gpr ¶

    emit_xor_gpr_gpr_gpr :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) {…}

    emit_xori_gpr_gpr_imm16 ¶

    emit_xori_gpr_gpr_imm16 :: proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) {…}

    encode ¶

    encode :: proc(
    	instructions: []Instruction, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	code:         []u8, 
    	relocs:       ^[dynamic]Relocation, 
    	errors:       ^[dynamic]rexcode_isa.Error, 
    	endianness:   Endianness = .BIG, 
    	resolve:      bool = true, 
    	base_address: u64 = 0, 
    ) -> (byte_count: u32, ok: bool) {…}

    encode_max_code_size ¶

    encode_max_code_size :: proc "contextless" (instructions: []Instruction) -> int {…}

    encode_max_relocation_count ¶

    encode_max_relocation_count :: proc "contextless" (instructions: []Instruction) -> int {…}

    encode_reserve ¶

    encode_reserve :: proc(code: ^[dynamic]u8, relocs: ^[dynamic]Relocation, instructions: []Instruction) {…}
     

    Pre-size the caller's encode outputs (code grown by length so code[:] is a valid emit target; relocs reserved by capacity) so the encode hot path never reallocates. Allocates no new buffers; pass nil to skip either array.

    fprint ¶

    fprint :: proc(
    	fd:           ^os.File, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    fprintln ¶

    fprintln :: proc(
    	fd:           ^os.File, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    gpr_from_num ¶

    gpr_from_num :: proc "contextless" (num: u8) -> Register {…}

    inst_add_gpr_gpr_gpr ¶

    inst_add_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_addi_gpr_gpr_imm16 ¶

    inst_addi_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_addiu_gpr_gpr_imm16 ¶

    inst_addiu_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_addu_gpr_gpr_gpr ¶

    inst_addu_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_and_gpr_gpr_gpr ¶

    inst_and_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_andi_gpr_gpr_imm16 ¶

    inst_andi_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_beq_gpr_gpr_rel ¶

    inst_beq_gpr_gpr_rel :: proc "contextless" (a: Register, b: Register, label_id: u32) -> Instruction {…}

    inst_bgez_gpr_rel ¶

    inst_bgez_gpr_rel :: proc "contextless" (a: Register, label_id: u32) -> Instruction {…}

    inst_bgezal_gpr_rel ¶

    inst_bgezal_gpr_rel :: proc "contextless" (a: Register, label_id: u32) -> Instruction {…}

    inst_bgtz_gpr_rel ¶

    inst_bgtz_gpr_rel :: proc "contextless" (a: Register, label_id: u32) -> Instruction {…}

    inst_blez_gpr_rel ¶

    inst_blez_gpr_rel :: proc "contextless" (a: Register, label_id: u32) -> Instruction {…}

    inst_bltz_gpr_rel ¶

    inst_bltz_gpr_rel :: proc "contextless" (a: Register, label_id: u32) -> Instruction {…}

    inst_bltzal_gpr_rel ¶

    inst_bltzal_gpr_rel :: proc "contextless" (a: Register, label_id: u32) -> Instruction {…}

    inst_bne_gpr_gpr_rel ¶

    inst_bne_gpr_gpr_rel :: proc "contextless" (a: Register, b: Register, label_id: u32) -> Instruction {…}

    inst_branch1 ¶

    inst_branch1 :: proc "contextless" (m: Mnemonic, rs: Register, label_id: u32) -> Instruction {…}
     

    Branch helpers

    inst_branch2 ¶

    inst_branch2 :: proc "contextless" (m: Mnemonic, rs, rt: Register, label_id: u32) -> Instruction {…}

    inst_break_imm20 ¶

    inst_break_imm20 :: proc "contextless" (imm: i64) -> Instruction {…}

    inst_cfc2_gpr_cp2 ¶

    inst_cfc2_gpr_cp2 :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_ctc2_gpr_cp2 ¶

    inst_ctc2_gpr_cp2 :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_j_rel ¶

    inst_j_rel :: proc "contextless" (label_id: u32) -> Instruction {…}

    inst_jal_rel ¶

    inst_jal_rel :: proc "contextless" (label_id: u32) -> Instruction {…}

    inst_jalr_gpr_gpr ¶

    inst_jalr_gpr_gpr :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_jr_gpr ¶

    inst_jr_gpr :: proc "contextless" (a: Register) -> Instruction {…}

    inst_jump ¶

    inst_jump :: proc "contextless" (m: Mnemonic, label_id: u32) -> Instruction {…}

    inst_lb_gpr_mem ¶

    inst_lb_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_lbu_gpr_mem ¶

    inst_lbu_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_lbv_vr_vmem ¶

    inst_lbv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_ldv_vr_vmem ¶

    inst_ldv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lfv_vr_vmem ¶

    inst_lfv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lh_gpr_mem ¶

    inst_lh_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_lhu_gpr_mem ¶

    inst_lhu_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_lhv_vr_vmem ¶

    inst_lhv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_llv_vr_vmem ¶

    inst_llv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lpv_vr_vmem ¶

    inst_lpv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lqv_vr_vmem ¶

    inst_lqv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lrv_vr_vmem ¶

    inst_lrv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lsv_vr_vmem ¶

    inst_lsv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_ltv_vr_vmem ¶

    inst_ltv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lui_gpr_imm16 ¶

    inst_lui_gpr_imm16 :: proc "contextless" (a: Register, imm: i64) -> Instruction {…}

    inst_luv_vr_vmem ¶

    inst_luv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_lw_gpr_mem ¶

    inst_lw_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_lwv_vr_vmem ¶

    inst_lwv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_mfc0_gpr_cp0 ¶

    inst_mfc0_gpr_cp0 :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_mfc2_gpr_vr ¶

    inst_mfc2_gpr_vr :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_mtc0_gpr_cp0 ¶

    inst_mtc0_gpr_cp0 :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_mtc2_gpr_vr ¶

    inst_mtc2_gpr_vr :: proc "contextless" (a: Register, b: Register) -> Instruction {…}

    inst_none ¶

    inst_none :: proc "contextless" (m: Mnemonic) -> Instruction {…}

    inst_nop_none ¶

    inst_nop_none :: proc "contextless" () -> Instruction {…}

    inst_nor_gpr_gpr_gpr ¶

    inst_nor_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_or_gpr_gpr_gpr ¶

    inst_or_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_ori_gpr_gpr_imm16 ¶

    inst_ori_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_r ¶

    inst_r :: proc "contextless" (m: Mnemonic, a: Register) -> Instruction {…}

    inst_r_i ¶

    inst_r_i :: proc "contextless" (m: Mnemonic, rt: Register, imm: i64) -> Instruction {…}

    inst_r_m ¶

    inst_r_m :: proc "contextless" (m: Mnemonic, r: Register, mm: Memory, size: u8 = 4) -> Instruction {…}

    inst_r_r ¶

    inst_r_r :: proc "contextless" (m: Mnemonic, d, s: Register) -> Instruction {…}

    inst_r_r_i ¶

    inst_r_r_i :: proc "contextless" (m: Mnemonic, rt, rs: Register, imm: i64) -> Instruction {…}

    inst_r_r_r ¶

    inst_r_r_r :: proc "contextless" (m: Mnemonic, d, s1, s2: Register) -> Instruction {…}

    inst_sb_gpr_mem ¶

    inst_sb_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_sbv_vr_vmem ¶

    inst_sbv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sdv_vr_vmem ¶

    inst_sdv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sfv_vr_vmem ¶

    inst_sfv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sh_gpr_mem ¶

    inst_sh_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_shv_vr_vmem ¶

    inst_shv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sll_gpr_gpr_imm5 ¶

    inst_sll_gpr_gpr_imm5 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_sllv_gpr_gpr_gpr ¶

    inst_sllv_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_slt_gpr_gpr_gpr ¶

    inst_slt_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_slti_gpr_gpr_imm16 ¶

    inst_slti_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_sltiu_gpr_gpr_imm16 ¶

    inst_sltiu_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_sltu_gpr_gpr_gpr ¶

    inst_sltu_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_slv_vr_vmem ¶

    inst_slv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_spv_vr_vmem ¶

    inst_spv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sqv_vr_vmem ¶

    inst_sqv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sra_gpr_gpr_imm5 ¶

    inst_sra_gpr_gpr_imm5 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_srav_gpr_gpr_gpr ¶

    inst_srav_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_srl_gpr_gpr_imm5 ¶

    inst_srl_gpr_gpr_imm5 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    inst_srlv_gpr_gpr_gpr ¶

    inst_srlv_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_srv_vr_vmem ¶

    inst_srv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_ssv_vr_vmem ¶

    inst_ssv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_stv_vr_vmem ¶

    inst_stv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sub_gpr_gpr_gpr ¶

    inst_sub_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_subu_gpr_gpr_gpr ¶

    inst_subu_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_suv_vr_vmem ¶

    inst_suv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_sw_gpr_mem ¶

    inst_sw_gpr_mem :: proc "contextless" (a: Register, m: Memory) -> Instruction {…}

    inst_swv_vr_vmem ¶

    inst_swv_vr_vmem :: proc "contextless" (a: Register, m: Vector_Mem) -> Instruction {…}

    inst_v_v_v ¶

    inst_v_v_v :: proc "contextless" (m: Mnemonic, vd, vs, vt: Register, vt_element: u8 = 0) -> Instruction {…}
     

    Vector ALU: 3-operand vector op with optional element selector on vt.

    inst_v_vmem ¶

    inst_v_vmem :: proc "contextless" (m: Mnemonic, vt: Register, vmem_op: Vector_Mem) -> Instruction {…}
     

    Vector load/store: $vt[element], offset(base).

    inst_vabs_vr_vr_vr ¶

    inst_vabs_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vadd_vr_vr_vr ¶

    inst_vadd_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vaddc_vr_vr_vr ¶

    inst_vaddc_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vand_vr_vr_vr ¶

    inst_vand_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vch_vr_vr_vr ¶

    inst_vch_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vcl_vr_vr_vr ¶

    inst_vcl_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vcr_vr_vr_vr ¶

    inst_vcr_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_veq_vr_vr_vr ¶

    inst_veq_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vge_vr_vr_vr ¶

    inst_vge_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vlt_vr_vr_vr ¶

    inst_vlt_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmacf_vr_vr_vr ¶

    inst_vmacf_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmacu_vr_vr_vr ¶

    inst_vmacu_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmadh_vr_vr_vr ¶

    inst_vmadh_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmadl_vr_vr_vr ¶

    inst_vmadl_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmadm_vr_vr_vr ¶

    inst_vmadm_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmadn_vr_vr_vr ¶

    inst_vmadn_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmov_vr_vr ¶

    inst_vmov_vr_vr :: proc "contextless" (a: Register, b: Register, element: u8 = 0) -> Instruction {…}

    inst_vmrg_vr_vr_vr ¶

    inst_vmrg_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmudh_vr_vr_vr ¶

    inst_vmudh_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmudl_vr_vr_vr ¶

    inst_vmudl_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmudm_vr_vr_vr ¶

    inst_vmudm_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmudn_vr_vr_vr ¶

    inst_vmudn_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmulf_vr_vr_vr ¶

    inst_vmulf_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vmulu_vr_vr_vr ¶

    inst_vmulu_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vnand_vr_vr_vr ¶

    inst_vnand_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vne_vr_vr_vr ¶

    inst_vne_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vnop_none ¶

    inst_vnop_none :: proc "contextless" () -> Instruction {…}

    inst_vnor_vr_vr_vr ¶

    inst_vnor_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vnxor_vr_vr_vr ¶

    inst_vnxor_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vor_vr_vr_vr ¶

    inst_vor_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vrcp_vr_vr_vr ¶

    inst_vrcp_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vrcph_vr_vr_vr ¶

    inst_vrcph_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vrcpl_vr_vr_vr ¶

    inst_vrcpl_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vrsq_vr_vr_vr ¶

    inst_vrsq_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vrsqh_vr_vr_vr ¶

    inst_vrsqh_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vrsql_vr_vr_vr ¶

    inst_vrsql_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vsar_vr_vr_vr ¶

    inst_vsar_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vsub_vr_vr_vr ¶

    inst_vsub_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vsubc_vr_vr_vr ¶

    inst_vsubc_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_vxor_vr_vr_vr ¶

    inst_vxor_vr_vr_vr :: proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction {…}

    inst_xor_gpr_gpr_gpr ¶

    inst_xor_gpr_gpr_gpr :: proc "contextless" (a: Register, b: Register, c: Register) -> Instruction {…}

    inst_xori_gpr_gpr_imm16 ¶

    inst_xori_gpr_gpr_imm16 :: proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction {…}

    mem ¶

    mem :: proc "contextless" (base: Register, disp: i32) -> Memory {…}

    mnemonic_to_string ¶

    mnemonic_to_string :: proc(m: Mnemonic, lowercase: bool = true, allocator := context.temp_allocator) -> string {…}

    op_imm ¶

    op_imm :: proc "contextless" (v: i64, size: u8) -> Operand {…}

    op_label ¶

    op_label :: proc "contextless" (label_id: u32) -> Operand {…}

    op_mem ¶

    op_mem :: proc "contextless" (m: Memory, size: u8) -> Operand {…}

    op_reg ¶

    op_reg :: proc "contextless" (r: Register) -> Operand {…}

    op_vmem ¶

    op_vmem :: proc "contextless" (m: Vector_Mem, size: u8) -> Operand {…}

    op_vr ¶

    op_vr :: proc "contextless" (r: Register, element: u8 = 0) -> Operand {…}

    print ¶

    print :: proc(
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    println ¶

    println :: proc(
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    read_u32 ¶

    read_u32 :: proc "contextless" (code: []u8, offset: u32, endianness: Endianness) -> u32 {…}

    reg_class ¶

    reg_class :: proc "contextless" (r: Register) -> u16 {…}

    reg_hw ¶

    reg_hw :: proc "contextless" (r: Register) -> u8 {…}

    register_name ¶

    register_name :: proc(r: Register, lowercase: bool = true, allocator := context.temp_allocator) -> string {…}

    sbprint ¶

    sbprint :: proc(
    	sb:           ^strings.Builder, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    sbprintln ¶

    sbprintln :: proc(
    	sb:           ^strings.Builder, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    tprint ¶

    tprint :: proc(
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) -> string {…}

    tprintln ¶

    tprintln :: proc(
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) -> string {…}

    vmem ¶

    vmem :: proc "contextless" (base: Register, element: u8, offset: i32) -> Vector_Mem {…}

    vr_from_num ¶

    vr_from_num :: proc "contextless" (num: u8) -> Register {…}

    wprint ¶

    wprint :: proc(
    	w:            io.Stream, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    wprintln ¶

    wprintln :: proc(
    	w:            io.Stream, 
    	instructions: []Instruction, 
    	inst_info:    []Instruction_Info, 
    	label_defs:   []rexcode_isa.Label_Definition, 
    	tokens:       ^[dynamic]rexcode_isa.Token = nil, 
    	options:      ^rexcode_isa.Print_Options = nil, 
    	label_names:  ^map[u32]string = nil, 
    ) {…}

    write_u32 ¶

    write_u32 :: proc "contextless" (code: []u8, offset: u32, word: u32, endianness: Endianness) {…}

    Procedure Groups

    This section is empty.

    Source Files

    Generation Information

    Generated with odin version dev-2026-07 (vendor "odin") Windows_amd64 @ 2026-07-20 21:55:41.563334400 +0000 UTC