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.
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 (n...@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 (n...@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"

Reply via email to