Fix prologue issue

This commit is contained in:
WhenGryphonsFly 2023-06-06 12:26:35 -05:00
parent c2e57ee044
commit b11e16421d
3 changed files with 21 additions and 2 deletions

View File

@ -454,3 +454,6 @@ extern int flag_hex_asm;
/* Nonzero if generated DWARF debug info should be corrected rather than
match the original (buggy) GCC 2.95.x output. */
extern int flag_fixed_debug_line_info;
/* Nonzero if prologue bug should be fixed. */
extern int flag_prologue_bugfix;

View File

@ -717,8 +717,11 @@ far_jump_used_p()
rtx insn;
#ifndef OLD_COMPILER
if (current_function_has_far_jump)
return 1;
if (!flag_prologue_bugfix)
{
if (current_function_has_far_jump)
return 1;
}
#endif
for (insn = get_insns(); insn; insn = NEXT_INSN(insn))

View File

@ -588,6 +588,9 @@ int flag_hex_asm = 0;
/* Fix buggy DWARF line info generation. */
int flag_fixed_debug_line_info = 0;
/* Fix prologue bug in new compiler. */
int flag_prologue_bugfix = 0;
typedef struct
{
char *string;
@ -729,6 +732,16 @@ lang_independent_options f_options[] =
"Use hex instead of decimal in assembly output"},
{"fix-debug-line", &flag_fixed_debug_line_info, 1,
"Generate fixed DWARF line info"},
/* This flag fixes a bug in the newer agbcc version that causes `lr` to be
saved onto the stack in functions where it is not necessary. This is
needed to produce matching code for certain GBA games.
This flag is defined under OLD_COMPILER to prevent a situation where a game
that uses both agbcc and old_agbcc (e.g., pokepinballrs) needs to maintain two
separate lists of flags depending on the compiler used for a specific file.
Otherwise, old_agbcc will throw an error. */
{"prologue-bugfix", &flag_prologue_bugfix, 1,
"Prevent unnecessary saving of the lr register to the stack"},
};
#define NUM_ELEM(a) (sizeof (a) / sizeof ((a)[0]))