]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/config/ia64/crtend.asm
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / config / ia64 / crtend.asm
index e5d109ae5b33e2e62cee50b2e3ead2dc9ac993e3..a904af9cfd9d7cada093096631fe17db3caf0fb9 100644 (file)
@@ -1,20 +1,28 @@
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2003, 2005, 2009 Free Software Foundation, Inc.
    Contributed by Jes Sorensen, <Jes.Sorensen@cern.ch>
 
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
+   This file is part of GCC.
 
-   The GNU C Library is distributed in the hope that it will be useful,
+   GCC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
 
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "auto-host.h"
 
 .section .ctors,"aw","progbits"
        .align  8
@@ -31,6 +39,10 @@ __DTOR_END__:
 __JCR_END__:
        data8   0
 
+#ifdef HAVE_INITFINI_ARRAY
+       .global __do_global_ctors_aux
+       .hidden __do_global_ctors_aux
+#else /* !HAVE_INITFINI_ARRAY */
 /*
  * Fragment of the ELF _init routine that invokes our dtor cleanup.
  *
@@ -46,7 +58,7 @@ __JCR_END__:
  */
 .section .init,"ax","progbits"
        { .mlx
-         movl r2 = @pcrel(__do_global_ctors_aux# - 16)
+         movl r2 = @pcrel(__do_global_ctors_aux - 16)
        }
        { .mii
          mov r3 = ip
@@ -59,59 +71,51 @@ __JCR_END__:
          br.call.sptk.many b0 = b6
          ;;
        }
+#endif /* !HAVE_INITFINI_ARRAY */
 
 .text
-       .align 16
-       .proc __do_global_ctors_aux#
+       .align 32
+       .proc __do_global_ctors_aux
 __do_global_ctors_aux:
+       .prologue
        /*
                for (loc0 = __CTOR_END__-1; *p != -1; --p)
                  (*p) ();
        */
-       { .mlx
-         alloc loc4 = ar.pfs, 0, 5, 0, 0
-         movl loc0 = @gprel(__CTOR_END__# - 8)
-         ;;
-       }
-       { .mmi
-         add loc0 = loc0, gp
-         mov loc1 = b0
-         ;;
-       }
-       {
-         .mmi
-         ld8 loc3 = [loc0], -8
-         mov loc2 = gp
-         ;;
-       }
-       { .mfb
-         cmp.eq p6, p0 = -1, loc3
-(p6)     br.cond.spnt.few 2f
-       }
-0:
-       { .mmi
-         ld8 r15 = [loc3], 8
-         ;;
-         ld8 gp = [loc3]
-         mov b6 = r15
-       }
-       { .mfb
-         ld8 loc3 = [loc0], -8
-         br.call.sptk.many b0 = b6
-         ;;
-       }
-       { .mfb
-         cmp.ne p6, p0 = -1, loc3
-(p6)     br.cond.sptk.few 0b
-       }
-2:
-       { .mii
-         mov gp = loc2
-         mov b0 = loc1
-         mov ar.pfs = loc4
-       }
-       { .bbb
-         br.ret.sptk.many b0
-         ;;
-       }
-       .endp __do_global_ctors_aux#
+       .save ar.pfs, r34
+       alloc loc2 = ar.pfs, 0, 5, 0, 0
+       movl loc0 = @gprel(__CTOR_END__ - 8)
+       ;;
+
+       add loc0 = loc0, gp
+       ;;
+       ld8 loc3 = [loc0], -8
+       .save rp, loc1
+       mov loc1 = rp
+       .body
+       ;;
+
+       cmp.eq p6, p0 = -1, loc3
+       mov loc4 = gp
+(p6)   br.cond.spnt.few .exit
+
+.loop: ld8 r15 = [loc3], 8
+       ;;
+       ld8 gp = [loc3]
+       mov b6 = r15
+
+       ld8 loc3 = [loc0], -8
+       nop 0
+       br.call.sptk.many rp = b6
+       ;;
+
+       cmp.ne p6, p0 = -1, loc3
+       nop 0
+(p6)   br.cond.sptk.few .loop
+
+.exit: mov gp = loc3
+       mov rp = loc1
+       mov ar.pfs = loc2
+
+       br.ret.sptk.many rp
+       .endp __do_global_ctors_aux