URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [v850/] [lib1funcs.asm] - Rev 282
Compare with Previous | Blame | View Log
/* libgcc routines for NEC V850.Copyright (C) 1996, 1997, 2002, 2005, 2009 Free Software Foundation, Inc.This file is part of GCC.GCC 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/>. */#ifdef L_mulsi3.text.globl ___mulsi3.type ___mulsi3,@function___mulsi3:#ifdef __v850__/*#define SHIFT 12#define MASK ((1 << SHIFT) - 1)#define STEP(i, j) \({ \short a_part = (a >> (i)) & MASK; \short b_part = (b >> (j)) & MASK; \int res = (((int) a_part) * ((int) b_part)); \res; \})int__mulsi3 (unsigned a, unsigned b){return STEP (0, 0) +((STEP (SHIFT, 0) + STEP (0, SHIFT)) << SHIFT) +((STEP (0, 2 * SHIFT) + STEP (SHIFT, SHIFT) + STEP (2 * SHIFT, 0))<< (2 * SHIFT));}*/mov r6, r14movea lo(32767), r0, r10and r10, r14mov r7, r15and r10, r15shr 15, r6mov r6, r13and r10, r13shr 15, r7mov r7, r12and r10, r12shr 15, r6shr 15, r7mov r14, r10mulh r15, r10mov r14, r11mulh r12, r11mov r13, r16mulh r15, r16mulh r14, r7mulh r15, r6add r16, r11mulh r13, r12shl 15, r11add r11, r10add r12, r7add r6, r7shl 30, r7add r7, r10jmp [r31]#endif /* __v850__ */#if defined(__v850e__) || defined(__v850ea__)/* This routine is almost unneccesarry because gccgenerates the MUL instruction for the RTX mulsi3.But if someone wants to link his application withprevisously compiled v850 objects then they willneed this function. *//* It isn't good to put the inst sequence as below;mul r7, r6,mov r6, r10, r0In this case, there is a RAW hazard between them.MUL inst takes 2 cycle in EX stage, then MOV instmust wait 1cycle. */mov r7, r10mul r6, r10, r0jmp [r31]#endif /* __v850e__ */.size ___mulsi3,.-___mulsi3#endif /* L_mulsi3 */#ifdef L_udivsi3.text.global ___udivsi3.type ___udivsi3,@function___udivsi3:#ifdef __v850__mov 1,r12mov 0,r10cmp r6,r7bnl .L12movhi hi(-2147483648),r0,r13cmp r0,r7blt .L12.L4:shl 1,r7shl 1,r12cmp r6,r7bnl .L12cmp r0,r12be .L8mov r7,r19and r13,r19be .L4br .L12.L9:cmp r7,r6bl .L10sub r7,r6or r12,r10.L10:shr 1,r12shr 1,r7.L12:cmp r0,r12bne .L9.L8:jmp [r31]#else /* defined(__v850e__) *//* See comments at end of __mulsi3. */mov r6, r10divu r7, r10, r0jmp [r31]#endif /* __v850e__ */.size ___udivsi3,.-___udivsi3#endif#ifdef L_divsi3.text.globl ___divsi3.type ___divsi3,@function___divsi3:#ifdef __v850__add -8,spst.w r31,4[sp]st.w r22,0[sp]mov 1,r22tst r7,r7bp .L3subr r0,r7subr r0,r22.L3:tst r6,r6bp .L4subr r0,r6subr r0,r22.L4:jarl ___udivsi3,r31cmp r0,r22bp .L7subr r0,r10.L7:ld.w 0[sp],r22ld.w 4[sp],r31add 8,spjmp [r31]#else /* defined(__v850e__) *//* See comments at end of __mulsi3. */mov r6, r10div r7, r10, r0jmp [r31]#endif /* __v850e__ */.size ___divsi3,.-___divsi3#endif#ifdef L_umodsi3.text.globl ___umodsi3.type ___umodsi3,@function___umodsi3:#ifdef __v850__add -12,spst.w r31,8[sp]st.w r7,4[sp]st.w r6,0[sp]jarl ___udivsi3,r31ld.w 4[sp],r7mov r10,r6jarl ___mulsi3,r31ld.w 0[sp],r6subr r6,r10ld.w 8[sp],r31add 12,spjmp [r31]#else /* defined(__v850e__) *//* See comments at end of __mulsi3. */divu r7, r6, r10jmp [r31]#endif /* __v850e__ */.size ___umodsi3,.-___umodsi3#endif /* L_umodsi3 */#ifdef L_modsi3.text.globl ___modsi3.type ___modsi3,@function___modsi3:#ifdef __v850__add -12,spst.w r31,8[sp]st.w r7,4[sp]st.w r6,0[sp]jarl ___divsi3,r31ld.w 4[sp],r7mov r10,r6jarl ___mulsi3,r31ld.w 0[sp],r6subr r6,r10ld.w 8[sp],r31add 12,spjmp [r31]#else /* defined(__v850e__) *//* See comments at end of __mulsi3. */div r7, r6, r10jmp [r31]#endif /* __v850e__ */.size ___modsi3,.-___modsi3#endif /* L_modsi3 */#ifdef L_save_2.text.align 2.globl __save_r2_r29.type __save_r2_r29,@function/* Allocate space and save registers 2, 20 .. 29 on the stack *//* Called via: jalr __save_r2_r29,r10 */__save_r2_r29:#ifdef __EP__mov ep,r1addi -44,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]sst.w r24,20[ep]sst.w r23,24[ep]sst.w r22,28[ep]sst.w r21,32[ep]sst.w r20,36[ep]sst.w r2,40[ep]mov r1,ep#elseaddi -44,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]st.w r24,20[sp]st.w r23,24[sp]st.w r22,28[sp]st.w r21,32[sp]st.w r20,36[sp]st.w r2,40[sp]#endifjmp [r10].size __save_r2_r29,.-__save_r2_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r2_r29 */.align 2.globl __return_r2_r29.type __return_r2_r29,@function__return_r2_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25sld.w 20[ep],r24sld.w 24[ep],r23sld.w 28[ep],r22sld.w 32[ep],r21sld.w 36[ep],r20sld.w 40[ep],r2addi 44,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26ld.w 16[sp],r25ld.w 20[sp],r24ld.w 24[sp],r23ld.w 28[sp],r22ld.w 32[sp],r21ld.w 36[sp],r20ld.w 40[sp],r2addi 44,sp,sp#endifjmp [r31].size __return_r2_r29,.-__return_r2_r29#endif /* L_save_2 */#ifdef L_save_20.text.align 2.globl __save_r20_r29.type __save_r20_r29,@function/* Allocate space and save registers 20 .. 29 on the stack *//* Called via: jalr __save_r20_r29,r10 */__save_r20_r29:#ifdef __EP__mov ep,r1addi -40,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]sst.w r24,20[ep]sst.w r23,24[ep]sst.w r22,28[ep]sst.w r21,32[ep]sst.w r20,36[ep]mov r1,ep#elseaddi -40,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]st.w r24,20[sp]st.w r23,24[sp]st.w r22,28[sp]st.w r21,32[sp]st.w r20,36[sp]#endifjmp [r10].size __save_r20_r29,.-__save_r20_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r20_r29 */.align 2.globl __return_r20_r29.type __return_r20_r29,@function__return_r20_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25sld.w 20[ep],r24sld.w 24[ep],r23sld.w 28[ep],r22sld.w 32[ep],r21sld.w 36[ep],r20addi 40,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26ld.w 16[sp],r25ld.w 20[sp],r24ld.w 24[sp],r23ld.w 28[sp],r22ld.w 32[sp],r21ld.w 36[sp],r20addi 40,sp,sp#endifjmp [r31].size __return_r20_r29,.-__return_r20_r29#endif /* L_save_20 */#ifdef L_save_21.text.align 2.globl __save_r21_r29.type __save_r21_r29,@function/* Allocate space and save registers 21 .. 29 on the stack *//* Called via: jalr __save_r21_r29,r10 */__save_r21_r29:#ifdef __EP__mov ep,r1addi -36,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]sst.w r24,20[ep]sst.w r23,24[ep]sst.w r22,28[ep]sst.w r21,32[ep]mov r1,ep#elseaddi -36,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]st.w r24,20[sp]st.w r23,24[sp]st.w r22,28[sp]st.w r21,32[sp]#endifjmp [r10].size __save_r21_r29,.-__save_r21_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r21_r29 */.align 2.globl __return_r21_r29.type __return_r21_r29,@function__return_r21_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25sld.w 20[ep],r24sld.w 24[ep],r23sld.w 28[ep],r22sld.w 32[ep],r21addi 36,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26ld.w 16[sp],r25ld.w 20[sp],r24ld.w 24[sp],r23ld.w 28[sp],r22ld.w 32[sp],r21addi 36,sp,sp#endifjmp [r31].size __return_r21_r29,.-__return_r21_r29#endif /* L_save_21 */#ifdef L_save_22.text.align 2.globl __save_r22_r29.type __save_r22_r29,@function/* Allocate space and save registers 22 .. 29 on the stack *//* Called via: jalr __save_r22_r29,r10 */__save_r22_r29:#ifdef __EP__mov ep,r1addi -32,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]sst.w r24,20[ep]sst.w r23,24[ep]sst.w r22,28[ep]mov r1,ep#elseaddi -32,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]st.w r24,20[sp]st.w r23,24[sp]st.w r22,28[sp]#endifjmp [r10].size __save_r22_r29,.-__save_r22_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r22_r29 */.align 2.globl __return_r22_r29.type __return_r22_r29,@function__return_r22_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25sld.w 20[ep],r24sld.w 24[ep],r23sld.w 28[ep],r22addi 32,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26ld.w 16[sp],r25ld.w 20[sp],r24ld.w 24[sp],r23ld.w 28[sp],r22addi 32,sp,sp#endifjmp [r31].size __return_r22_r29,.-__return_r22_r29#endif /* L_save_22 */#ifdef L_save_23.text.align 2.globl __save_r23_r29.type __save_r23_r29,@function/* Allocate space and save registers 23 .. 29 on the stack *//* Called via: jalr __save_r23_r29,r10 */__save_r23_r29:#ifdef __EP__mov ep,r1addi -28,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]sst.w r24,20[ep]sst.w r23,24[ep]mov r1,ep#elseaddi -28,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]st.w r24,20[sp]st.w r23,24[sp]#endifjmp [r10].size __save_r23_r29,.-__save_r23_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r23_r29 */.align 2.globl __return_r23_r29.type __return_r23_r29,@function__return_r23_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25sld.w 20[ep],r24sld.w 24[ep],r23addi 28,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26ld.w 16[sp],r25ld.w 20[sp],r24ld.w 24[sp],r23addi 28,sp,sp#endifjmp [r31].size __return_r23_r29,.-__return_r23_r29#endif /* L_save_23 */#ifdef L_save_24.text.align 2.globl __save_r24_r29.type __save_r24_r29,@function/* Allocate space and save registers 24 .. 29 on the stack *//* Called via: jalr __save_r24_r29,r10 */__save_r24_r29:#ifdef __EP__mov ep,r1addi -24,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]sst.w r24,20[ep]mov r1,ep#elseaddi -24,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]st.w r24,20[sp]#endifjmp [r10].size __save_r24_r29,.-__save_r24_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r24_r29 */.align 2.globl __return_r24_r29.type __return_r24_r29,@function__return_r24_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25sld.w 20[ep],r24addi 24,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26ld.w 16[sp],r25ld.w 20[sp],r24addi 24,sp,sp#endifjmp [r31].size __return_r24_r29,.-__return_r24_r29#endif /* L_save_24 */#ifdef L_save_25.text.align 2.globl __save_r25_r29.type __save_r25_r29,@function/* Allocate space and save registers 25 .. 29 on the stack *//* Called via: jalr __save_r25_r29,r10 */__save_r25_r29:#ifdef __EP__mov ep,r1addi -20,sp,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]sst.w r25,16[ep]mov r1,ep#elseaddi -20,sp,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]st.w r25,16[sp]#endifjmp [r10].size __save_r25_r29,.-__save_r25_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r25_r29 */.align 2.globl __return_r25_r29.type __return_r25_r29,@function__return_r25_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26sld.w 16[ep],r25addi 20,sp,spmov r1,ep#elseld.w 0[ep],r29ld.w 4[ep],r28ld.w 8[ep],r27ld.w 12[ep],r26ld.w 16[ep],r25addi 20,sp,sp#endifjmp [r31].size __return_r25_r29,.-__return_r25_r29#endif /* L_save_25 */#ifdef L_save_26.text.align 2.globl __save_r26_r29.type __save_r26_r29,@function/* Allocate space and save registers 26 .. 29 on the stack *//* Called via: jalr __save_r26_r29,r10 */__save_r26_r29:#ifdef __EP__mov ep,r1add -16,spmov sp,epsst.w r29,0[ep]sst.w r28,4[ep]sst.w r27,8[ep]sst.w r26,12[ep]mov r1,ep#elseadd -16,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]st.w r26,12[sp]#endifjmp [r10].size __save_r26_r29,.-__save_r26_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r26_r29 */.align 2.globl __return_r26_r29.type __return_r26_r29,@function__return_r26_r29:#ifdef __EP__mov ep,r1mov sp,epsld.w 0[ep],r29sld.w 4[ep],r28sld.w 8[ep],r27sld.w 12[ep],r26addi 16,sp,spmov r1,ep#elseld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27ld.w 12[sp],r26addi 16,sp,sp#endifjmp [r31].size __return_r26_r29,.-__return_r26_r29#endif /* L_save_26 */#ifdef L_save_27.text.align 2.globl __save_r27_r29.type __save_r27_r29,@function/* Allocate space and save registers 27 .. 29 on the stack *//* Called via: jalr __save_r27_r29,r10 */__save_r27_r29:add -12,spst.w r29,0[sp]st.w r28,4[sp]st.w r27,8[sp]jmp [r10].size __save_r27_r29,.-__save_r27_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r27_r29 */.align 2.globl __return_r27_r29.type __return_r27_r29,@function__return_r27_r29:ld.w 0[sp],r29ld.w 4[sp],r28ld.w 8[sp],r27add 12,spjmp [r31].size __return_r27_r29,.-__return_r27_r29#endif /* L_save_27 */#ifdef L_save_28.text.align 2.globl __save_r28_r29.type __save_r28_r29,@function/* Allocate space and save registers 28,29 on the stack *//* Called via: jalr __save_r28_r29,r10 */__save_r28_r29:add -8,spst.w r29,0[sp]st.w r28,4[sp]jmp [r10].size __save_r28_r29,.-__save_r28_r29/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r28_r29 */.align 2.globl __return_r28_r29.type __return_r28_r29,@function__return_r28_r29:ld.w 0[sp],r29ld.w 4[sp],r28add 8,spjmp [r31].size __return_r28_r29,.-__return_r28_r29#endif /* L_save_28 */#ifdef L_save_29.text.align 2.globl __save_r29.type __save_r29,@function/* Allocate space and save register 29 on the stack *//* Called via: jalr __save_r29,r10 */__save_r29:add -4,spst.w r29,0[sp]jmp [r10].size __save_r29,.-__save_r29/* Restore saved register 29, deallocate stack and return to the user *//* Called via: jr __return_r29 */.align 2.globl __return_r29.type __return_r29,@function__return_r29:ld.w 0[sp],r29add 4,spjmp [r31].size __return_r29,.-__return_r29#endif /* L_save_28 */#ifdef L_save_2c.text.align 2.globl __save_r2_r31.type __save_r2_r31,@function/* Allocate space and save registers 20 .. 29, 31 on the stack. *//* Also allocate space for the argument save area. *//* Called via: jalr __save_r2_r31,r10. */__save_r2_r31:#ifdef __EP__mov ep,r1addi -64,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r24,36[ep]sst.w r23,40[ep]sst.w r22,44[ep]sst.w r21,48[ep]sst.w r20,52[ep]sst.w r2,56[ep]sst.w r31,60[ep]mov r1,ep#elseaddi -64,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r24,36[sp]st.w r23,40[sp]st.w r22,44[sp]st.w r21,48[sp]st.w r20,52[sp]st.w r2,56[sp]st.w r31,60[sp]#endifjmp [r10].size __save_r2_r31,.-__save_r2_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r20_r31 */.align 2.globl __return_r2_r31.type __return_r2_r31,@function__return_r2_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r24sld.w 40[ep],r23sld.w 44[ep],r22sld.w 48[ep],r21sld.w 52[ep],r20sld.w 56[ep],r2sld.w 60[ep],r31addi 64,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r24ld.w 40[sp],r23ld.w 44[sp],r22ld.w 48[sp],r21ld.w 52[sp],r20ld.w 56[sp],r2ld.w 60[sp],r31addi 64,sp,sp#endifjmp [r31].size __return_r2_r31,.-__return_r2_r31#endif /* L_save_2c */#ifdef L_save_20c.text.align 2.globl __save_r20_r31.type __save_r20_r31,@function/* Allocate space and save registers 20 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r20_r31,r10 */__save_r20_r31:#ifdef __EP__mov ep,r1addi -60,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r24,36[ep]sst.w r23,40[ep]sst.w r22,44[ep]sst.w r21,48[ep]sst.w r20,52[ep]sst.w r31,56[ep]mov r1,ep#elseaddi -60,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r24,36[sp]st.w r23,40[sp]st.w r22,44[sp]st.w r21,48[sp]st.w r20,52[sp]st.w r31,56[sp]#endifjmp [r10].size __save_r20_r31,.-__save_r20_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r20_r31 */.align 2.globl __return_r20_r31.type __return_r20_r31,@function__return_r20_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r24sld.w 40[ep],r23sld.w 44[ep],r22sld.w 48[ep],r21sld.w 52[ep],r20sld.w 56[ep],r31addi 60,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r24ld.w 40[sp],r23ld.w 44[sp],r22ld.w 48[sp],r21ld.w 52[sp],r20ld.w 56[sp],r31addi 60,sp,sp#endifjmp [r31].size __return_r20_r31,.-__return_r20_r31#endif /* L_save_20c */#ifdef L_save_21c.text.align 2.globl __save_r21_r31.type __save_r21_r31,@function/* Allocate space and save registers 21 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r21_r31,r10 */__save_r21_r31:#ifdef __EP__mov ep,r1addi -56,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r24,36[ep]sst.w r23,40[ep]sst.w r22,44[ep]sst.w r21,48[ep]sst.w r31,52[ep]mov r1,ep#elseaddi -56,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r24,36[sp]st.w r23,40[sp]st.w r22,44[sp]st.w r21,48[sp]st.w r31,52[sp]#endifjmp [r10].size __save_r21_r31,.-__save_r21_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r21_r31 */.align 2.globl __return_r21_r31.type __return_r21_r31,@function__return_r21_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r24sld.w 40[ep],r23sld.w 44[ep],r22sld.w 48[ep],r21sld.w 52[ep],r31addi 56,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r24ld.w 40[sp],r23ld.w 44[sp],r22ld.w 48[sp],r21ld.w 52[sp],r31addi 56,sp,sp#endifjmp [r31].size __return_r21_r31,.-__return_r21_r31#endif /* L_save_21c */#ifdef L_save_22c.text.align 2.globl __save_r22_r31.type __save_r22_r31,@function/* Allocate space and save registers 22 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r22_r31,r10 */__save_r22_r31:#ifdef __EP__mov ep,r1addi -52,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r24,36[ep]sst.w r23,40[ep]sst.w r22,44[ep]sst.w r31,48[ep]mov r1,ep#elseaddi -52,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r24,36[sp]st.w r23,40[sp]st.w r22,44[sp]st.w r31,48[sp]#endifjmp [r10].size __save_r22_r31,.-__save_r22_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r22_r31 */.align 2.globl __return_r22_r31.type __return_r22_r31,@function__return_r22_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r24sld.w 40[ep],r23sld.w 44[ep],r22sld.w 48[ep],r31addi 52,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r24ld.w 40[sp],r23ld.w 44[sp],r22ld.w 48[sp],r31addi 52,sp,sp#endifjmp [r31].size __return_r22_r31,.-__return_r22_r31#endif /* L_save_22c */#ifdef L_save_23c.text.align 2.globl __save_r23_r31.type __save_r23_r31,@function/* Allocate space and save registers 23 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r23_r31,r10 */__save_r23_r31:#ifdef __EP__mov ep,r1addi -48,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r24,36[ep]sst.w r23,40[ep]sst.w r31,44[ep]mov r1,ep#elseaddi -48,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r24,36[sp]st.w r23,40[sp]st.w r31,44[sp]#endifjmp [r10].size __save_r23_r31,.-__save_r23_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r23_r31 */.align 2.globl __return_r23_r31.type __return_r23_r31,@function__return_r23_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r24sld.w 40[ep],r23sld.w 44[ep],r31addi 48,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r24ld.w 40[sp],r23ld.w 44[sp],r31addi 48,sp,sp#endifjmp [r31].size __return_r23_r31,.-__return_r23_r31#endif /* L_save_23c */#ifdef L_save_24c.text.align 2.globl __save_r24_r31.type __save_r24_r31,@function/* Allocate space and save registers 24 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r24_r31,r10 */__save_r24_r31:#ifdef __EP__mov ep,r1addi -44,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r24,36[ep]sst.w r31,40[ep]mov r1,ep#elseaddi -44,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r24,36[sp]st.w r31,40[sp]#endifjmp [r10].size __save_r24_r31,.-__save_r24_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r24_r31 */.align 2.globl __return_r24_r31.type __return_r24_r31,@function__return_r24_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r24sld.w 40[ep],r31addi 44,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r24ld.w 40[sp],r31addi 44,sp,sp#endifjmp [r31].size __return_r24_r31,.-__return_r24_r31#endif /* L_save_24c */#ifdef L_save_25c.text.align 2.globl __save_r25_r31.type __save_r25_r31,@function/* Allocate space and save registers 25 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r25_r31,r10 */__save_r25_r31:#ifdef __EP__mov ep,r1addi -40,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r25,32[ep]sst.w r31,36[ep]mov r1,ep#elseaddi -40,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r25,32[sp]st.w r31,36[sp]#endifjmp [r10].size __save_r25_r31,.-__save_r25_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r25_r31 */.align 2.globl __return_r25_r31.type __return_r25_r31,@function__return_r25_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r25sld.w 36[ep],r31addi 40,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r25ld.w 36[sp],r31addi 40,sp,sp#endifjmp [r31].size __return_r25_r31,.-__return_r25_r31#endif /* L_save_25c */#ifdef L_save_26c.text.align 2.globl __save_r26_r31.type __save_r26_r31,@function/* Allocate space and save registers 26 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r26_r31,r10 */__save_r26_r31:#ifdef __EP__mov ep,r1addi -36,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r26,28[ep]sst.w r31,32[ep]mov r1,ep#elseaddi -36,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r26,28[sp]st.w r31,32[sp]#endifjmp [r10].size __save_r26_r31,.-__save_r26_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r26_r31 */.align 2.globl __return_r26_r31.type __return_r26_r31,@function__return_r26_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r26sld.w 32[ep],r31addi 36,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r26ld.w 32[sp],r31addi 36,sp,sp#endifjmp [r31].size __return_r26_r31,.-__return_r26_r31#endif /* L_save_26c */#ifdef L_save_27c.text.align 2.globl __save_r27_r31.type __save_r27_r31,@function/* Allocate space and save registers 27 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r27_r31,r10 */__save_r27_r31:#ifdef __EP__mov ep,r1addi -32,sp,spmov sp,epsst.w r29,16[ep]sst.w r28,20[ep]sst.w r27,24[ep]sst.w r31,28[ep]mov r1,ep#elseaddi -32,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r27,24[sp]st.w r31,28[sp]#endifjmp [r10].size __save_r27_r31,.-__save_r27_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r27_r31 */.align 2.globl __return_r27_r31.type __return_r27_r31,@function__return_r27_r31:#ifdef __EP__mov ep,r1mov sp,epsld.w 16[ep],r29sld.w 20[ep],r28sld.w 24[ep],r27sld.w 28[ep],r31addi 32,sp,spmov r1,ep#elseld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r27ld.w 28[sp],r31addi 32,sp,sp#endifjmp [r31].size __return_r27_r31,.-__return_r27_r31#endif /* L_save_27c */#ifdef L_save_28c.text.align 2.globl __save_r28_r31.type __save_r28_r31,@function/* Allocate space and save registers 28 .. 29, 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r28_r31,r10 */__save_r28_r31:addi -28,sp,spst.w r29,16[sp]st.w r28,20[sp]st.w r31,24[sp]jmp [r10].size __save_r28_r31,.-__save_r28_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r28_r31 */.align 2.globl __return_r28_r31.type __return_r28_r31,@function__return_r28_r31:ld.w 16[sp],r29ld.w 20[sp],r28ld.w 24[sp],r31addi 28,sp,spjmp [r31].size __return_r28_r31,.-__return_r28_r31#endif /* L_save_28c */#ifdef L_save_29c.text.align 2.globl __save_r29_r31.type __save_r29_r31,@function/* Allocate space and save registers 29 & 31 on the stack *//* Also allocate space for the argument save area *//* Called via: jalr __save_r29_r31,r10 */__save_r29_r31:addi -24,sp,spst.w r29,16[sp]st.w r31,20[sp]jmp [r10].size __save_r29_r31,.-__save_r29_r31/* Restore saved registers, deallocate stack and return to the user *//* Called via: jr __return_r29_r31 */.align 2.globl __return_r29_r31.type __return_r29_r31,@function__return_r29_r31:ld.w 16[sp],r29ld.w 20[sp],r31addi 24,sp,spjmp [r31].size __return_r29_r31,.-__return_r29_r31#endif /* L_save_29c */#ifdef L_save_31c.text.align 2.globl __save_r31.type __save_r31,@function/* Allocate space and save register 31 on the stack. *//* Also allocate space for the argument save area. *//* Called via: jalr __save_r31,r10 */__save_r31:addi -20,sp,spst.w r31,16[sp]jmp [r10].size __save_r31,.-__save_r31/* Restore saved registers, deallocate stack and return to the user. *//* Called via: jr __return_r31 */.align 2.globl __return_r31.type __return_r31,@function__return_r31:ld.w 16[sp],r31addi 20,sp,spjmp [r31].size __return_r31,.-__return_r31#endif /* L_save_31c */#ifdef L_save_varargs.text.align 2.globl __save_r6_r9.type __save_r6_r9,@function/* Save registers 6 .. 9 on the stack for variable argument functions. *//* Called via: jalr __save_r6_r9,r10 */__save_r6_r9:#ifdef __EP__mov ep,r1mov sp,epsst.w r6,0[ep]sst.w r7,4[ep]sst.w r8,8[ep]sst.w r9,12[ep]mov r1,ep#elsest.w r6,0[sp]st.w r7,4[sp]st.w r8,8[sp]st.w r9,12[sp]#endifjmp [r10].size __save_r6_r9,.-__save_r6_r9#endif /* L_save_varargs */#ifdef L_save_interrupt.text.align 2.globl __save_interrupt.type __save_interrupt,@function/* Save registers r1, r4 on stack and load up with expected values. *//* Note, 12 bytes of stack have already been allocated. *//* Called via: jalr __save_interrupt,r10 */__save_interrupt:st.w ep,0[sp]st.w gp,4[sp]st.w r1,8[sp]movhi hi(__ep),r0,epmovea lo(__ep),ep,epmovhi hi(__gp),r0,gpmovea lo(__gp),gp,gpjmp [r10].size __save_interrupt,.-__save_interrupt/* Restore saved registers, deallocate stack and return from the interrupt. *//* Called via: jr __return_interrupt */.align 2.globl __return_interrupt.type __return_interrupt,@function__return_interrupt:ld.w 0[sp],epld.w 4[sp],gpld.w 8[sp],r1ld.w 12[sp],r10addi 16,sp,spreti.size __return_interrupt,.-__return_interrupt#endif /* L_save_interrupt */#ifdef L_save_all_interrupt.text.align 2.globl __save_all_interrupt.type __save_all_interrupt,@function/* Save all registers except for those saved in __save_interrupt. *//* Allocate enough stack for all of the registers & 16 bytes of space. *//* Called via: jalr __save_all_interrupt,r10 */__save_all_interrupt:addi -120,sp,sp#ifdef __EP__mov ep,r1mov sp,epsst.w r31,116[ep]sst.w r2,112[ep]sst.w gp,108[ep]sst.w r6,104[ep]sst.w r7,100[ep]sst.w r8,96[ep]sst.w r9,92[ep]sst.w r11,88[ep]sst.w r12,84[ep]sst.w r13,80[ep]sst.w r14,76[ep]sst.w r15,72[ep]sst.w r16,68[ep]sst.w r17,64[ep]sst.w r18,60[ep]sst.w r19,56[ep]sst.w r20,52[ep]sst.w r21,48[ep]sst.w r22,44[ep]sst.w r23,40[ep]sst.w r24,36[ep]sst.w r25,32[ep]sst.w r26,28[ep]sst.w r27,24[ep]sst.w r28,20[ep]sst.w r29,16[ep]mov r1,ep#elsest.w r31,116[sp]st.w r2,112[sp]st.w gp,108[sp]st.w r6,104[sp]st.w r7,100[sp]st.w r8,96[sp]st.w r9,92[sp]st.w r11,88[sp]st.w r12,84[sp]st.w r13,80[sp]st.w r14,76[sp]st.w r15,72[sp]st.w r16,68[sp]st.w r17,64[sp]st.w r18,60[sp]st.w r19,56[sp]st.w r20,52[sp]st.w r21,48[sp]st.w r22,44[sp]st.w r23,40[sp]st.w r24,36[sp]st.w r25,32[sp]st.w r26,28[sp]st.w r27,24[sp]st.w r28,20[sp]st.w r29,16[sp]#endifjmp [r10].size __save_all_interrupt,.-__save_all_interrupt.globl __restore_all_interrupt.type __restore_all_interrupt,@function/* Restore all registers saved in __save_all_interrupt anddeallocate the stack space. *//* Called via: jalr __restore_all_interrupt,r10 */__restore_all_interrupt:#ifdef __EP__mov ep,r1mov sp,epsld.w 116[ep],r31sld.w 112[ep],r2sld.w 108[ep],gpsld.w 104[ep],r6sld.w 100[ep],r7sld.w 96[ep],r8sld.w 92[ep],r9sld.w 88[ep],r11sld.w 84[ep],r12sld.w 80[ep],r13sld.w 76[ep],r14sld.w 72[ep],r15sld.w 68[ep],r16sld.w 64[ep],r17sld.w 60[ep],r18sld.w 56[ep],r19sld.w 52[ep],r20sld.w 48[ep],r21sld.w 44[ep],r22sld.w 40[ep],r23sld.w 36[ep],r24sld.w 32[ep],r25sld.w 28[ep],r26sld.w 24[ep],r27sld.w 20[ep],r28sld.w 16[ep],r29mov r1,ep#elseld.w 116[sp],r31ld.w 112[sp],r2ld.w 108[sp],gpld.w 104[sp],r6ld.w 100[sp],r7ld.w 96[sp],r8ld.w 92[sp],r9ld.w 88[sp],r11ld.w 84[sp],r12ld.w 80[sp],r13ld.w 76[sp],r14ld.w 72[sp],r15ld.w 68[sp],r16ld.w 64[sp],r17ld.w 60[sp],r18ld.w 56[sp],r19ld.w 52[sp],r20ld.w 48[sp],r21ld.w 44[sp],r22ld.w 40[sp],r23ld.w 36[sp],r24ld.w 32[sp],r25ld.w 28[sp],r26ld.w 24[sp],r27ld.w 20[sp],r28ld.w 16[sp],r29#endifaddi 120,sp,spjmp [r10].size __restore_all_interrupt,.-__restore_all_interrupt#endif /* L_save_all_interrupt */#if defined __v850e__#ifdef L_callt_save_r2_r29/* Put these functions into the call table area. */.call_table_text/* Allocate space and save registers 2, 20 .. 29 on the stack. *//* Called via: callt ctoff(__callt_save_r2_r29). */.align 2.L_save_r2_r29:add -4, spst.w r2, 0[sp]prepare {r20 - r29}, 0ctret/* Restore saved registers, deallocate stack and return to the user. *//* Called via: callt ctoff(__callt_return_r2_r29). */.align 2.L_return_r2_r29:dispose 0, {r20-r29}ld.w 0[sp], r2add 4, spjmp [r31]/* Place the offsets of the start of these routines into the call table. */.call_table_data.global __callt_save_r2_r29.type __callt_save_r2_r29,@function__callt_save_r2_r29: .short ctoff(.L_save_r2_r29).global __callt_return_r2_r29.type __callt_return_r2_r29,@function__callt_return_r2_r29: .short ctoff(.L_return_r2_r29)#endif /* L_callt_save_r2_r29 */#ifdef L_callt_save_r2_r31/* Put these functions into the call table area. */.call_table_text/* Allocate space and save registers 2 and 20 .. 29, 31 on the stack. *//* Also allocate space for the argument save area. *//* Called via: callt ctoff(__callt_save_r2_r31). */.align 2.L_save_r2_r31:add -4, spst.w r2, 0[sp]prepare {r20 - r29, r31}, 4ctret/* Restore saved registers, deallocate stack and return to the user. *//* Called via: callt ctoff(__callt_return_r2_r31). */.align 2.L_return_r2_r31:dispose 4, {r20 - r29, r31}ld.w 0[sp], r2addi 4, sp, spjmp [r31]/* Place the offsets of the start of these routines into the call table. */.call_table_data.global __callt_save_r2_r31.type __callt_save_r2_r31,@function__callt_save_r2_r31: .short ctoff(.L_save_r2_r31).global __callt_return_r2_r31.type __callt_return_r2_r31,@function__callt_return_r2_r31: .short ctoff(.L_return_r2_r31)#endif /* L_callt_save_r2_r31 */#ifdef L_callt_save_r6_r9/* Put these functions into the call table area. */.call_table_text/* Save registers r6 - r9 onto the stack in the space reserved for them.Use by variable argument functions.Called via: callt ctoff(__callt_save_r6_r9). */.align 2.L_save_r6_r9:#ifdef __EP__mov ep,r1mov sp,epsst.w r6,0[ep]sst.w r7,4[ep]sst.w r8,8[ep]sst.w r9,12[ep]mov r1,ep#elsest.w r6,0[sp]st.w r7,4[sp]st.w r8,8[sp]st.w r9,12[sp]#endifctret/* Place the offsets of the start of this routines into the call table. */.call_table_data.global __callt_save_r6_r9.type __callt_save_r6_r9,@function__callt_save_r6_r9: .short ctoff(.L_save_r6_r9)#endif /* L_callt_save_r6_r9 */#ifdef L_callt_save_interrupt/* Put these functions into the call table area. */.call_table_text/* Save registers r1, ep, gp, r10 on stack and load up with expected values. *//* Called via: callt ctoff(__callt_save_interrupt). */.align 2.L_save_interrupt:/* SP has already been moved before callt ctoff(_save_interrupt). *//* addi -24, sp, sp */st.w ep, 0[sp]st.w gp, 4[sp]st.w r1, 8[sp]/* R10 has already been saved before callt ctoff(_save_interrupt). *//* st.w r10, 12[sp] */mov hilo(__ep),epmov hilo(__gp),gpctret/* Restore saved registers, deallocate stack and return from the interrupt. *//* Called via: callt ctoff(__callt_restore_interrupt). */.align 2.globl __return_interrupt.type __return_interrupt,@function.L_return_interrupt:ld.w 20[sp], r1ldsr r1, ctpswld.w 16[sp], r1ldsr r1, ctpcld.w 12[sp], r10ld.w 8[sp], r1ld.w 4[sp], gpld.w 0[sp], epaddi 24, sp, spreti/* Place the offsets of the start of these routines into the call table. */.call_table_data.global __callt_save_interrupt.type __callt_save_interrupt,@function__callt_save_interrupt: .short ctoff(.L_save_interrupt).global __callt_return_interrupt.type __callt_return_interrupt,@function__callt_return_interrupt: .short ctoff(.L_return_interrupt)#endif /* L_callt_save_interrupt */#ifdef L_callt_save_all_interrupt/* Put these functions into the call table area. */.call_table_text/* Save all registers except for those saved in __save_interrupt. *//* Allocate enough stack for all of the registers & 16 bytes of space. *//* Called via: callt ctoff(__callt_save_all_interrupt). */.align 2.L_save_all_interrupt:addi -60, sp, sp#ifdef __EP__mov ep, r1mov sp, epsst.w r2, 56[ep]sst.w r5, 52[ep]sst.w r6, 48[ep]sst.w r7, 44[ep]sst.w r8, 40[ep]sst.w r9, 36[ep]sst.w r11, 32[ep]sst.w r12, 28[ep]sst.w r13, 24[ep]sst.w r14, 20[ep]sst.w r15, 16[ep]sst.w r16, 12[ep]sst.w r17, 8[ep]sst.w r18, 4[ep]sst.w r19, 0[ep]mov r1, ep#elsest.w r2, 56[sp]st.w r5, 52[sp]st.w r6, 48[sp]st.w r7, 44[sp]st.w r8, 40[sp]st.w r9, 36[sp]st.w r11, 32[sp]st.w r12, 28[sp]st.w r13, 24[sp]st.w r14, 20[sp]st.w r15, 16[sp]st.w r16, 12[sp]st.w r17, 8[sp]st.w r18, 4[sp]st.w r19, 0[sp]#endifprepare {r20 - r29, r31}, 4ctret/* Restore all registers saved in __save_all_interruptdeallocate the stack space. *//* Called via: callt ctoff(__callt_restore_all_interrupt). */.align 2.L_restore_all_interrupt:dispose 4, {r20 - r29, r31}#ifdef __EP__mov ep, r1mov sp, epsld.w 0 [ep], r19sld.w 4 [ep], r18sld.w 8 [ep], r17sld.w 12[ep], r16sld.w 16[ep], r15sld.w 20[ep], r14sld.w 24[ep], r13sld.w 28[ep], r12sld.w 32[ep], r11sld.w 36[ep], r9sld.w 40[ep], r8sld.w 44[ep], r7sld.w 48[ep], r6sld.w 52[ep], r5sld.w 56[ep], r2mov r1, ep#elseld.w 0 [sp], r19ld.w 4 [sp], r18ld.w 8 [sp], r17ld.w 12[sp], r16ld.w 16[sp], r15ld.w 20[sp], r14ld.w 24[sp], r13ld.w 28[sp], r12ld.w 32[sp], r11ld.w 36[sp], r9ld.w 40[sp], r8ld.w 44[sp], r7ld.w 48[sp], r6ld.w 52[sp], r5ld.w 56[sp], r2#endifaddi 60, sp, spctret/* Place the offsets of the start of these routines into the call table. */.call_table_data.global __callt_save_all_interrupt.type __callt_save_all_interrupt,@function__callt_save_all_interrupt: .short ctoff(.L_save_all_interrupt).global __callt_restore_all_interrupt.type __callt_restore_all_interrupt,@function__callt_restore_all_interrupt: .short ctoff(.L_restore_all_interrupt)#endif /* L_callt_save_all_interrupt */#define MAKE_CALLT_FUNCS( START ) \.call_table_text ;\.align 2 ;\/* Allocate space and save registers START .. r29 on the stack. */ ;\/* Called via: callt ctoff(__callt_save_START_r29). */ ;\.L_save_##START##_r29: ;\prepare { START - r29 }, 0 ;\ctret ;\;\/* Restore saved registers, deallocate stack and return. */ ;\/* Called via: callt ctoff(__return_START_r29) */ ;\.align 2 ;\.L_return_##START##_r29: ;\dispose 0, { START - r29 }, r31 ;\;\/* Place the offsets of the start of these funcs into the call table. */;\.call_table_data ;\;\.global __callt_save_##START##_r29 ;\.type __callt_save_##START##_r29,@function ;\__callt_save_##START##_r29: .short ctoff(.L_save_##START##_r29 ) ;\;\.global __callt_return_##START##_r29 ;\.type __callt_return_##START##_r29,@function ;\__callt_return_##START##_r29: .short ctoff(.L_return_##START##_r29 )#define MAKE_CALLT_CFUNCS( START ) \.call_table_text ;\.align 2 ;\/* Allocate space and save registers START .. r31 on the stack. */ ;\/* Called via: callt ctoff(__callt_save_START_r31c). */ ;\.L_save_##START##_r31c: ;\prepare { START - r29, r31}, 4 ;\ctret ;\;\/* Restore saved registers, deallocate stack and return. */ ;\/* Called via: callt ctoff(__return_START_r31c). */ ;\.align 2 ;\.L_return_##START##_r31c: ;\dispose 4, { START - r29, r31}, r31 ;\;\/* Place the offsets of the start of these funcs into the call table. */;\.call_table_data ;\;\.global __callt_save_##START##_r31c ;\.type __callt_save_##START##_r31c,@function ;\__callt_save_##START##_r31c: .short ctoff(.L_save_##START##_r31c ) ;\;\.global __callt_return_##START##_r31c ;\.type __callt_return_##START##_r31c,@function ;\__callt_return_##START##_r31c: .short ctoff(.L_return_##START##_r31c )#ifdef L_callt_save_20MAKE_CALLT_FUNCS (r20)#endif#ifdef L_callt_save_21MAKE_CALLT_FUNCS (r21)#endif#ifdef L_callt_save_22MAKE_CALLT_FUNCS (r22)#endif#ifdef L_callt_save_23MAKE_CALLT_FUNCS (r23)#endif#ifdef L_callt_save_24MAKE_CALLT_FUNCS (r24)#endif#ifdef L_callt_save_25MAKE_CALLT_FUNCS (r25)#endif#ifdef L_callt_save_26MAKE_CALLT_FUNCS (r26)#endif#ifdef L_callt_save_27MAKE_CALLT_FUNCS (r27)#endif#ifdef L_callt_save_28MAKE_CALLT_FUNCS (r28)#endif#ifdef L_callt_save_29MAKE_CALLT_FUNCS (r29)#endif#ifdef L_callt_save_20cMAKE_CALLT_CFUNCS (r20)#endif#ifdef L_callt_save_21cMAKE_CALLT_CFUNCS (r21)#endif#ifdef L_callt_save_22cMAKE_CALLT_CFUNCS (r22)#endif#ifdef L_callt_save_23cMAKE_CALLT_CFUNCS (r23)#endif#ifdef L_callt_save_24cMAKE_CALLT_CFUNCS (r24)#endif#ifdef L_callt_save_25cMAKE_CALLT_CFUNCS (r25)#endif#ifdef L_callt_save_26cMAKE_CALLT_CFUNCS (r26)#endif#ifdef L_callt_save_27cMAKE_CALLT_CFUNCS (r27)#endif#ifdef L_callt_save_28cMAKE_CALLT_CFUNCS (r28)#endif#ifdef L_callt_save_29cMAKE_CALLT_CFUNCS (r29)#endif#ifdef L_callt_save_31c.call_table_text.align 2/* Allocate space and save register r31 on the stack. *//* Called via: callt ctoff(__callt_save_r31c). */.L_callt_save_r31c:prepare {r31}, 4ctret/* Restore saved registers, deallocate stack and return. *//* Called via: callt ctoff(__return_r31c). */.align 2.L_callt_return_r31c:dispose 4, {r31}, r31/* Place the offsets of the start of these funcs into the call table. */.call_table_data.global __callt_save_r31c.type __callt_save_r31c,@function__callt_save_r31c: .short ctoff(.L_callt_save_r31c).global __callt_return_r31c.type __callt_return_r31c,@function__callt_return_r31c: .short ctoff(.L_callt_return_r31c)#endif#endif /* __v850e__ *//* libgcc2 routines for NEC V850. *//* Double Integer Arithmetical Operation. */#ifdef L_negdi2.text.global ___negdi2.type ___negdi2, @function___negdi2:not r6, r10add 1, r10setf l, r6not r7, r11add r6, r11jmp [lp].size ___negdi2,.-___negdi2#endif#ifdef L_cmpdi2.text.global ___cmpdi2.type ___cmpdi2,@function___cmpdi2:# Signed comparison bitween each high word.cmp r9, r7be .L_cmpdi_cmp_lowsetf ge, r10setf gt, r6add r6, r10jmp [lp].L_cmpdi_cmp_low:# Unsigned comparigon bitween each low word.cmp r8, r6setf nl, r10setf h, r6add r6, r10jmp [lp].size ___cmpdi2, . - ___cmpdi2#endif#ifdef L_ucmpdi2.text.global ___ucmpdi2.type ___ucmpdi2,@function___ucmpdi2:cmp r9, r7 # Check if each high word are same.bne .L_ucmpdi_check_pswcmp r8, r6 # Compare the word..L_ucmpdi_check_psw:setf nl, r10 #setf h, r6 #add r6, r10 # Add the result of comparison NL and comparison H.jmp [lp].size ___ucmpdi2, . - ___ucmpdi2#endif#ifdef L_muldi3.text.global ___muldi3.type ___muldi3,@function___muldi3:#ifdef __v850__jarl __save_r26_r31, r10addi 16, sp, spmov r6, r28shr 15, r28movea lo(32767), r0, r14and r14, r28mov r8, r10shr 15, r10and r14, r10mov r6, r19shr 30, r19mov r7, r12shl 2, r12or r12, r19and r14, r19mov r8, r13shr 30, r13mov r9, r12shl 2, r12or r12, r13and r14, r13mov r7, r11shr 13, r11and r14, r11mov r9, r31shr 13, r31and r14, r31mov r7, r29shr 28, r29and r14, r29mov r9, r12shr 28, r12and r14, r12and r14, r6and r14, r8mov r6, r14mulh r8, r14mov r6, r16mulh r10, r16mov r6, r18mulh r13, r18mov r6, r15mulh r31, r15mulh r12, r6mov r28, r17mulh r10, r17add -16, spmov r28, r12mulh r8, r12add r17, r18mov r28, r17mulh r31, r17add r12, r16mov r28, r12mulh r13, r12add r17, r6mov r19, r17add r12, r15mov r19, r12mulh r8, r12mulh r10, r17add r12, r18mov r19, r12mulh r13, r12add r17, r15mov r11, r13mulh r8, r13add r12, r6mov r11, r12mulh r10, r12add r13, r15mulh r29, r8add r12, r6mov r16, r13shl 15, r13add r14, r13mov r18, r12shl 30, r12mov r13, r26add r12, r26shr 15, r14movhi hi(131071), r0, r12movea lo(131071), r12, r13and r13, r14mov r16, r12and r13, r12add r12, r14mov r18, r12shl 15, r12and r13, r12add r12, r14shr 17, r14shr 17, r16add r14, r16shl 13, r15shr 2, r18add r18, r15add r15, r16mov r16, r27add r8, r6shl 28, r6add r6, r27mov r26, r10mov r27, r11jr __return_r26_r31#endif /* __v850__ */#if defined(__v850e__) || defined(__v850ea__)/* (Ahi << 32 + Alo) * (Bhi << 32 + Blo) *//* r7 r6 r9 r8 */mov r8, r10mulu r7, r8, r0 /* Ahi * Blo */mulu r6, r9, r0 /* Alo * Bhi */mulu r6, r10, r11 /* Alo * Blo */add r8, r11add r9, r11jmp [r31]#endif /* defined(__v850e__) || defined(__v850ea__) */.size ___muldi3, . - ___muldi3#endif
