summaryrefslogtreecommitdiff
path: root/include/global.h
diff options
context:
space:
mode:
authorKurausukun <lord.uber1@gmail.com>2021-07-03 17:18:41 -0400
committerKurausukun <lord.uber1@gmail.com>2021-07-03 17:18:41 -0400
commitff94d49a45ef605cfaed1268aa5a230958e25cd9 (patch)
tree34ce55ebbd3a33ea4db7153e203e70fa441cd146 /include/global.h
parentee0f35b8663acc5c1e1eb28074ad5917783afd17 (diff)
add SAFE_DIV macro and usages
Diffstat (limited to 'include/global.h')
-rw-r--r--include/global.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/global.h b/include/global.h
index 1d12fdae9..f7abcc23d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -73,6 +73,14 @@
#define abs(x) (((x) < 0) ? -(x) : (x))
#endif
+// Used in cases where division by 0 can occur in the retail version.
+// Avoids invalid opcodes on some emulators, and the otherwise UB.
+#ifdef UBFIX
+#define SAFE_DIV(a, b) ((b) ? (a) / (b) : 0)
+#else
+#define SAFE_DIV(a, b) ((a) / (b))
+#endif
+
// There are many quirks in the source code which have overarching behavioral differences from
// a number of other files. For example, diploma.c seems to declare rodata before each use while
// other files declare out of order and must be at the beginning. There are also a number of