URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgcc/] [config/] [ia64/] [crtend.S] - Rev 734
Compare with Previous | Blame | View Log
/* Copyright (C) 2000, 2001, 2003, 2005, 2009 Free Software Foundation, Inc.Contributed by Jes Sorensen, <Jes.Sorensen@cern.ch>This file is part of GCC.GCC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.Under Section 7 of GPL version 3, you are granted additionalpermissions described in the GCC Runtime Library Exception, version3.1, as published by the Free Software Foundation.You should have received a copy of the GNU General Public License anda 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__CTOR_END__:data8 0.section .dtors,"aw","progbits".align 8__DTOR_END__:data8 0.section .jcr,"aw","progbits".align 8__JCR_END__:data8 0#ifdef HAVE_INITFINI_ARRAY_SUPPORT.global __do_global_ctors_aux.hidden __do_global_ctors_aux#else /* !HAVE_INITFINI_ARRAY_SUPPORT *//** Fragment of the ELF _init routine that invokes our dtor cleanup.** We make the call by indirection, because in large programs the* .fini and .init sections are not in range of the destination, and* we cannot allow the linker to insert a stub at the end of this* fragment of the _fini function. Further, Itanium does not implement* the long branch instructions, and we do not wish every program to* trap to the kernel for emulation.** Note that we require __do_global_ctors_aux to preserve the GP,* so that the next fragment in .fini gets the right value.*/.section .init,"ax","progbits"{ .mlxmovl r2 = @pcrel(__do_global_ctors_aux - 16)}{ .miimov r3 = ip;;add r2 = r2, r3;;}{ .mibmov b6 = r2br.call.sptk.many b0 = b6;;}#endif /* !HAVE_INITFINI_ARRAY_SUPPORT */.text.align 32.proc __do_global_ctors_aux__do_global_ctors_aux:.prologue/*for (loc0 = __CTOR_END__-1; *p != -1; --p)(*p) ();*/.save ar.pfs, r34alloc loc2 = ar.pfs, 0, 5, 0, 0movl loc0 = @gprel(__CTOR_END__ - 8);;add loc0 = loc0, gp;;ld8 loc3 = [loc0], -8.save rp, loc1mov loc1 = rp.body;;cmp.eq p6, p0 = -1, loc3mov loc4 = gp(p6) br.cond.spnt.few .exit.loop: ld8 r15 = [loc3], 8;;ld8 gp = [loc3]mov b6 = r15ld8 loc3 = [loc0], -8nop 0br.call.sptk.many rp = b6;;cmp.ne p6, p0 = -1, loc3nop 0(p6) br.cond.sptk.few .loop.exit: mov gp = loc3mov rp = loc1mov ar.pfs = loc2br.ret.sptk.many rp.endp __do_global_ctors_aux
