VFPv3 and FLDMD unwind support for ARM, revised version

Mark Shinwell shinwell@codesourcery.com
Wed Dec 13 16:08:00 GMT 2006


This patch is a revised version of one posted some time ago.  It adds
support for VFPv3 in the unwinder and also uses FSTMD instead of FSTMX
instructions for saving VFP registers in the frame (as per a request
from Richard Earnshaw).  Unlike the previous patch it always uses
FSTMD/FLDMD instead of the X variants.

Tested on arm-none-eabi with no regressions.  OK for mainline?

Mark

--


2006-12-13  Mark Shinwell  <shinwell@codesourcery.com>

	gcc/
	* config/arm/arm.c (arm_output_fldmx): Output FLDMD instead of
	FLDMX.
	(vfp_output_fstmx): Output FSTMD instead of FSTMX.
	(vfp_emit_fstmx): Don't leave space in the frame layout for the
	FSTMX format word.
	(arm_get_vfp_saved_size): Don't add in space for the FSTMX format
	word.
	(arm_output_epilogue): Adjust comment to reflect use of FSTMD.
	(arm_unwind_emit_sequence): Don't compensate for the FSTMX format
	word.  Also emit "vsave" assembler directives in such cases rather
	than "save".
	* config/arm/libunwind.S (gnu_Unwind_Restore_VFP,
	gnu_Unwind_Save_VFP): Adjust comments.
	(gnu_Unwind_Restore_VFP_D, gnu_Unwind_Save_VFP_D): New functions
	for saving and restoring using FSTMD and FLDMD rather than
	FSTMX and FLDMX.
	(gnu_Unwind_Restore_VFP_D_16_to_31, gnu_Unwind_Restore_VFP_D_16_to_31):
	New functions for saving and restoring the VFPv3 registers 16 .. 31.
	* config/arm/pr-support.c (gnu_unwind_execute): Add conditional
	compilation case to correctly handle unwind opcode 0xc8 when using
	VFP.
	* config/arm/unwind-arm.c (struct vfpv3_regs): New.
	(DEMAND_SAVE_VFP_D, DEMAND_SAVE_VFP_V3): New flags.
	(__gnu_Unwind_Save_VFP_D, __gnu_Unwind_Restore_VFP_D,
	__gnu_Unwind_Save_VFP_D_16_to_31, __gnu_Unwind_Restore_VFP_D_16_to_31):
	Declare.
	(restore_non_core_regs): Restore registers using FLDMD rather than
	FLDMX if required.  Also handle restoration of VFPv3 registers.
	(_Unwind_VRS_Pop): Handle saving and restoring of registers using
	FSTMD and FLDMD if required; also handle VFPv3 registers 16 .. 31,
	including cases where the caller specifies a range of registers
	that overlaps the d15/d16 boundary.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: vfpv3-final.patch
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20061213/95e9ef40/attachment.ksh>


More information about the Gcc-patches mailing list