The meta language patterns sometimes need to refer to specific values of enumerated immediate operands. The dot syntax provides a namespaced, typed way of doing that: icmp(intcc.ult, a, x). Add an ast.Enumerator class for representing this kind of AST leaf node. Add value definitions for the intcc and floatcc immediate operand kinds.
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
"""
|
|
The `cretonne.immediates` module predefines all the Cretonne immediate operand
|
|
types.
|
|
"""
|
|
from __future__ import absolute_import
|
|
from cdsl.operands import ImmediateKind
|
|
|
|
#: A 64-bit immediate integer operand.
|
|
#:
|
|
#: This type of immediate integer can interact with SSA values with any
|
|
#: :py:class:`cretonne.IntType` type.
|
|
imm64 = ImmediateKind('imm64', 'A 64-bit immediate integer.')
|
|
|
|
#: An unsigned 8-bit immediate integer operand.
|
|
#:
|
|
#: This small operand is used to indicate lane indexes in SIMD vectors and
|
|
#: immediate bit counts on shift instructions.
|
|
uimm8 = ImmediateKind('uimm8', 'An 8-bit immediate unsigned integer.')
|
|
|
|
#: A 32-bit immediate floating point operand.
|
|
#:
|
|
#: IEEE 754-2008 binary32 interchange format.
|
|
ieee32 = ImmediateKind('ieee32', 'A 32-bit immediate floating point number.')
|
|
|
|
#: A 64-bit immediate floating point operand.
|
|
#:
|
|
#: IEEE 754-2008 binary64 interchange format.
|
|
ieee64 = ImmediateKind('ieee64', 'A 64-bit immediate floating point number.')
|
|
|
|
#: A condition code for comparing integer values.
|
|
#:
|
|
#: This enumerated operand kind is used for the :cton:inst:`icmp` instruction
|
|
#: and corresponds to the `condcodes::IntCC` Rust type.
|
|
intcc = ImmediateKind(
|
|
'intcc',
|
|
'An integer comparison condition code.',
|
|
default_member='cond', rust_type='IntCC',
|
|
values={
|
|
'eq': 'Equal',
|
|
'ne': 'NotEqual',
|
|
'sge': 'SignedGreaterThanOrEqual',
|
|
'sgt': 'SignedGreaterThan',
|
|
'sle': 'SignedLessThanOrEqual',
|
|
'slt': 'SignedLessThan',
|
|
'uge': 'UnsignedGreaterThanOrEqual',
|
|
'ugt': 'UnsignedGreaterThan',
|
|
'ule': 'UnsignedLessThanOrEqual',
|
|
'ult': 'UnsignedLessThan',
|
|
})
|
|
|
|
#: A condition code for comparing floating point values.
|
|
#:
|
|
#: This enumerated operand kind is used for the :cton:inst:`fcmp` instruction
|
|
#: and corresponds to the `condcodes::FloatCC` Rust type.
|
|
floatcc = ImmediateKind(
|
|
'floatcc',
|
|
'A floating point comparison condition code.',
|
|
default_member='cond', rust_type='FloatCC',
|
|
values={
|
|
'ord': 'Ordered',
|
|
'uno': 'Unordered',
|
|
'eq': 'Equal',
|
|
'ne': 'NotEqual',
|
|
'one': 'OrderedNotEqual',
|
|
'ueq': 'UnorderedOrEqual',
|
|
'lt': 'LessThan',
|
|
'le': 'LessThanOrEqual',
|
|
'gt': 'GreaterThan',
|
|
'ge': 'GreaterThanOrEqual',
|
|
'ult': 'UnorderedOrLessThan',
|
|
'ule': 'UnorderedOrLessThanOrEqual',
|
|
'ugt': 'UnorderedOrGreaterThan',
|
|
'uge': 'UnorderedOrGreaterThanOrEqual',
|
|
})
|