diff options
author | Siddarth Suresh <155843085+SiddarthSuresh98@users.noreply.github.com> | 2025-04-22 15:23:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-22 15:23:50 -0400 |
commit | 3d0133c2f793e82d7519d8e2c5023114cd0f0eab (patch) | |
tree | b262ededf7e993090d7a860b76ca528b5651c3c6 /inc | |
parent | 1250359dfcbcad18c0a1078290f95479aa23e26a (diff) | |
parent | 86a6253a2fb2d016a63e57d6a5e5461df87668e5 (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.h | 25 | ||||
-rw-r--r-- | inc/instr.h | 1 |
2 files changed, 26 insertions, 0 deletions
@@ -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, }; |