Add an IsEqual FieldPredicate.

Compare an immediate operand to a constant value.
This commit is contained in:
Jakob Stoklund Olesen
2017-03-31 10:12:44 -07:00
parent 3b0ac20ce2
commit b31ca83b91
2 changed files with 21 additions and 0 deletions

View File

@@ -232,6 +232,21 @@ class FieldPredicate(object):
return 'predicates::{}({})'.format(self.function, ', '.join(args)) return 'predicates::{}({})'.format(self.function, ', '.join(args))
class IsEqual(FieldPredicate):
"""
Instruction predicate that checks if an immediate instruction format field
is equal to a constant value.
:param field: `FormatField` to be checked.
:param value: The constant value to compare against.
"""
def __init__(self, field, value):
# type: (FormatField, Any) -> None
super(IsEqual, self).__init__(field, 'is_equal', (value,))
self.value = value
class IsSignedInt(FieldPredicate): class IsSignedInt(FieldPredicate):
""" """
Instruction predicate that checks if an immediate instruction format field Instruction predicate that checks if an immediate instruction format field

View File

@@ -9,6 +9,12 @@
//! Some of these predicates may be unused in certain ISA configurations, so we suppress the //! Some of these predicates may be unused in certain ISA configurations, so we suppress the
//! dead_code warning. //! dead_code warning.
/// Check that `x` is the same as `y`.
#[allow(dead_code)]
pub fn is_equal<T: Eq + Copy>(x: T, y: T) -> bool {
x == y
}
/// Check that `x` can be represented as a `wd`-bit signed integer with `sc` low zero bits. /// Check that `x` can be represented as a `wd`-bit signed integer with `sc` low zero bits.
#[allow(dead_code)] #[allow(dead_code)]
pub fn is_signed_int<T: Into<i64>>(x: T, wd: u8, sc: u8) -> bool { pub fn is_signed_int<T: Into<i64>>(x: T, wd: u8, sc: u8) -> bool {