From f78baf9c0b98916d4adeee9a2d67c3c692b671f0 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Wed, 12 Oct 2016 15:34:50 -0700 Subject: [PATCH] Capture the Rust type used to represent an operand kind. The Rust type is usually the camel-cased name of the operand kind, but there are variations, so allow an explicit rust_type='IntCC' when defining operand kinds. --- meta/cretonne/__init__.py | 14 ++++++++------ meta/cretonne/immediates.py | 9 ++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/meta/cretonne/__init__.py b/meta/cretonne/__init__.py index 05366b0720..a6cef5397b 100644 --- a/meta/cretonne/__init__.py +++ b/meta/cretonne/__init__.py @@ -290,13 +290,13 @@ class OperandKind(object): instruction. """ - def __init__(self, name, doc, default_member=None): + def __init__(self, name, doc, default_member=None, rust_type=None): self.name = name self.__doc__ = doc self.default_member = default_member # The camel-cased name of an operand kind is also the Rust type used to # represent it. - self.camel_name = camel_case(name) + self.rust_type = rust_type or camel_case(name) def __str__(self): return self.name @@ -348,8 +348,9 @@ class ImmediateKind(OperandKind): `InstructionData` data structure. """ - def __init__(self, name, doc, default_member='imm'): - super(ImmediateKind, self).__init__(name, doc, default_member) + def __init__(self, name, doc, default_member='imm', rust_type=None): + super(ImmediateKind, self).__init__( + name, doc, default_member, rust_type) def __repr__(self): return 'ImmediateKind({})'.format(self.name) @@ -362,8 +363,9 @@ class EntityRefKind(OperandKind): The kind of an entity reference instruction operand. """ - def __init__(self, name, doc, default_member=None): - super(EntityRefKind, self).__init__(name, doc, default_member or name) + def __init__(self, name, doc, default_member=None, rust_type=None): + super(EntityRefKind, self).__init__( + name, doc, default_member or name, rust_type) def __repr__(self): return 'EntityRefKind({})'.format(self.name) diff --git a/meta/cretonne/immediates.py b/meta/cretonne/immediates.py index ca8affded0..34b81dc79d 100644 --- a/meta/cretonne/immediates.py +++ b/meta/cretonne/immediates.py @@ -28,7 +28,10 @@ ieee32 = ImmediateKind('ieee32', 'A 32-bit immediate floating point number.') ieee64 = ImmediateKind('ieee64', 'A 64-bit immediate floating point number.') #: A large SIMD vector constant. -immvector = ImmediateKind('immvector', 'An immediate SIMD vector.') +immvector = ImmediateKind( + 'immvector', + 'An immediate SIMD vector.', + rust_type='ImmVector') #: A condition code for comparing integer values. #: @@ -37,7 +40,7 @@ immvector = ImmediateKind('immvector', 'An immediate SIMD vector.') intcc = ImmediateKind( 'intcc', 'An integer comparison condition code.', - default_member='cond') + default_member='cond', rust_type='IntCC') #: A condition code for comparing floating point values. #: @@ -46,4 +49,4 @@ intcc = ImmediateKind( floatcc = ImmediateKind( 'floatcc', 'A floating point comparison condition code.', - default_member='cond') + default_member='cond', rust_type='FloatCC')