From e413e2ec00236b11a49b3ca4b856318df7d08b4c Mon Sep 17 00:00:00 2001 From: Tyler McGavran Date: Tue, 18 Jan 2022 07:46:58 -0500 Subject: Match 4 functions in math_util, do some tidying up of imports for math_util (#144) * Match func_802B5450, func_802B5F00, func_802B71CC * Match func_802B4FF8 Also do some import fixing Signed-off-by: Taggerung --- include/trig_tables.h | 25 +++++++++++++++++++++++++ include/variables.h | 2 ++ 2 files changed, 27 insertions(+) create mode 100644 include/trig_tables.h (limited to 'include') diff --git a/include/trig_tables.h b/include/trig_tables.h new file mode 100644 index 000000000..b209dfb59 --- /dev/null +++ b/include/trig_tables.h @@ -0,0 +1,25 @@ +#ifndef TRIG_TABLES_H +#define TRIG_TABLES_H + +/* + * The sine and cosine tables overlap, but "#define gCosineTable (gSineTable + + * 0x400)" doesn't give expected codegen; gSineTable and gCosineTable need to + * be different symbols for code to match. Most likely the tables were placed + * adjacent to each other, and gSineTable cut short, such that reads overflow + * into gCosineTable. + * + * These kinds of out of bounds reads are undefined behavior, and break on + * e.g. GCC (which doesn't place the tables next to each other, and probably + * exploits array sizes for range analysis-based optimizations as well). + * Thus, for non-IDO compilers we use the standard-compliant version. + */ +extern f32 gSineTable[]; +#ifdef AVOID_UB +#define gCosineTable (gSineTable + 0x400) +#else +extern f32 gCosineTable[]; +#endif + +extern s16 gArctanTable[]; + +#endif diff --git a/include/variables.h b/include/variables.h index a1257d3bb..f528da7b1 100644 --- a/include/variables.h +++ b/include/variables.h @@ -108,6 +108,8 @@ extern s32 gActiveScreenMode; // D_800DC52C extern s32 D_800DC540; extern u16 D_800DC5FC; +extern u16 D_80150112; + extern u16 D_8015F890; extern u16 D_80162DD4[]; -- cgit v1.2.3