Patchwork [ARM] Expunge obsolete FPA and target support from libgcc

login
register
mail settings
Submitter Richard Earnshaw
Date Dec. 4, 2012, 1:50 p.m.
Message ID <50BDFF8C.9050700@arm.com>
Download mbox | patch
Permalink /patch/203636/
State New
Headers show

Comments

Richard Earnshaw - Dec. 4, 2012, 1:50 p.m.
Now that the main part of the compiler no-longer supports generating
code for the FPA or obsolete targets, this patch cleans up the code in
libgcc that handles it.

	* config.host: (arm*-*-freebsd*): Remove.
	(arm*-*-linux*, arm*-*-uclinux*): Simplify logic.
	(arm*-*-elf*): Remove.
	(arm*-*-wince-pe*): Remove.
	* arm/unwind-arm.c (struct fpa_reg): Delete.
	(struct fpa_regs): Delete.
	(phase1_vrs): Remove fpa element.
	(_Unwind_VRS_Get): Remove _UVRSC_FPA.
	(_Unwind_VRS_Set, _Unwind_VRS_Pop): Likewise.
	* arm/pr-support.c (__gnu_unwind_execute): Remove FPA support.
	* ieee754-sf.S (floatundisf): Remove FPA support.
	(floatdisf): Likewise.
	* ieee75f-df.S (floatundidf): Likewise.
	(floatdidf): Likewise.

Patch

Index: libgcc/config/arm/unwind-arm.c
===================================================================
--- libgcc/config/arm/unwind-arm.c	(revision 193943)
+++ libgcc/config/arm/unwind-arm.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* ARM EABI compliant unwinding routines.
-   Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2009, 2012 Free Software Foundation, Inc.
    Contributed by Paul Brook
 
    This file is free software; you can redistribute it and/or modify it
@@ -53,16 +53,6 @@  struct vfpv3_regs
   _uw64 d[16];
 };
 
-struct fpa_reg
-{
-  _uw w[3];
-};
-
-struct fpa_regs
-{
-  struct fpa_reg f[8];
-};
-
 struct wmmxd_regs
 {
   _uw64 wd[16];
@@ -90,7 +80,6 @@  typedef struct
   _uw prev_sp; /* Only valid during forced unwinding.  */
   struct vfp_regs vfp;
   struct vfpv3_regs vfp_regs_16_to_31;
-  struct fpa_regs fpa;
   struct wmmxd_regs wmmxd;
   struct wmmxc_regs wmmxc;
 } phase1_vrs;
@@ -181,7 +170,6 @@  _Unwind_VRS_Result _Unwind_VRS_Get (_Unw
       return _UVRSR_OK;
 
     case _UVRSC_VFP:
-    case _UVRSC_FPA:
     case _UVRSC_WMMXD:
     case _UVRSC_WMMXC:
       return _UVRSR_NOT_IMPLEMENTED;
@@ -213,7 +201,6 @@  _Unwind_VRS_Result _Unwind_VRS_Set (_Unw
       return _UVRSR_OK;
 
     case _UVRSC_VFP:
-    case _UVRSC_FPA:
     case _UVRSC_WMMXD:
     case _UVRSC_WMMXC:
       return _UVRSR_NOT_IMPLEMENTED;
@@ -380,9 +367,6 @@  _Unwind_VRS_Result _Unwind_VRS_Pop (_Unw
       }
       return _UVRSR_OK;
 
-    case _UVRSC_FPA:
-      return _UVRSR_NOT_IMPLEMENTED;
-
     case _UVRSC_WMMXD:
       {
 	_uw start = discriminator >> 16;
Index: libgcc/config/arm/pr-support.c
===================================================================
--- libgcc/config/arm/pr-support.c	(revision 193943)
+++ libgcc/config/arm/pr-support.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* ARM EABI compliant unwinding routines
-   Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2009, 2012 Free Software Foundation, Inc.
    Contributed by Paul Brook
  
    This file is free software; you can redistribute it and/or modify it
@@ -226,15 +226,9 @@  __gnu_unwind_execute (_Unwind_Context *
 		return _URC_FAILURE;
 	      continue;
 	    }
-	  if ((op & 0xfc) == 0xb4)
-	    {
-	      /* Pop FPA E[4]-E[4+nn].  */
-	      op = 0x40000 | ((op & 3) + 1);
-	      if (_Unwind_VRS_Pop (context, _UVRSC_FPA, op, _UVRSD_FPAX)
-		  != _UVRSR_OK)
-		return _URC_FAILURE;
-	      continue;
-	    }
+	  if ((op & 0xfc) == 0xb4)  /* Obsolete FPA.  */
+	    return _URC_FAILURE;
+
 	  /* op & 0xf8 == 0xb8.  */
 	  /* Pop VFP D[8]-D[8+nnn] with fldmx.  */
 	  op = 0x80000 | ((op & 7) + 1);
@@ -278,15 +272,6 @@  __gnu_unwind_execute (_Unwind_Context *
 	    }
 	  if (op == 0xc8)
 	    {
-#ifndef __VFP_FP__
- 	      /* Pop FPA registers.  */
- 	      op = next_unwind_byte (uws);
-	      op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
- 	      if (_Unwind_VRS_Pop (context, _UVRSC_FPA, op, _UVRSD_FPAX)
- 		  != _UVRSR_OK)
- 		return _URC_FAILURE;
- 	      continue;
-#else
               /* Pop VFPv3 registers D[16+ssss]-D[16+ssss+cccc] with vldm.  */
               op = next_unwind_byte (uws);
               op = (((op & 0xf0) + 16) << 12) | ((op & 0xf) + 1);
@@ -294,7 +279,6 @@  __gnu_unwind_execute (_Unwind_Context *
                   != _UVRSR_OK)
                 return _URC_FAILURE;
               continue;
-#endif
 	    }
 	  if (op == 0xc9)
 	    {
Index: libgcc/config/arm/ieee754-sf.S
===================================================================
--- libgcc/config/arm/ieee754-sf.S	(revision 193943)
+++ libgcc/config/arm/ieee754-sf.S	(working copy)
@@ -1,6 +1,7 @@ 
 /* ieee754-sf.S single-precision floating point support for ARM
 
-   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009  Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2012
+   Free Software Foundation, Inc.
    Contributed by Nicolas Pitre (nico@cam.org)
 
    This file is free software; you can redistribute it and/or modify it
@@ -325,12 +326,7 @@  ARM_FUNC_START floatundisf
 ARM_FUNC_ALIAS aeabi_ul2f floatundisf
 
 	orrs	r2, r0, r1
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	do_it	eq, t
-	mvfeqs	f0, #0.0
-#else
 	do_it	eq
-#endif
 	RETc(eq)
 
 	mov	r3, #0
@@ -340,12 +336,7 @@  ARM_FUNC_START floatdisf
 ARM_FUNC_ALIAS aeabi_l2f floatdisf
 
 	orrs	r2, r0, r1
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	do_it	eq, t
-	mvfeqs	f0, #0.0
-#else
 	do_it	eq
-#endif
 	RETc(eq)
 
 	ands	r3, ah, #0x80000000	@ sign bit in r3
@@ -358,14 +349,6 @@  ARM_FUNC_ALIAS aeabi_l2f floatdisf
 	rsc	ah, ah, #0
 #endif
 1:
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	@ For hard FPA code we want to return via the tail below so that
-	@ we can return the result in f0 as well as in r0 for backwards
-	@ compatibility.
-	str	lr, [sp, #-8]!
-	adr	lr, LSYM(f0_ret)
-#endif
-
 	movs	ip, ah
 	do_it	eq, tt
 	moveq	ip, al
@@ -427,15 +410,6 @@  ARM_FUNC_ALIAS aeabi_l2f floatdisf
 	biceq	r0, r0, ip, lsr #31
 	RET
 
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-
-LSYM(f0_ret):
-	str	r0, [sp, #-4]!
-	ldfs	f0, [sp], #4
-	RETLDM
-
-#endif
-
 	FUNC_END floatdisf
 	FUNC_END aeabi_l2f
 	FUNC_END floatundisf
Index: libgcc/config/arm/ieee754-df.S
===================================================================
--- libgcc/config/arm/ieee754-df.S	(revision 193943)
+++ libgcc/config/arm/ieee754-df.S	(working copy)
@@ -1,6 +1,7 @@ 
 /* ieee754-df.S double-precision floating point support for ARM
 
-   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009  Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2012
+   Free Software Foundation, Inc.
    Contributed by Nicolas Pitre (nico@cam.org)
 
    This file is free software; you can redistribute it and/or modify it
@@ -36,9 +37,7 @@ 
  */
 
 
-@ For FPA, float words are always big-endian.
-@ For VFP, floats words follow the memory system mode.
-#if defined(__VFP_FP__) && !defined(__ARMEB__)
+#ifndef __ARMEB__
 #define xl r0
 #define xh r1
 #define yl r2
@@ -494,24 +493,10 @@  ARM_FUNC_START floatundidf
 ARM_FUNC_ALIAS aeabi_ul2d floatundidf
 
 	orrs	r2, r0, r1
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	do_it	eq, t
-	mvfeqd	f0, #0.0
-#else
 	do_it	eq
-#endif
 	RETc(eq)
 
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	@ For hard FPA code we want to return via the tail below so that
-	@ we can return the result in f0 as well as in r0/r1 for backwards
-	@ compatibility.
-	adr	ip, LSYM(f0_ret)
-	@ Push pc as well so that RETLDM works correctly.
-	do_push	{r4, r5, ip, lr, pc}
-#else
 	do_push	{r4, r5, lr}
-#endif
 
 	mov	r5, #0
 	b	2f
@@ -520,24 +505,10 @@  ARM_FUNC_START floatdidf
 ARM_FUNC_ALIAS aeabi_l2d floatdidf
 
 	orrs	r2, r0, r1
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	do_it	eq, t
-	mvfeqd	f0, #0.0
-#else
 	do_it	eq
-#endif
 	RETc(eq)
 
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-	@ For hard FPA code we want to return via the tail below so that
-	@ we can return the result in f0 as well as in r0/r1 for backwards
-	@ compatibility.
-	adr	ip, LSYM(f0_ret)
-	@ Push pc as well so that RETLDM works correctly.
-	do_push	{r4, r5, ip, lr, pc}
-#else
 	do_push	{r4, r5, lr}
-#endif
 
 	ands	r5, ah, #0x80000000	@ sign bit in r5
 	bpl	2f
@@ -552,7 +523,7 @@  ARM_FUNC_ALIAS aeabi_l2d floatdidf
 	mov	r4, #0x400		@ initial exponent
 	add	r4, r4, #(52-1 - 1)
 
-	@ FPA little-endian: must swap the word order.
+	@ If FP word order does not match integer word order, swap the words.
 	.ifnc	xh, ah
 	mov	ip, al
 	mov	xh, ah
@@ -580,17 +551,6 @@  ARM_FUNC_ALIAS aeabi_l2d floatdidf
 	add	r4, r4, r2
 	b	LSYM(Lad_p)
 
-#if !defined (__VFP_FP__) && !defined(__SOFTFP__)
-
-	@ Legacy code expects the result to be returned in f0.  Copy it
-	@ there as well.
-LSYM(f0_ret):
-	do_push	{r0, r1}
-	ldfd	f0, [sp], #8
-	RETLDM
-
-#endif
-
 	FUNC_END floatdidf
 	FUNC_END aeabi_l2d
 	FUNC_END floatundidf
Index: libgcc/config.host
===================================================================
--- libgcc/config.host	(revision 193943)
+++ libgcc/config.host	(working copy)
@@ -320,39 +320,21 @@  arm-wrs-vxworks)
 	tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-fdpbit"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
-arm*-*-freebsd*)
-	tmake_file="$tmake_file arm/t-arm arm/t-strongarm-elf t-fdpbit"
-	;;
 arm*-*-netbsdelf*)
 	tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover"
 	;;
 arm*-*-linux*)			# ARM GNU/Linux with ELF
 	tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix"
-	case ${host} in
-	arm*-*-linux-*)
-	  tmake_file="${tmake_file} arm/t-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
-	  tm_file="$tm_file arm/bpabi-lib.h"
-	  unwind_header=config/arm/unwind-arm.h
-	  ;;
-	*)
-	  tmake_file="$tmake_file arm/t-linux"
- 	  ;;
-	esac
+	tmake_file="${tmake_file} arm/t-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
+	tm_file="$tm_file arm/bpabi-lib.h"
+	unwind_header=config/arm/unwind-arm.h
 	tmake_file="$tmake_file t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 	;;
 arm*-*-uclinux*)		# ARM ucLinux
 	tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
-	case ${host} in
-	arm*-*-uclinux*eabi)
-	  tmake_file="${tmake_file} arm/t-bpabi"
-	  tm_file="$tm_file arm/bpabi-lib.h"
-	  unwind_header=config/arm/unwind-arm.h
-	  ;;
-	esac
-	tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
-	extra_parts="$extra_parts crti.o crtn.o"
-	;;
-arm*-*-ecos-elf)
+	tmake_file="${tmake_file} arm/t-bpabi"
+	tm_file="$tm_file arm/bpabi-lib.h"
+	unwind_header=config/arm/unwind-arm.h
 	tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
@@ -373,13 +355,6 @@  arm*-*-eabi* | arm*-*-symbianelf* | arm*
 	tmake_file="$tmake_file t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 	unwind_header=config/arm/unwind-arm.h
 	;;
-arm*-*-elf)
-	tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
-	extra_parts="$extra_parts crti.o crtn.o"
-	;;
-arm*-wince-pe*)
-	tmake_file="$tmake_file arm/t-arm arm/t-wince-pe"
-	;;
 avr-*-rtems*)
 	tmake_file="$tmake_file avr/t-avr avr/t-rtems t-fpbit"
 	tm_file="$tm_file avr/avr-lib.h"