gcc/libgcc
Max Filippov 590e26360c Implement call0 ABI for xtensa
call0 is an ABI that doesn't use register windows.

2015-03-03  Max Filippov  <jcmvbkbc@gmail.com>

gcc/
	* config/xtensa/constraints.md ("a" constraint): Include stack
	pointer in case of call0 ABI.
	("q" constraint): Make empty in case of call0 ABI.
	("D" constraint): Include stack pointer in case of call0 ABI.
	* config/xtensa/xtensa-protos.h (xtensa_set_return_address,
	xtensa_expand_epilogue, xtensa_regno_to_class): Add new function
	prototypes.
	* config/xtensa/xtensa.c (xtensa_callee_save_size): New
	variable.
	(xtensa_regno_to_class): Make it a local variable in the
	function xtensa_regno_to_class.
	(xtensa_function_epilogue, TARGET_ASM_FUNCTION_EPILOGUE): Remove
	macro, function prototype and implementation.
	(reg_nonleaf_alloc_order): Make it a local variable in the
	function order_regs_for_local_alloc.
	(xtensa_conditional_register_usage): New function.
	(TARGET_CONDITIONAL_REGISTER_USAGE): Define macro.
	(xtensa_valid_move): Allow direct moves to stack pointer
	register in call0 ABI.
	(xtensa_setup_frame_addresses): Only spill register windows in
	windowed ABI.
	(xtensa_emit_call): Emit call(x)8 or call(x)0 in windowed and
	call0 ABI respectively.
	(xtensa_function_arg_1): Only mark a7 register for copying in
	windowed ABI.
	(xtensa_call_save_reg): New function.
	(compute_frame_size): Add space for callee saved register
	storage to the frame size in call0 ABI.
	(xtensa_expand_prologue): Generate code to set up stack frame
	and save callee-saved registers in call0 ABI.
	(xtensa_expand_epilogue): New function.
	(xtensa_set_return_address): New function.
	(xtensa_return_addr): Calculate return address in call0 ABI.
	(xtensa_builtin_saveregs): Only mark a7 register for copying and
	emit copying code in windowed ABI.
	(order_regs_for_local_alloc): Add preferred register allocation
	order for non-leaf function in call0 ABI.
	(xtensa_static_chain): Add atatic chain passing for call0 ABI.
	(xtensa_asm_trampoline_template): Add trampoline generation for
	call0 ABI.
	(xtensa_trampoline_init): Add trampoline initialization for
	call0 ABI.
	(xtensa_conditional_register_usage, xtensa_regno_to_class): New
	functions.
	* config/xtensa/xtensa.h (TARGET_WINDOWED_ABI): New macro.
	(TARGET_CPU_CPP_BUILTINS): Add built-in define for call0 ABI.
	(CALL_USED_REGISTERS): Modify to encode both windowed and call0
	ABI call-used registers.
	(HARD_FRAME_POINTER_REGNUM): Add frame pointer for call0 ABI.
	(INCOMING_REGNO, OUTGOING_REGNO): Use argument unchanged in
	call0 ABI.
	(REG_CLASS_CONTENTS): Include all registers into the preferred
	reload registers set, adjust the set in the
	xtensa_conditional_register_usage.
	(xtensa_regno_to_class): Drop variable declaration.
	(REGNO_REG_CLASS): Redefine to use xtensa_regno_to_class
	function.
	(WINDOW_SIZE): Define as 8 or 0 for windowed and call0 ABI
	respectively.
	(FUNCTION_PROFILER): Add _mcount call for call0 ABI.
	(TRAMPOLINE_SIZE): Define trampoline size for call0 ABI.
	(RETURN_ADDR_IN_PREVIOUS_FRAME): Define to 0 in call0 ABI.
	(ASM_OUTPUT_POOL_PROLOGUE): Always generate literal pool
	location in call0 ABI.
	(EH_RETURN_STACKADJ_RTX): New definition, use a10 for passing
	stack adjustment size when handling exception.
	(CRT_CALL_STATIC_FUNCTION): Add definition for call0 ABI.
	* config/xtensa/xtensa.md (A9_REG, UNSPECV_BLOCKAGE): New
	definitions.
	("return" pattern): Generate ret.n/ret in call0 ABI.
	("epilogue" pattern): Expand epilogue.
	("nonlocal_goto" pattern): Use default in call0 ABI.
	("eh_return" pattern): Move implementation to eh_set_a0_windowed,
	emit eh_set_a0_* depending on ABI.
	("eh_set_a0_windowed" pattern): Former eh_return pattern.
	("eh_set_a0_call0", "blockage"): New patterns.

libgcc/
	* config/xtensa/lib2funcs.S (__xtensa_libgcc_window_spill,
	__xtensa_nonlocal_goto): Don't compile for call0 ABI.
	(__xtensa_sync_caches): Only use entry and retw in windowed ABI,
	use ret in call0 ABI.
	* config/xtensa/t-windowed: New file.
	* libgcc/config/xtensa/t-xtensa (LIB2ADDEH): Move to t-windowed.
	* libgcc/configure: Regenerated.
	* libgcc/configure.ac: Check if xtensa target is configured for
	windowed ABI and thus needs to use custom unwind code.

From-SVN: r221158
2015-03-03 17:44:01 +00:00
..
config Implement call0 ABI for xtensa 2015-03-03 17:44:01 +00:00
soft-fp Update soft-fp from glibc. 2014-10-09 19:21:30 +01:00
ChangeLog Implement call0 ABI for xtensa 2015-03-03 17:44:01 +00:00
config.host Committing VTV Cygwin patch for Patrick Wollgast 2015-01-29 00:03:56 -08:00
config.in re PR libgcc/65038 ([regression 5] Unable to find ftw.h for libgcov-util.c) 2015-02-27 14:19:38 +01:00
configure Implement call0 ABI for xtensa 2015-03-03 17:44:01 +00:00
configure.ac Implement call0 ABI for xtensa 2015-03-03 17:44:01 +00:00
crtstuff.c Update copyright years. 2015-01-05 13:33:28 +01:00
dfp-bit.c Update copyright years. 2015-01-05 13:33:28 +01:00
dfp-bit.h Update copyright years. 2015-01-05 13:33:28 +01:00
divmod.c Update copyright years. 2015-01-05 13:33:28 +01:00
empty.mk
emutls.c Update copyright years. 2015-01-05 13:33:28 +01:00
enable-execute-stack-empty.c enable-execute-stack-empty.c (__enable_execute_stack): Add prototype. 2011-06-22 13:20:07 +02:00
enable-execute-stack-mprotect.c Update copyright years. 2015-01-05 13:33:28 +01:00
find-symver.awk Update copyright years. 2015-01-05 13:33:28 +01:00
fixed-bit.c Update copyright years. 2015-01-05 13:33:28 +01:00
fixed-bit.h Update copyright years. 2015-01-05 13:33:28 +01:00
fixed-obj.mk Makefile.in (fixed-funcs,fixed-conv-funcs): filter-out LIB2FUNCS_EXCLUDE before adding them to libgcc-objects, libgcc-s-objects. 2012-08-23 15:41:03 +00:00
floatunsidf.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
floatunsisf.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
floatunsitf.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
floatunsixf.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
fp-bit.c Update copyright years. 2015-01-05 13:33:28 +01:00
fp-bit.h Update copyright years. 2015-01-05 13:33:28 +01:00
gbl-ctors.h Update copyright years. 2015-01-05 13:33:28 +01:00
gen-fixed.sh fixed-obj.mk: New file to support fine-grain fixed-point functions. 2007-09-17 22:18:13 +00:00
generic-morestack-thread.c Update copyright years. 2015-01-05 13:33:28 +01:00
generic-morestack.c Update copyright years. 2015-01-05 13:33:28 +01:00
generic-morestack.h Update copyright years. 2015-01-05 13:33:28 +01:00
gstdint.h dfp.c (WORDS_BIGENDIAN): Define to 0 if not defined. 2008-06-11 00:43:09 +01:00
gthr-posix.h Update copyright years. 2015-01-05 13:33:28 +01:00
gthr-single.h re PR libgcc/64885 (libstdc++ all_attributes failure) 2015-03-02 18:02:18 +00:00
gthr.h Update copyright years. 2015-01-05 13:33:28 +01:00
libgcc2.c Update copyright years. 2015-01-05 13:33:28 +01:00
libgcc2.h Update copyright years. 2015-01-05 13:33:28 +01:00
libgcc-std.ver.in Update copyright years. 2015-01-05 13:33:28 +01:00
libgcov-driver-system.c re PR gcov-profile/61889 (gcov-tool.c uses nftw, ftw.h) 2015-02-10 15:13:13 +01:00
libgcov-driver.c Update copyright years. 2015-01-05 13:33:28 +01:00
libgcov-interface.c Update copyright years. 2015-01-05 13:33:28 +01:00
libgcov-merge.c Update copyright years. 2015-01-05 13:33:28 +01:00
libgcov-profiler.c Update copyright years. 2015-01-05 13:33:28 +01:00
libgcov-util.c re PR libgcc/65038 ([regression 5] Unable to find ftw.h for libgcov-util.c) 2015-02-27 14:19:38 +01:00
libgcov.h Update copyright years. 2015-01-05 13:33:28 +01:00
Makefile.in Committing VTV Cygwin patch for Patrick Wollgast 2015-01-29 00:03:56 -08:00
memcmp.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
memcpy.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
memmove.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
memset.c Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
mkheader.sh Update copyright years. 2015-01-05 13:33:28 +01:00
mkmap-flat.awk Update copyright years. 2015-01-05 13:33:28 +01:00
mkmap-symver.awk Update copyright years. 2015-01-05 13:33:28 +01:00
offloadstuff.c Update copyright years. 2015-01-05 13:33:28 +01:00
shared-object.mk Add the nvptx port. 2014-11-10 16:12:42 +00:00
siditi-object.mk Move libgcc2 to toplevel libgcc 2011-11-02 15:23:48 +00:00
static-object.mk Add the nvptx port. 2014-11-10 16:12:42 +00:00
sync.c Update copyright years. 2015-01-05 13:33:28 +01:00
udivmod.c Update copyright years. 2015-01-05 13:33:28 +01:00
udivmodsi4.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-arm-common.inc Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-c.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-compat.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-compat.h Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-dw2-fde-compat.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-dw2-fde-dip.c Move Solaris/x86 CRT_GET_RFIB_DATA definition to libgcc 2015-01-27 10:02:26 +00:00
unwind-dw2-fde.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-dw2-fde.h unwind-dw2-fde.h (last_fde): Use "(const fde *)" instead of "(char *)" to avoid qualifier warning by 'xgcc'... 2015-01-22 09:22:31 -07:00
unwind-dw2.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-dw2.h Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-generic.h Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-pe.h Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-seh.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind-sjlj.c Update copyright years. 2015-01-05 13:33:28 +01:00
unwind.inc Update copyright years. 2015-01-05 13:33:28 +01:00
vtv_end_preinit.c Update copyright years. 2015-01-05 13:33:28 +01:00
vtv_end.c Update copyright years. 2015-01-05 13:33:28 +01:00
vtv_start_preinit.c Update copyright years. 2015-01-05 13:33:28 +01:00
vtv_start.c Update copyright years. 2015-01-05 13:33:28 +01:00