From ca118555214a176728b9aab87849391344306d6d Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Thu, 29 Feb 2024 02:29:13 +0100 Subject: Initial commit. --- src/instset.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/instset.c (limited to 'src/instset.c') diff --git a/src/instset.c b/src/instset.c new file mode 100644 index 0000000..2ab127a --- /dev/null +++ b/src/instset.c @@ -0,0 +1,39 @@ +#include +#include "types.h" +#include "instset.h" + +boolean sal_is_inst(uint32 word) +{ + /* Test if a given 32 bit integer contains a valid Salis instruction. + */ + return word < INST_COUNT; +} + +static boolean is_in_between(uint32 inst, uint32 low, uint32 hi) +{ + /* Test whether a Salis instruction lies within a given range. This is + useful for identifying template instructions and/or register modifiers. + */ + assert(sal_is_inst(inst)); + assert(sal_is_inst(low)); + assert(sal_is_inst(hi)); + return (inst >= low) && (inst <= hi); +} + +boolean sal_is_template(uint32 inst) +{ + /* Test whether a given instruction is a template element + (i.e. NOP0 or NOP1). + */ + assert(sal_is_inst(inst)); + return is_in_between(inst, NOP0, NOP1); +} + +boolean sal_is_mod(uint32 inst) +{ + /* Test whether a given instruction is a register modifier + (i.e. MODA, MODB, MODC or MODD). + */ + assert(sal_is_inst(inst)); + return is_in_between(inst, MODA, MODD); +} -- cgit v1.2.1