📄 start.s
字号:
/************************************************************************ * * start.S * * Startup code for application. * * ###################################################################### * * mips_start_of_legal_notice * * Copyright (c) 2002 MIPS Technologies, Inc. All rights reserved. * * * Unpublished rights (if any) reserved under the Copyright Laws of the * United States of America. * * If this document is provided in source format (i.e., in a modifiable form * such as in FrameMaker or Microsoft Word format), then its use and * distribution is subject to a written agreement with MIPS Technologies, * Inc. ("MIPS Technologies"). UNDER NO CIRCUMSTANCES MAY A DOCUMENT * PROVIDED IN SOURCE FORMAT BE DISTRIBUTED TO A THIRD PARTY WITHOUT THE * EXPRESS WRITTEN CONSENT OF MIPS TECHNOLOGIES. * * This document contains information that is proprietary to MIPS * Technologies. Any copying, reproducing, modifying, or use of this * information (in whole or in part) which is not expressly permitted in * writing by MIPS Technologies or a contractually-authorized third party is * strictly prohibited. At a minimum, this information is protected under * unfair competition and copyright laws. Violations thereof may result in * criminal penalties and fines. * * MIPS Technologies or any contractually-authorized third party reserves * the right to change the information contained in this document to improve * function, design or otherwise. MIPS Technologies does not assume any * liability arising out of the application or use of this information, or * of any error of omission in such information. Any warranties, whether * express, statutory, implied or otherwise, including but not limited to * the implied warranties of merchantability or fitness for a particular * purpose, are excluded. Any license under patent rights or any other * intellectual property rights owned by MIPS Technologies or third parties * shall be conveyed by MIPS Technologies or any contractually-authorized * third party in a separate license agreement between the parties. * * The information contained in this document shall not be exported or * transferred for the purpose of reexporting in violation of any U.S. or * non-U.S. regulation, treaty, Executive Order, law, statute, amendment or * supplement thereto. * * The information contained in this document constitutes one or more of the * following: commercial computer software, commercial computer software * documentation or other commercial items. If the user of this information, * or any related documentation of any kind, including related technical * data or manuals, is an agency, department, or other entity of the United * States government ("Government"), the use, duplication, reproduction, * release, modification, disclosure, or transfer of this information, or * any related documentation of any kind, is restricted in accordance with * Federal Acquisition Regulation 12.212 for civilian agencies and Defense * Federal Acquisition Regulation Supplement 227.7202 for military agencies. * The use of this information by the Government is further restricted in * accordance with the terms of the license agreement(s) and/or applicable * contract terms and conditions covering this information from MIPS * * mips_end_of_legal_notice * * ************************************************************************//************************************************************************ * Include files ************************************************************************/#include <regdefs.h> /************************************************************************ * Definitions ************************************************************************//************************************************************************ * Public variables ************************************************************************//************************************************************************ * Static variables ************************************************************************//************************************************************************ * Implementation : Static functions ************************************************************************/ /************************************************************************ * Implementation : Public functions ************************************************************************/ .text/************************************************************************ * * _start * Description : * ------------- * * Function linked to application start address * * Initialises sp and gp registers and clears bss section * * Return values : * --------------- * * None * ************************************************************************/ .globl _start .ent _start _start: .set noreorder#ifdef __ghs__ /* Setup sp and gp */ la gp, __ghsbegin_sdabase addiu gp, gp, 0x4000 addiu gp, gp, 0x4000 la sp, __ghsend_stack /* Clear bss */ la t0, __ghsbegin_sbss la t1, __ghsend_bss#else /* Setup sp and gp */ la gp, _gp la sp, _sp /* Clear bss */ la t0, _fbss /* First address */ la t1, _end /* Last address */#endif addu t1, 3 li t2, ~3 and t1, t21: sw zero, 0(t0) bne t0, t1, 1b addiu t0, 4 /* Get ready to jump to main */ move s0, ra la t0, main /* Jump to main */ jal t0 nop /* Return to monitor */ jr s0 nop .set reorder .end _start/************************************************************************ * * __main, _gccmain * Description : * ------------- * * Dummy functions called by main() function. * * GNU-gcc 2.8.1 : main() calls __main * GNU-gcc 2.9 : main() calls __gccmain * * Return values : * --------------- * * None * ************************************************************************/ .set noreorder .globl __main .globl __gccmain .ent __main__main: __gccmain: jr ra nop .end __main /************************************************************************ * * my_add * * void my_add(float *result, float *x, float *y); * * This routine is placed in assembler to avoid the builtin * fpu emulator of c compilers. * ************************************************************************/ .globl my_add .ent my_add .set noreorder my_add: lwc1 $f10, 0(a1) lwc1 $f8, 0(a2) add.s $f10, $f10, $f8 jr ra swc1 $f10,0(a0) .set reorder .end my_add/************************************************************************ * * my_dadd * * void my_dadd(float *result, float *x, float *y); * ************************************************************************/ .globl my_dadd .ent my_dadd .set noreorder my_dadd: lwc1 $f6, 0(a1) lwc1 $f8, 0(a2) /* convert to double precision and add */ cvt.d.s $f0, $f6 cvt.d.s $f2, $f8 add.d $f4, $f2, $f0 /* move something into f5 */ /* if fr=OFF, this will destroy high part of double result in f4,f5 */ /* if fr=ON, the result in f4 is unaffected: */ li v0, 0x40f00000 /* 7.5000000 */ mtc1 v0, $f5 /* convert back to single precision */ cvt.s.d $f8, $f4 jr ra swc1 $f8,0(a0) .set reorder .end my_dadd
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -