From 388dadd8fa2cdb88e68f338aacc06b7a79c04f34 Mon Sep 17 00:00:00 2001 From: Erick Date: Tue, 1 Feb 2022 00:38:35 +0100 Subject: [PATCH] add flag update function --- tyvm.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tyvm.c b/tyvm.c index 675d230..04ba236 100644 --- a/tyvm.c +++ b/tyvm.c @@ -96,13 +96,21 @@ enum flags { FL_N = 1 << 2, // Negative }; -/* sign extension for immediate add mode (imm5[0:4]) +/* Sign extension function for immediate add mode (imm5[0:4]) transforms 5bit number to 8bit number preserving sign*/ -uint16_t sign_extend(uint16_t bin, int bit_count) { - if((bin >> (bit_count - 1)) & 1) { - bin |= (0xFFFF << bit_count); +uint16_t sign_extend(uint16_t n, int bit_count) { + if((n >> (bit_count - 1)) & 1) { + n |= (0xFFFF << bit_count); } - return bin; + return n; +} + +/* Flag update function +Every time a value is written to a register the flag will be updated */ +void update_flags(uint16_t r) { + if (reg[r] == 0) reg[RG_COND] = FL_Z; + else if (reg[r] >> 15) reg[RG_COND] = FL_N; + else reg[RG_COND] = FL_P; } /* main loop */