summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorSiddarth Suresh <155843085+SiddarthSuresh98@users.noreply.github.com>2025-04-22 15:23:50 -0400
committerGitHub <noreply@github.com>2025-04-22 15:23:50 -0400
commit3d0133c2f793e82d7519d8e2c5023114cd0f0eab (patch)
treeb262ededf7e993090d7a860b76ca528b5651c3c6 /inc
parent1250359dfcbcad18c0a1078290f95479aa23e26a (diff)
parent86a6253a2fb2d016a63e57d6a5e5461df87668e5 (diff)
Merge pull request #67 from bdunahu/bdunahu
add RET instruction, JAL ob1 error (full subroutine support), condition codes for everything but shifts
Diffstat (limited to 'inc')
-rw-r--r--inc/ex.h25
-rw-r--r--inc/instr.h1
2 files changed, 26 insertions, 0 deletions
diff --git a/inc/ex.h b/inc/ex.h
index 1c06ac2..f7428da 100644
--- a/inc/ex.h
+++ b/inc/ex.h
@@ -23,6 +23,31 @@
#include <exception>
#include <unordered_map>
+#define ADDITION_OF_GUARD(a, b) \
+ (b >= 0) && (a > MAX_INT - b)
+
+#define ADDITION_UF_GUARD(a, b) \
+ (b < 0) && (a < (-(MAX_INT)-1) - b)
+
+#define SUBTRACTION_OF_GUARD(a, b) \
+ (b < 0) && (a > MAX_INT + b)
+
+#define SUBTRACTION_UF_GUARD(a, b) \
+ (b >= 0) && (a < (-(MAX_INT)-1) + b)
+
+#define MULTIPLICATION_OF_GUARD(a, b) \
+ (b != 0) && \
+ (((b > 0) && (a > 0) && (a > MAX_INT / b)) || \
+ ((b < 0) && (a < 0) && (a < MAX_INT / b)))
+
+#define MULTIPLICATION_UF_GUARD(a, b) \
+ (b != 0) && \
+ (((b > 0) && (a < 0) && (a < (-(MAX_INT)-1) / b)) || \
+ ((b < 0) && (a > 0) && (a > (-(MAX_INT)-1) / b)))
+
+#define DIVISION_OF_GUARD(a, b) \
+ ((a == -(MAX_INT) - 1) && (b == -1)) || (b == 0)
+
class HaltException : public std::exception
{
const char *what() const noexcept override {
diff --git a/inc/instr.h b/inc/instr.h
index b5b782a..62af09a 100644
--- a/inc/instr.h
+++ b/inc/instr.h
@@ -58,6 +58,7 @@ enum Mnemonic {
BOF,
PUSH,
POP,
+ RET,
NOP,
};