This is the mail archive of the
mailing list for the GCC project.
Re: VFPv3 and FLDMD unwind support for ARM, revised version
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: Mark Shinwell <shinwell at codesourcery dot com>
- Cc: Paul Brook <paul at codesourcery dot com>, gcc patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 13 Dec 2006 16:12:17 +0000
- Subject: Re: VFPv3 and FLDMD unwind support for ARM, revised version
- References: <4580254C.firstname.lastname@example.org>
On Wed, 2006-12-13 at 16:07 +0000, Mark Shinwell wrote:
> 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?
> 2006-12-13 Mark Shinwell <email@example.com>
> * config/arm/arm.c (arm_output_fldmx): Output FLDMD instead of
> (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
> (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
> * 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):
> (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.