From ae4e0bb5ef6905793c4208625c1f531f78a3f068 Mon Sep 17 00:00:00 2001 From: Erick Date: Tue, 1 Feb 2022 00:20:03 +0100 Subject: [PATCH] add sign extension for immediate mode add (imm5) this part of code converts 5bit numbers to 8bit numbers in case of imm5 type of add, preserving sign when negative --- tyvm.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tyvm.c b/tyvm.c index 64df119..675d230 100644 --- a/tyvm.c +++ b/tyvm.c @@ -96,9 +96,14 @@ enum flags { FL_N = 1 << 2, // Negative }; - - - +/* sign extension 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); + } + return bin; +} /* main loop */ int main(int argc, const char* argv[]) {