aboutsummaryrefslogtreecommitdiff
path: root/contrib/gcc/config/ia64/crtbegin.asm
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/config/ia64/crtbegin.asm')
-rw-r--r--contrib/gcc/config/ia64/crtbegin.asm257
1 files changed, 0 insertions, 257 deletions
diff --git a/contrib/gcc/config/ia64/crtbegin.asm b/contrib/gcc/config/ia64/crtbegin.asm
deleted file mode 100644
index e040916b14e0..000000000000
--- a/contrib/gcc/config/ia64/crtbegin.asm
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Copyright (C) 2000, 2001, 2003, 2005 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 modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING. If not, write to
- the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* As a special exception, if you link this library with other files,
- some of which are compiled with GCC, to produce an executable,
- this library does not by itself cause the resulting executable
- to be covered by the GNU General Public License.
- This exception does not however invalidate any other reasons why
- the executable file might be covered by the GNU General Public License. */
-
-#include "auto-host.h"
-
-.section .ctors,"aw","progbits"
- .align 8
-__CTOR_LIST__:
- data8 -1
-
-.section .dtors,"aw","progbits"
- .align 8
-__DTOR_LIST__:
- data8 -1
-
-.section .jcr,"aw","progbits"
- .align 8
-__JCR_LIST__:
-
-.section .sdata
- .type dtor_ptr,@object
- .size dtor_ptr,8
-dtor_ptr:
- data8 @gprel(__DTOR_LIST__ + 8)
-
- /* A handle for __cxa_finalize to manage c++ local destructors. */
- .global __dso_handle
- .type __dso_handle,@object
- .size __dso_handle,8
-#ifdef SHARED
- .section .data
-__dso_handle:
- data8 __dso_handle
-#else
- .section .bss
- .align 8
-__dso_handle:
- .skip 8
-#endif
- .hidden __dso_handle
-
-
-#ifdef HAVE_INITFINI_ARRAY
-
-.section .fini_array, "a"
- data8 @fptr(__do_global_dtors_aux)
-
-.section .init_array, "a"
- data8 @fptr(__do_jv_register_classes)
- data8 @fptr(__do_global_ctors_aux)
-
-#else /* !HAVE_INITFINI_ARRAY */
-/*
- * Fragment of the ELF _fini 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_dtors_aux to preserve the GP,
- * so that the next fragment in .fini gets the right value.
- */
-.section .fini,"ax","progbits"
- { .mlx
- movl r2 = @pcrel(__do_global_dtors_aux - 16)
- }
- { .mii
- mov r3 = ip
- ;;
- add r2 = r2, r3
- ;;
- }
- { .mib
- nop 0
- mov b6 = r2
- br.call.sptk.many b0 = b6
- }
-
-/* Likewise for _init. */
-
-.section .init,"ax","progbits"
- { .mlx
- movl r2 = @pcrel(__do_jv_register_classes - 16)
- }
- { .mii
- mov r3 = ip
- ;;
- add r2 = r2, r3
- ;;
- }
- { .mib
- nop 0
- mov b6 = r2
- br.call.sptk.many b0 = b6
- }
-#endif /* !HAVE_INITFINI_ARRAY */
-
-.section .text
- .align 32
- .proc __do_global_dtors_aux
-__do_global_dtors_aux:
- .prologue
-#ifndef SHARED
- .save ar.pfs, r35
- alloc loc3 = ar.pfs, 0, 4, 1, 0
- addl loc0 = @gprel(dtor_ptr), gp
- .save rp, loc1
- mov loc1 = rp
- .body
-
- mov loc2 = gp
- nop 0
- br.sptk.many .entry
-#else
- /*
- if (__cxa_finalize)
- __cxa_finalize(__dso_handle)
- */
- .save ar.pfs, r35
- alloc loc3 = ar.pfs, 0, 4, 1, 0
- addl loc0 = @gprel(dtor_ptr), gp
- addl r16 = @ltoff(@fptr(__cxa_finalize)), gp
- ;;
-
- ld8 r16 = [r16]
- ;;
- addl out0 = @ltoff(__dso_handle), gp
- cmp.ne p7, p0 = r0, r16
- ;;
-
- ld8 out0 = [out0]
-(p7) ld8 r18 = [r16], 8
- .save rp, loc1
- mov loc1 = rp
- .body
- ;;
-
- mov loc2 = gp
-(p7) ld8 gp = [r16]
-(p7) mov b6 = r18
-
- nop 0
- nop 0
-(p7) br.call.sptk.many rp = b6
- ;;
-
- nop 0
- nop 0
- br.sptk.many .entry
-#endif
- /*
- do {
- dtor_ptr++;
- (*(dtor_ptr-1)) ();
- } while (dtor_ptr);
- */
-.loop:
- st8 [loc0] = r15 // update dtor_ptr (in memory)
- ld8 r17 = [r16], 8 // r17 <- dtor's entry-point
- nop 0
- ;;
-
- ld8 gp = [r16] // gp <- dtor's gp
- mov b6 = r17
- br.call.sptk.many rp = b6
-
-.entry: ld8 r15 = [loc0] // r15 <- dtor_ptr (gp-relative)
- ;;
- add r16 = r15, loc2 // r16 <- dtor_ptr (absolute)
- adds r15 = 8, r15
- ;;
-
- ld8 r16 = [r16] // r16 <- pointer to dtor's fdesc
- mov rp = loc1
- mov ar.pfs = loc3
- ;;
-
- cmp.ne p6, p0 = r0, r16
-(p6) br.cond.sptk.few .loop
- br.ret.sptk.many rp
- .endp __do_global_dtors_aux
-
- .align 32
- .proc __do_jv_register_classes
-__do_jv_register_classes:
- .prologue
- .save ar.pfs, r33
- alloc loc1 = ar.pfs, 0, 3, 1, 0
- movl out0 = @gprel(__JCR_LIST__)
- ;;
-
- addl r14 = @ltoff(@fptr(_Jv_RegisterClasses)), gp
- add out0 = out0, gp
- .save rp, loc0
- mov loc0 = rp
- .body
- ;;
-
- ld8 r14 = [r14]
- ld8 r15 = [out0]
- cmp.ne p6, p0 = r0, r0
- ;;
-
- cmp.eq.or p6, p0 = r0, r14
- cmp.eq.or p6, p0 = r0, r15
-(p6) br.ret.sptk.many rp
-
- ld8 r15 = [r14], 8
- ;;
- nop 0
- mov b6 = r15
-
- mov loc2 = gp
- ld8 gp = [r14]
- br.call.sptk.many rp = b6
- ;;
-
- mov gp = loc2
- mov rp = loc0
- mov ar.pfs = loc1
-
- nop 0
- nop 0
- br.ret.sptk.many rp
- .endp __do_jv_register_classes
-
-#ifdef SHARED
-.weak __cxa_finalize
-#endif
-.weak _Jv_RegisterClasses