diff options
Diffstat (limited to 'src/program.c')
-rw-r--r-- | src/program.c | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/src/program.c b/src/program.c index ac3c923..169d270 100644 --- a/src/program.c +++ b/src/program.c @@ -656,13 +656,58 @@ static CHECK_RESULT int amal_program_read_instructions(amal_program *self, amal_ self->read_index += 3; break; } - case AMAL_OP_CMP: { - return_if_error(amal_exec_cmp(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + case AMAL_OP_EQ: { + return_if_error(amal_exec_eq(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_NEQ: { + return_if_error(amal_exec_neq(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_ILT: { + return_if_error(amal_exec_ilt(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_ILE: { + return_if_error(amal_exec_ile(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_IGT: { + return_if_error(amal_exec_igt(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_IGE: { + return_if_error(amal_exec_ige(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_LT: { + return_if_error(amal_exec_lt(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_LE: { + return_if_error(amal_exec_le(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_GT: { + return_if_error(amal_exec_gt(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); + self->read_index += 3; + break; + } + case AMAL_OP_GE: { + return_if_error(amal_exec_ge(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); self->read_index += 3; break; } case AMAL_OP_BIT_AND: { - assert(bool_false && "TODO: Implement!"); + return_if_error(amal_exec_and(executor, self->data.data[self->read_index], self->data.data[self->read_index + 1], self->data.data[self->read_index + 2])); self->read_index += 3; break; } |