X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=gcc%2Fconfig%2Fia64%2Fcrtend.asm;fp=gcc%2Fconfig%2Fia64%2Fcrtend.asm;h=a904af9cfd9d7cada093096631fe17db3caf0fb9;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=e5d109ae5b33e2e62cee50b2e3ead2dc9ac993e3;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/config/ia64/crtend.asm b/gcc/config/ia64/crtend.asm index e5d109ae..a904af9c 100644 --- a/gcc/config/ia64/crtend.asm +++ b/gcc/config/ia64/crtend.asm @@ -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, - 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 + . */ + +#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