Skip to content

Registers

registers

X86_INDEX_BY_NAME = {'rax': 0, 'rcx': 1, 'rdx': 2, 'rbx': 3, 'rsp': 4, 'rbp': 5, 'rsi': 6, 'rdi': 7, 'r8': 8, 'r9': 9, 'r10': 10, 'r11': 11, 'r12': 12, 'r13': 13, 'r14': 14, 'r15': 15} module-attribute

Mapping of x86 register names to their indices.

See external documentation.

UNALLOCATED_GENERAL = GeneralRegisterType.unallocated() module-attribute

RAX = GeneralRegisterType.from_name('rax') module-attribute

RCX = GeneralRegisterType.from_name('rcx') module-attribute

RDX = GeneralRegisterType.from_name('rdx') module-attribute

RBX = GeneralRegisterType.from_name('rbx') module-attribute

RSP = GeneralRegisterType.from_name('rsp') module-attribute

RBP = GeneralRegisterType.from_name('rbp') module-attribute

RSI = GeneralRegisterType.from_name('rsi') module-attribute

RDI = GeneralRegisterType.from_name('rdi') module-attribute

R8 = GeneralRegisterType.from_name('r8') module-attribute

R9 = GeneralRegisterType.from_name('r9') module-attribute

R10 = GeneralRegisterType.from_name('r10') module-attribute

R11 = GeneralRegisterType.from_name('r11') module-attribute

R12 = GeneralRegisterType.from_name('r12') module-attribute

R13 = GeneralRegisterType.from_name('r13') module-attribute

R14 = GeneralRegisterType.from_name('r14') module-attribute

R15 = GeneralRegisterType.from_name('r15') module-attribute

RFLAGS_INDEX_BY_NAME = {'rflags': 0} module-attribute

UNALLOCATED_RFLAGS = RFLAGSRegisterType.unallocated() module-attribute

RFLAGS = RFLAGSRegisterType.from_name('rflags') module-attribute

SSE_INDEX_BY_NAME = {'xmm0': 0, 'xmm1': 1, 'xmm2': 2, 'xmm3': 3, 'xmm4': 4, 'xmm5': 5, 'xmm6': 6, 'xmm7': 7, 'xmm8': 8, 'xmm9': 9, 'xmm10': 10, 'xmm11': 11, 'xmm12': 12, 'xmm13': 13, 'xmm14': 14, 'xmm15': 15} module-attribute

Mapping of SSE register names to their indices.

See external # documentation.

UNALLOCATED_SSE = SSERegisterType.unallocated() module-attribute

XMM = tuple((SSERegisterType.from_name(f'xmm{i}')) for i in (range(16))) module-attribute

AVX2_INDEX_BY_NAME = {'ymm0': 0, 'ymm1': 1, 'ymm2': 2, 'ymm3': 3, 'ymm4': 4, 'ymm5': 5, 'ymm6': 6, 'ymm7': 7, 'ymm8': 8, 'ymm9': 9, 'ymm10': 10, 'ymm11': 11, 'ymm12': 12, 'ymm13': 13, 'ymm14': 14, 'ymm15': 15} module-attribute

Mapping of AVX2 register names to their indices.

See external # documentation.

UNALLOCATED_AVX2 = AVX2RegisterType.unallocated() module-attribute

YMM = tuple((AVX2RegisterType.from_name(f'ymm{i}')) for i in (range(16))) module-attribute

X86AVX512_INDEX_BY_NAME = {'zmm0': 0, 'zmm1': 1, 'zmm2': 2, 'zmm3': 3, 'zmm4': 4, 'zmm5': 5, 'zmm6': 6, 'zmm7': 7, 'zmm8': 8, 'zmm9': 9, 'zmm10': 10, 'zmm11': 11, 'zmm12': 12, 'zmm13': 13, 'zmm14': 14, 'zmm15': 15, 'zmm16': 16, 'zmm17': 17, 'zmm18': 18, 'zmm19': 19, 'zmm20': 20, 'zmm21': 21, 'zmm22': 22, 'zmm23': 23, 'zmm24': 24, 'zmm25': 25, 'zmm26': 26, 'zmm27': 27, 'zmm28': 28, 'zmm29': 29, 'zmm30': 30, 'zmm31': 31} module-attribute

Mapping of AVX512 register names to their indices.

See external # documentation.

UNALLOCATED_AVX512 = AVX512RegisterType.unallocated() module-attribute

ZMM = tuple((AVX512RegisterType.from_name(f'zmm{i}')) for i in (range(32))) module-attribute

X86AVX512_MASK_INDEX_BY_NAME = {'k0': 0, 'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6, 'k7': 7} module-attribute

UNALLOCATED_AVX512_MASK = AVX512MaskRegisterType.unallocated() module-attribute

K = tuple((AVX512MaskRegisterType.from_name(f'k{i}')) for i in (range(8))) module-attribute

X86RegisterType dataclass

Bases: RegisterType, ABC

The abstract class for all x86 register types.

Source code in xdsl/dialects/x86/registers.py
11
12
13
14
class X86RegisterType(RegisterType, ABC):
    """
    The abstract class for all x86 register types.
    """

GeneralRegisterType dataclass

Bases: X86RegisterType

A scalar x86 register type representing general registers.

Source code in xdsl/dialects/x86/registers.py
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
@irdl_attr_definition
class GeneralRegisterType(X86RegisterType):
    """
    A scalar x86 register type representing general registers.
    """

    name = "x86.reg"

    @classmethod
    def index_by_name(cls) -> dict[str, int]:
        return X86_INDEX_BY_NAME

    @classmethod
    def infinite_register_prefix(cls):
        return "inf_reg_"

    @classmethod
    def allocatable_registers(cls):
        """
        Registers of this type that can be used for register allocation.

        Returns a tuple of GeneralRegisterType instances corresponding to registers that
        are allocatable according to the x86-64 System V ABI.
        This excludes registers with special purposes (e.g., stack pointer, base pointer).
        """
        return (
            RAX,
            RCX,
            RDX,
            RBX,
            RSI,
            RDI,
            R8,
            R9,
            R10,
            R11,
            R13,
            R14,
            R15,
        )

name = 'x86.reg' class-attribute instance-attribute

index_by_name() -> dict[str, int] classmethod

Source code in xdsl/dialects/x86/registers.py
60
61
62
@classmethod
def index_by_name(cls) -> dict[str, int]:
    return X86_INDEX_BY_NAME

infinite_register_prefix() classmethod

Source code in xdsl/dialects/x86/registers.py
64
65
66
@classmethod
def infinite_register_prefix(cls):
    return "inf_reg_"

allocatable_registers() classmethod

Registers of this type that can be used for register allocation.

Returns a tuple of GeneralRegisterType instances corresponding to registers that are allocatable according to the x86-64 System V ABI. This excludes registers with special purposes (e.g., stack pointer, base pointer).

Source code in xdsl/dialects/x86/registers.py
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
@classmethod
def allocatable_registers(cls):
    """
    Registers of this type that can be used for register allocation.

    Returns a tuple of GeneralRegisterType instances corresponding to registers that
    are allocatable according to the x86-64 System V ABI.
    This excludes registers with special purposes (e.g., stack pointer, base pointer).
    """
    return (
        RAX,
        RCX,
        RDX,
        RBX,
        RSI,
        RDI,
        R8,
        R9,
        R10,
        R11,
        R13,
        R14,
        R15,
    )

RFLAGSRegisterType dataclass

Bases: X86RegisterType

A scalar x86 register type representing the RFLAGS register.

Source code in xdsl/dialects/x86/registers.py
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
@irdl_attr_definition
class RFLAGSRegisterType(X86RegisterType):
    """
    A scalar x86 register type representing the RFLAGS register.
    """

    name = "x86.rflags"

    @classmethod
    def index_by_name(cls) -> dict[str, int]:
        return RFLAGS_INDEX_BY_NAME

    @classmethod
    def infinite_register_prefix(cls):
        return "inf_rflags_"

name = 'x86.rflags' class-attribute instance-attribute

index_by_name() -> dict[str, int] classmethod

Source code in xdsl/dialects/x86/registers.py
137
138
139
@classmethod
def index_by_name(cls) -> dict[str, int]:
    return RFLAGS_INDEX_BY_NAME

infinite_register_prefix() classmethod

Source code in xdsl/dialects/x86/registers.py
141
142
143
@classmethod
def infinite_register_prefix(cls):
    return "inf_rflags_"

X86VectorRegisterType dataclass

Bases: X86RegisterType

The abstract class for all x86 vector register types.

Source code in xdsl/dialects/x86/registers.py
150
151
152
153
class X86VectorRegisterType(X86RegisterType):
    """
    The abstract class for all x86 vector register types.
    """

SSERegisterType dataclass

Bases: X86VectorRegisterType

An x86 register type for SSE instructions.

Source code in xdsl/dialects/x86/registers.py
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
@irdl_attr_definition
class SSERegisterType(X86VectorRegisterType):
    """
    An x86 register type for SSE instructions.
    """

    name = "x86.ssereg"

    @classmethod
    def index_by_name(cls) -> dict[str, int]:
        return SSE_INDEX_BY_NAME

    @classmethod
    def infinite_register_prefix(cls):
        return "inf_sse_"

name = 'x86.ssereg' class-attribute instance-attribute

index_by_name() -> dict[str, int] classmethod

Source code in xdsl/dialects/x86/registers.py
164
165
166
@classmethod
def index_by_name(cls) -> dict[str, int]:
    return SSE_INDEX_BY_NAME

infinite_register_prefix() classmethod

Source code in xdsl/dialects/x86/registers.py
168
169
170
@classmethod
def infinite_register_prefix(cls):
    return "inf_sse_"

AVX2RegisterType dataclass

Bases: X86VectorRegisterType

An x86 register type for AVX2 instructions.

Source code in xdsl/dialects/x86/registers.py
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
@irdl_attr_definition
class AVX2RegisterType(X86VectorRegisterType):
    """
    An x86 register type for AVX2 instructions.
    """

    name = "x86.avx2reg"

    @classmethod
    def index_by_name(cls) -> dict[str, int]:
        return AVX2_INDEX_BY_NAME

    @classmethod
    def infinite_register_prefix(cls):
        return "inf_avx2_"

    @classmethod
    def allocatable_registers(cls):
        return YMM

name = 'x86.avx2reg' class-attribute instance-attribute

index_by_name() -> dict[str, int] classmethod

Source code in xdsl/dialects/x86/registers.py
227
228
229
@classmethod
def index_by_name(cls) -> dict[str, int]:
    return AVX2_INDEX_BY_NAME

infinite_register_prefix() classmethod

Source code in xdsl/dialects/x86/registers.py
231
232
233
@classmethod
def infinite_register_prefix(cls):
    return "inf_avx2_"

allocatable_registers() classmethod

Source code in xdsl/dialects/x86/registers.py
235
236
237
@classmethod
def allocatable_registers(cls):
    return YMM

AVX512RegisterType dataclass

Bases: X86VectorRegisterType

An x86 register type for AVX512 instructions.

Source code in xdsl/dialects/x86/registers.py
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
@irdl_attr_definition
class AVX512RegisterType(X86VectorRegisterType):
    """
    An x86 register type for AVX512 instructions.
    """

    name = "x86.avx512reg"

    @classmethod
    def index_by_name(cls) -> dict[str, int]:
        return X86AVX512_INDEX_BY_NAME

    @classmethod
    def infinite_register_prefix(cls):
        return "inf_avx512_"

    @classmethod
    def allocatable_registers(cls):
        return ZMM

name = 'x86.avx512reg' class-attribute instance-attribute

index_by_name() -> dict[str, int] classmethod

Source code in xdsl/dialects/x86/registers.py
294
295
296
@classmethod
def index_by_name(cls) -> dict[str, int]:
    return X86AVX512_INDEX_BY_NAME

infinite_register_prefix() classmethod

Source code in xdsl/dialects/x86/registers.py
298
299
300
@classmethod
def infinite_register_prefix(cls):
    return "inf_avx512_"

allocatable_registers() classmethod

Source code in xdsl/dialects/x86/registers.py
302
303
304
@classmethod
def allocatable_registers(cls):
    return ZMM

AVX512MaskRegisterType dataclass

Bases: X86RegisterType

An x86 mask register type for AVX512 instructions.

Source code in xdsl/dialects/x86/registers.py
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
@irdl_attr_definition
class AVX512MaskRegisterType(X86RegisterType):
    """
    An x86 mask register type for AVX512 instructions.
    """

    name = "x86.avx512maskreg"

    @classmethod
    def index_by_name(cls) -> dict[str, int]:
        return X86AVX512_MASK_INDEX_BY_NAME

    @classmethod
    def infinite_register_prefix(cls):
        return "inf_avx512_mask_"

    @classmethod
    def allocatable_registers(cls):
        return K

name = 'x86.avx512maskreg' class-attribute instance-attribute

index_by_name() -> dict[str, int] classmethod

Source code in xdsl/dialects/x86/registers.py
393
394
395
@classmethod
def index_by_name(cls) -> dict[str, int]:
    return X86AVX512_MASK_INDEX_BY_NAME

infinite_register_prefix() classmethod

Source code in xdsl/dialects/x86/registers.py
397
398
399
@classmethod
def infinite_register_prefix(cls):
    return "inf_avx512_mask_"

allocatable_registers() classmethod

Source code in xdsl/dialects/x86/registers.py
401
402
403
@classmethod
def allocatable_registers(cls):
    return K