See the comment added in this commit for details. Currently unused. Would save some IWRAM usage in the matrix implementation at the cost of readability. If one operation on a matrix size is used, most other operations will likely be used too, so in practice this may not change IWRAM usage much. Only including the matrix sizes that are used in the final binary would likely have a greater impact. FURTHER TESTING REQUIRED.
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#ifndef __GNUC__
|
|
#error Failed to create target macros. Compiler is not GCC.
|
|
#endif
|
|
|
|
#define NOINLINE [[gnu::noinline]]
|
|
#define ALWAYS_INLINE [[gnu::always_inline]]
|
|
|
|
#ifdef __arm__
|
|
|
|
#define TARGET_ARM_MODE _Pragma("GCC push_options") _Pragma("GCC target(\"arm\")")
|
|
#define TARGET_THUMB_MODE _Pragma("GCC push_options") _Pragma("GCC target(\"thumb\")")
|
|
#define TARGET_END_MODE _Pragma("GCC pop_options")
|
|
#define ARM_MODE [[gnu::target("arm")]]
|
|
#define THUMB_MODE [[gnu::target("thumb")]]
|
|
|
|
#else
|
|
|
|
#define TARGET_ARM_MODE
|
|
#define TARGET_THUMB_MODE
|
|
#define TARGET_END_MODE
|
|
#define ARM_MODE
|
|
#define THUMB_MODE
|
|
|
|
#endif
|
|
|
|
#ifdef __GBA__
|
|
|
|
// If a section attribute is used, the symbol will be placed in the section
|
|
// exactly as specified. This means that when -ffunction-sections is used, functions
|
|
// will no longer be placed in separate sections. This macro is used to mimic
|
|
// the effect of -ffunction-sections while still placing the function in IWRAM.
|
|
#define GBA_IWRAM_FUNC(f) [[gnu::section(".iwram." #f), gnu::long_call]]
|
|
#define GBA_IWRAM [[gnu::section(".iwram"), gnu::long_call]]
|
|
#define GBA_EWRAM [[gnu::section(".ewram"), gnu::long_call]]
|
|
#define GBA_IWRAM_DATA [[gnu::section(".iwram")]]
|
|
#define GBA_EWRAM_DATA [[gnu::section(".ewram")]]
|
|
|
|
#else
|
|
|
|
#define GBA_IWRAM
|
|
#define GBA_EWRAM
|
|
#define GBA_IWRAM_DATA
|
|
#define GBA_EWRAM_DATA
|
|
|
|
#endif
|
|
|