diff options
author | Bernd Schmidt <bernd.schmidt@analog.com> | 2009-09-03 15:37:28 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2009-09-03 15:37:28 +0000 |
commit | 9840d30abff62d41bda189f256b1ed3e41e6edc1 (patch) | |
tree | 2a3d9e1c43f8bd260ab33779e73b86699cbfd3cc /gcc/config/bfin/bfin.h | |
parent | be2c0fc9418411a898756e517fb6cfbffb3002eb (diff) | |
download | gcc-9840d30abff62d41bda189f256b1ed3e41e6edc1.zip gcc-9840d30abff62d41bda189f256b1ed3e41e6edc1.tar.gz gcc-9840d30abff62d41bda189f256b1ed3e41e6edc1.tar.bz2 |
linux.h (TARGET_SUPPORTS_SYNC_CALLS): Define to 1.
gcc/
* config/bfin/linux.h (TARGET_SUPPORTS_SYNC_CALLS): Define to 1.
* config/bfin/uclinux.h (TARGET_SUPPORTS_SYNC_CALLS): Define to 1.
* config/bfin/bfin.h (TARGET_SUPPORTS_SYNC_CALLS): Provide default of
0.
* config/bfin/sync.md: New file.
* config/bfin/bfin.md: Include it.
(UNSPEC_ATOMIC): New.
(UNSPEC_ONES): Provide a unique number.
From Jie Zhang <jie.zhang@analog.com>:
* config/bfin/bfin.c (ret_regs): New.
(must_save_fp_p): Don't return true because of frame_pointer_needed.
(must_save_rets_p): New.
(n_regs_saved_by_prologue): Use must_save_rets_p instead of
current_function_is_leaf.
(do_link): Likewise.
(do_unlink): Likewise.
(expand_interrupt_handler_prologue): Use ret_regs array.
(expand_interrupt_handler_epilogue): Use ret_regs array and
pass return register to gen_return_internal.
(bfin_expand_epilogue): Pass return register to
gen_return_internal.
(bfin_expand_call): Explicitly clobber RETS.
* config/bfin/bfin.h (FUNCTION_RETURN_REGISTERS): Define.
* config/bfin/bfin.md (call_symbol_fdpic, call_value_symbol_fdpic,
call_insn_fdpic, call_value_insn_fdpic, call_symbol,
call_value_symbol, call_insn, call_value_insn): Explicitly clobber
RETS.
(return_internal): Take a reg rtx rather than the register number.
gcc/testsuite/
* lib/target-supports.exp (check_effective_target_sync_int_long):
Supported on Blackfin Linux targets.
From-SVN: r151381
Diffstat (limited to 'gcc/config/bfin/bfin.h')
-rw-r--r-- | gcc/config/bfin/bfin.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index a9ff6fa..53a7957 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -794,6 +794,7 @@ enum reg_class typedef enum { SUBROUTINE, INTERRUPT_HANDLER, EXCPT_HANDLER, NMI_HANDLER } e_funkind; +#define FUNCTION_RETURN_REGISTERS { REG_RETS, REG_RETI, REG_RETX, REG_RETN } #define FUNCTION_ARG_REGISTERS { REG_R0, REG_R1, REG_R2, -1 } @@ -1258,4 +1259,8 @@ extern int splitting_for_sched, splitting_loops; #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) ((CHAR) == '!') +#ifndef TARGET_SUPPORTS_SYNC_CALLS +#define TARGET_SUPPORTS_SYNC_CALLS 0 +#endif + #endif /* _BFIN_CONFIG */ |