mirror of https://github.com/n64decomp/mk64.git
26 lines
844 B
C
26 lines
844 B
C
#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
|