lib1funcs.asm

来自「gcc3.2.1源代码」· 汇编 代码 · 共 1,270 行 · 第 1/2 页

ASM
1,270
字号
/* libgcc routines for NEC V850.   Copyright (C) 1996, 1997 Free Software Foundation, Inc.This file is part of GNU CC.GNU CC 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 2, or (at your option) anylater version.In addition to the permissions in the GNU General Public License, theFree Software Foundation gives you unlimited permission to link thecompiled version of this file into combinations with other programs,and to distribute those combinations without any restriction comingfrom the use of this file.  (The General Public License restrictionsdo apply in other respects; for example, they cover modification ofthe file, and distribution when not linked into a combineexecutable.)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.You should have received a copy of the GNU General Public Licensealong with this program; see the file COPYING.  If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA.  */#ifdef L_mulsi3	.text	.globl ___mulsi3	.type  ___mulsi3,@function/* * #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)); * } */___mulsi3:        mov r6,r13        movea lo(4095),r0,r16        and r16,r13        mov r7,r15        and r16,r15        mov r13,r10        mulh r15,r10        shr 12,r6        mov r6,r14        and r16,r14        mov r14,r11        mulh r15,r11        shr 12,r7        mov r7,r12        and r16,r12        shr 12,r7        and r16,r7        mulh r13,r7        shr 12,r6        mulh r12,r13        and r16,r6        add r13,r11        shl 12,r11        add r11,r10        mov r14,r11        mulh r12,r11        mulh r15,r6        add r11,r7        add r6,r7        shl 24,r7        add r7,r10        jmp [r31]	.size ___mulsi3,.-___mulsi3#endif#ifdef L_udivsi3	.text	.global ___udivsi3	.type	___udivsi3,@function___udivsi3:	mov 1,r12	mov 0,r10	cmp r6,r7	bnl .L12	movhi hi(-2147483648),r0,r13	cmp r0,r7	blt .L12.L4:	shl 1,r7	shl 1,r12	cmp r6,r7	bnl .L12	cmp r0,r12	be .L8	mov r7,r19	and r13,r19	be .L4	br .L12.L9:	cmp r7,r6	bl .L10	sub r7,r6	or r12,r10.L10:	shr 1,r12	shr 1,r7.L12:	cmp r0,r12	bne .L9.L8:	jmp [r31]	.size ___udivsi3,.-___udivsi3#endif#ifdef L_divsi3	.text	.globl ___divsi3	.type  ___divsi3,@function___divsi3:	add -8,sp	st.w r31,4[sp]	st.w r22,0[sp]	mov 1,r22	tst r7,r7	bp .L3	subr r0,r7	subr r0,r22.L3:	tst r6,r6	bp .L4	subr r0,r6	subr r0,r22.L4:	jarl ___udivsi3,r31	cmp r0,r22	bp .L7	subr r0,r10.L7:	ld.w 0[sp],r22	ld.w 4[sp],r31	add 8,sp	jmp [r31]	.size ___divsi3,.-___divsi3#endif#ifdef  L_umodsi3	.text	.globl ___umodsi3	.type  ___umodsi3,@function___umodsi3:	add -12,sp	st.w r31,8[sp]	st.w r7,4[sp]	st.w r6,0[sp]	jarl ___udivsi3,r31	ld.w 4[sp],r7	mov r10,r6	jarl ___mulsi3,r31	ld.w 0[sp],r6	subr r6,r10	ld.w 8[sp],r31	add 12,sp	jmp [r31]	.size ___umodsi3,.-___umodsi3#endif /* L_umodsi3 */#ifdef  L_modsi3	.text	.globl ___modsi3	.type  ___modsi3,@function___modsi3:	add -12,sp	st.w r31,8[sp]	st.w r7,4[sp]	st.w r6,0[sp]	jarl ___divsi3,r31	ld.w 4[sp],r7	mov r10,r6	jarl ___mulsi3,r31	ld.w 0[sp],r6	subr r6,r10	ld.w 8[sp],r31	add 12,sp	jmp [r31]	.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:	mov	ep,r1	addi	-44,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	sld.w	20[ep],r24	sld.w	24[ep],r23	sld.w	28[ep],r22	sld.w	32[ep],r21	sld.w	36[ep],r20	sld.w	40[ep],r2	addi	44,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	addi	-40,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	sld.w	20[ep],r24	sld.w	24[ep],r23	sld.w	28[ep],r22	sld.w	32[ep],r21	sld.w	36[ep],r20	addi	40,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	addi	-36,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	sld.w	20[ep],r24	sld.w	24[ep],r23	sld.w	28[ep],r22	sld.w	32[ep],r21	addi	36,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	addi	-32,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	sld.w	20[ep],r24	sld.w	24[ep],r23	sld.w	28[ep],r22	addi	32,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	addi	-28,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	sld.w	20[ep],r24	sld.w	24[ep],r23	addi	28,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	addi	-24,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	sld.w	20[ep],r24	addi	24,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	addi	-20,sp,sp	mov	sp,ep	sst.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	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	sld.w	16[ep],r25	addi	20,sp,sp	mov	r1,ep	jmp	[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:	mov	ep,r1	add	-16,sp	mov	sp,ep	sst.w	r29,0[ep]	sst.w	r28,4[ep]	sst.w	r27,8[ep]	sst.w	r26,12[ep]	mov	r1,ep	jmp	[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:	mov	ep,r1	mov	sp,ep	sld.w	0[ep],r29	sld.w	4[ep],r28	sld.w	8[ep],r27	sld.w	12[ep],r26	addi	16,sp,sp	mov	r1,ep	jmp	[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,sp	st.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],r29	ld.w	4[sp],r28	ld.w	8[sp],r27	add	12,sp	jmp	[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,sp	st.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],r29	ld.w	4[sp],r28	add	8,sp	jmp	[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,sp	st.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],r29	add	4,sp	jmp	[r31]	.size	__return_r29,.-__return_r29

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?