URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [mmix/] [crti.asm] - Rev 282
Compare with Previous | Blame | View Log
/* Copyright (C) 2001, 2002 Free Software Foundation, Inc.Contributed by Hans-Peter Nilsson <hp@bitrange.com>This file is free software; you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by theFree Software Foundation; either version 3, or (at your option) anylater version.This file is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral 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/>. */% This is the crt0 equivalent for mmix-knuth-mmixware, for setting up% things for compiler-generated assembly-code and for setting up things% between where the simulator calls and main, and shutting things down on% the way back. There's an actual crt0.o elsewhere, but that's a dummy.% This file and the GCC output are supposed to be *reasonably*% mmixal-compatible to enable people to re-use output with Knuth's mmixal.% However, forward references are used more freely: we are using the% binutils tools. Users of mmixal beware; you will sometimes have to% re-order things or use temporary variables.% Users of mmixal will want to set up 8H and 9H to be .text and .data% respectively, so the compiler can switch between them pretending they're% segments.% This little treasure is here so the 32 lowest address bits of user data% will not be zero. Because of truncation, that would cause testcase% gcc.c-torture/execute/980701-1.c to incorrectly fail..data ! mmixal:= 8H LOC Data_Segment.p2align 3LOC @+(8-@)@7OCTA 2009.text ! mmixal:= 9H LOC 8B; LOC #100.global Main% The __Stack_start symbol is provided by the link script.stackpp OCTA __Stack_start% "Main" is the magic symbol the simulator jumps to. We want to go% on to "main".% We need to set rG explicitly to avoid hard-to-debug situations.Main SETL $255,32PUT rG,$255% Initialize the stack pointer. It is supposedly made a global% zero-initialized (allowed to change) register in crtn.asm; we use the% explicit number.GETA $255,stackppLDOU $254,$255,0% Make sure we get more than one mem, to simplify counting cycles.LDBU $255,$1,0LDBU $255,$1,1PUSHJ $2,_init#ifdef __MMIX_ABI_GNU__% Copy argc and argv from their initial position to argument registers% where necessary.SET $231,$0SET $232,$1#else% For the mmixware ABI, we need to move arguments. The return value will% appear in $0.SET $2,$1SET $1,$0#endifPUSHJ $0,mainJMP exit% Provide the first part of _init and _fini. Save the return address on the% register stack. We eventually ignore the return address of these% PUSHJ:s, so it doesn't matter that whether .init and .fini code calls% functions or where they store rJ. We shouldn't get there, so die% (TRAP Halt) if that happens..section .init,"ax",@progbits.global _init_init:GET $0,:rJPUSHJ $1,0FSETL $255,255TRAP 0,0,00H IS @% Register _fini to be executed as the last atexit function.#ifdef __MMIX_ABI_GNU__GETA $231,_fini#elseGETA $1,_fini#endifPUSHJ $0,atexit.section .fini,"ax",@progbits.global _fini_fini:GET $0,:rJPUSHJ $1,0FSETL $255,255TRAP 0,0,00H IS @
