⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib1funcs.asm

📁 gcc3.2.1源代码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r3, 8, r4	ldx.q	r3, r63, r3LOCAL(ct_r4_ld):	/* Copy r4 from a memory address.  */	pt/l	LOCAL(ct_r4_load), tr2	movi	3, r30	shlli	r30, 23, r31	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r4, 8, r5	ldx.q	r4, r63, r4LOCAL(ct_r5_ld):	/* Copy r5 from a memory address.  */	pt/l	LOCAL(ct_r5_load), tr2	movi	3, r30	shlli	r30, 20, r31	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r5, 8, r6	ldx.q	r5, r63, r5LOCAL(ct_r6_ld):	/* Copy r6 from a memory address.  */	pt/l	LOCAL(ct_r6_load), tr2	movi	3 << 16, r31	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r6, 8, r7	ldx.q	r6, r63, r6LOCAL(ct_r7_ld):	/* Copy r7 from a memory address.  */	pt/l	LOCAL(ct_r7_load), tr2	movi	3 << 12, r31	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r7, 8, r8	ldx.q	r7, r63, r7LOCAL(ct_r8_ld):	/* Copy r8 from a memory address.  */	pt/l	LOCAL(ct_r8_load), tr2	movi	3 << 8, r31	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r8, 8, r9	ldx.q	r8, r63, r8LOCAL(ct_r9_ld):	/* Copy r9 from a memory address.  */	pt/l	LOCAL(ct_check_tramp), tr2	ldx.q	r9, r63, r9	blink	tr2, r63LOCAL(ct_r2_load):	ldx.q	r2, r63, r2	blink	tr1, r63LOCAL(ct_r3_load):	ldx.q	r3, r63, r3	blink	tr1, r63LOCAL(ct_r4_load):	ldx.q	r4, r63, r4	blink	tr1, r63LOCAL(ct_r5_load):	ldx.q	r5, r63, r5	blink	tr1, r63LOCAL(ct_r6_load):	ldx.q	r6, r63, r6	blink	tr1, r63LOCAL(ct_r7_load):	ldx.q	r7, r63, r7	blink	tr1, r63LOCAL(ct_r8_load):	ldx.q	r8, r63, r8	blink	tr1, r63LOCAL(ct_r2_pop):	/* Pop r2 from the stack.  */	movi	1, r30	ldx.q	r15, r63, r2	shlli	r30, 29, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r3_pop):	/* Pop r3 from the stack.  */	movi	1, r30	ldx.q	r15, r63, r3	shlli	r30, 26, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r4_pop):	/* Pop r4 from the stack.  */	movi	1, r30	ldx.q	r15, r63, r4	shlli	r30, 23, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r5_pop):	/* Pop r5 from the stack.  */	movi	1, r30	ldx.q	r15, r63, r5	shlli	r30, 20, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r6_pop):	/* Pop r6 from the stack.  */	movi	1, r30	ldx.q	r15, r63, r6	shlli	r30, 16, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r7_pop):	/* Pop r7 from the stack.  */	ldx.q	r15, r63, r7	movi	1 << 12, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r8_pop):	/* Pop r8 from the stack.  */	ldx.q	r15, r63, r8	movi	1 << 8, r31	addi.l	r15, 8, r15	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_pop_seq):	/* Pop a sequence of registers off the stack.  */	andi	r1, 7 << 1, r30	movi	(LOCAL(ct_end_of_pop_seq) >> 16) & 65535, r32	shlli	r30, 2, r31	shori	LOCAL(ct_end_of_pop_seq) & 65535, r32	sub.l	r32, r31, r33	ptabs/l	r33, tr2	blink	tr2, r63LOCAL(ct_start_of_pop_seq):	/* Beginning of pop sequence.  */	ldx.q	r15, r63, r3	addi.l	r15, 8, r15	ldx.q	r15, r63, r4	addi.l	r15, 8, r15	ldx.q	r15, r63, r5	addi.l	r15, 8, r15	ldx.q	r15, r63, r6	addi.l	r15, 8, r15	ldx.q	r15, r63, r7	addi.l	r15, 8, r15	ldx.q	r15, r63, r8	addi.l	r15, 8, r15LOCAL(ct_r9_pop):	/* Pop r9 from the stack.  */	ldx.q	r15, r63, r9	addi.l	r15, 8, r15LOCAL(ct_end_of_pop_seq): /* Label used to compute first pop instruction.  */LOCAL(ct_check_tramp):	/* Check whether we need a trampoline.  */	pt/u	LOCAL(ct_ret_wide), tr2	andi	r1, 1, r1	bne/u	r1, r63, tr2LOCAL(ct_call_func):	/* Just branch to the function.  */	blink	tr0, r63LOCAL(ct_ret_wide):	/* Call the function, so that we can unpack its 			   64-bit return value.  */	add.l	r18, r63, r10	blink	tr0, r18	ptabs	r10, tr0#if __LITTLE_ENDIAN__	shari	r2, 32, r3	add.l	r2, r63, r2#else	add.l	r2, r63, r3	shari	r2, 32, r2#endif	blink	tr0, r63#endif /* L_shcompact_call_trampoline */#ifdef L_shcompact_return_trampoline     /* This function does the converse of the code in `ret_wide'	above.  It is tail-called by SHcompact functions returning	64-bit non-floating-point values, to pack the 32-bit values in	r2 and r3 into r2.  */	.mode	SHmedia	.section	.text..SHmedia32, "ax"	.align	2	.global	GLOBAL(GCC_shcompact_return_trampoline)GLOBAL(GCC_shcompact_return_trampoline):	ptabs/l	r18, tr0#if __LITTLE_ENDIAN__	addz.l	r2, r63, r2	shlli	r3, 32, r3#else	addz.l	r3, r63, r3	shlli	r2, 32, r2#endif	or	r3, r2, r2	blink	tr0, r63#endif /* L_shcompact_return_trampoline */#ifdef L_shcompact_incoming_args	.section	.rodata	.align	1LOCAL(ia_main_table):.word	1 /* Invalid, just loop */.word	LOCAL(ia_r2_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r2_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	LOCAL(ia_r3_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r3_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	LOCAL(ia_r4_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r4_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	LOCAL(ia_r5_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r5_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	1 /* Invalid, just loop */.word	LOCAL(ia_r6_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r6_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	1 /* Invalid, just loop */.word	LOCAL(ia_r7_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r7_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	1 /* Invalid, just loop */.word	LOCAL(ia_r8_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r8_push) - datalabel LOCAL(ia_main_label).word	1 /* Invalid, just loop */.word	1 /* Invalid, just loop */.word	LOCAL(ia_r9_ld) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r9_push) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_push_seq) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_push_seq) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_r9_push) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_return) - datalabel LOCAL(ia_main_label).word	LOCAL(ia_return) - datalabel LOCAL(ia_main_label)	.mode	SHmedia	.section	.text..SHmedia32, "ax"	.align	2	     /* This function stores 64-bit general-purpose registers back in	the stack, starting at @(r1), where the cookie is supposed to	have been stored, and loads the address in which each register	was stored into itself.  Its execution time is linear on the	number of registers that actually have to be copied, and it is	optimized for structures larger than 64 bits, as opposed to	invidivual `long long' arguments.  See sh.h for details on the	actual bit pattern.  */		.global	GLOBAL(GCC_shcompact_incoming_args)GLOBAL(GCC_shcompact_incoming_args):	ptabs/l	r18, tr0	/* Prepare to return.  */	shlri	r17, 32, r0	/* Load the cookie.  */	movi	((datalabel LOCAL(ia_main_table) - 31 * 2) >> 16) & 65535, r35	pt/l	LOCAL(ia_loop), tr1	add.l	r17, r63, r17	shori	((datalabel LOCAL(ia_main_table) - 31 * 2)) & 65535, r35LOCAL(ia_loop):	nsb	r0, r28	shlli	r28, 1, r29	ldx.w	r35, r29, r30LOCAL(ia_main_label):	ptrel/l	r30, tr2	blink	tr2, r63LOCAL(ia_r2_ld):	/* Store r2 and load its address.  */	movi	3, r30	shlli	r30, 29, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r2	add.l	r17, r63, r2	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r3_ld):	/* Store r3 and load its address.  */	movi	3, r30	shlli	r30, 26, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r3	add.l	r17, r63, r3	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r4_ld):	/* Store r4 and load its address.  */	movi	3, r30	shlli	r30, 23, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r4	add.l	r17, r63, r4	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r5_ld):	/* Store r5 and load its address.  */	movi	3, r30	shlli	r30, 20, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r5	add.l	r17, r63, r5	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r6_ld):	/* Store r6 and load its address.  */	movi	3, r30	shlli	r30, 16, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r6	add.l	r17, r63, r6	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r7_ld):	/* Store r7 and load its address.  */	movi	3 << 12, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r7	add.l	r17, r63, r7	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r8_ld):	/* Store r8 and load its address.  */	movi	3 << 8, r31	and	r0, r31, r32	andc	r0, r31, r0	stx.q	r17, r63, r8	add.l	r17, r63, r8	addi.l	r17, 8, r17	beq/u	r31, r32, tr1LOCAL(ia_r9_ld):	/* Store r9 and load its address.  */	stx.q	r17, r63, r9	add.l	r17, r63, r9	blink	tr0, r63LOCAL(ia_r2_push):	/* Push r2 onto the stack.  */	movi	1, r30	shlli	r30, 29, r31	andc	r0, r31, r0	stx.q	r17, r63, r2	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r3_push):	/* Push r3 onto the stack.  */	movi	1, r30	shlli	r30, 26, r31	andc	r0, r31, r0	stx.q	r17, r63, r3	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r4_push):	/* Push r4 onto the stack.  */	movi	1, r30	shlli	r30, 23, r31	andc	r0, r31, r0	stx.q	r17, r63, r4	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r5_push):	/* Push r5 onto the stack.  */	movi	1, r30	shlli	r30, 20, r31	andc	r0, r31, r0	stx.q	r17, r63, r5	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r6_push):	/* Push r6 onto the stack.  */	movi	1, r30	shlli	r30, 16, r31	andc	r0, r31, r0	stx.q	r17, r63, r6	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r7_push):	/* Push r7 onto the stack.  */	movi	1 << 12, r31	andc	r0, r31, r0	stx.q	r17, r63, r7	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r8_push):	/* Push r8 onto the stack.  */	movi	1 << 8, r31	andc	r0, r31, r0	stx.q	r17, r63, r8	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_push_seq):	/* Push a sequence of registers onto the stack.  */	andi	r0, 7 << 1, r30	movi	(LOCAL(ia_end_of_push_seq) >> 16) & 65535, r32	shlli	r30, 2, r31	shori	LOCAL(ia_end_of_push_seq) & 65535, r32	sub.l	r32, r31, r33	ptabs/l	r33, tr2	blink	tr2, r63LOCAL(ia_stack_of_push_seq):	 /* Beginning of push sequence.  */	stx.q	r17, r63, r3	addi.l	r17, 8, r17	stx.q	r17, r63, r4	addi.l	r17, 8, r17	stx.q	r17, r63, r5	addi.l	r17, 8, r17	stx.q	r17, r63, r6	addi.l	r17, 8, r17	stx.q	r17, r63, r7	addi.l	r17, 8, r17	stx.q	r17, r63, r8	addi.l	r17, 8, r17LOCAL(ia_r9_push):	/* Push r9 onto the stack.  */	stx.q	r17, r63, r9LOCAL(ia_return):	/* Return.  */	blink	tr0, r63LOCAL(ia_end_of_push_seq): /* Label used to compute the first push instruction.  */#endif /* L_shcompact_incoming_args */#endif#if __SH5__#ifdef L_nested_trampoline#if __SH5__ == 32	.section	.text..SHmedia32,"ax"#else	.text#endif	.align	3 /* It is copied in units of 8 bytes in SHmedia mode.  */	.global	GLOBAL(GCC_nested_trampoline)GLOBAL(GCC_nested_trampoline):	.mode	SHmedia	ptrel/u	r63, tr0	gettr	tr0, r0#if __SH5__ == 64	ld.q	r0, 24, r1#else	ld.l	r0, 24, r1#endif	ptabs/l	r1, tr1#if __SH5__ == 64	ld.q	r0, 32, r1#else	ld.l	r0, 28, r1#endif	blink	tr1, r63#endif /* L_nested_trampoline */#endif /* __SH5__ */#if __SH5__ == 32#ifdef L_push_pop_shmedia_regs	.section	.text..SHmedia32,"ax"	.mode	SHmedia	.align	2#ifndef __SH4_NOFPU__		.global	GLOBAL(GCC_push_shmedia_regs)GLOBAL(GCC_push_shmedia_regs):	addi.l	r15, -14*8, r15	fst.d	r15, 13*8, dr62	fst.d	r15, 12*8, dr60	fst.d	r15, 11*8, dr58	fst.d	r15, 10*8, dr56	fst.d	r15,  9*8, dr54	fst.d	r15,  8*8, dr52	fst.d	r15,  7*8, dr50	fst.d	r15,  6*8, dr48	fst.d	r15,  5*8, dr46	fst.d	r15,  4*8, dr44	fst.d	r15,  3*8, dr42	fst.d	r15,  2*8, dr40	fst.d	r15,  1*8, dr38	fst.d	r15,  0*8, dr36#endif	.global	GLOBAL(GCC_push_shmedia_regs_nofpu)GLOBAL(GCC_push_shmedia_regs_nofpu):	ptabs/l	r18, tr0	addi.l	r15, -27*8, r15	gettr	tr7, r62	gettr	tr6, r61	gettr	tr5, r60	st.q	r15, 26*8, r62	st.q	r15, 25*8, r61	st.q	r15, 24*8, r60	st.q	r15, 23*8, r59	st.q	r15, 22*8, r58	st.q	r15, 21*8, r57	st.q	r15, 20*8, r56	st.q	r15, 19*8, r55	st.q	r15, 18*8, r54	st.q	r15, 17*8, r53	st.q	r15, 16*8, r52	st.q	r15, 15*8, r51	st.q	r15, 14*8, r50	st.q	r15, 13*8, r49	st.q	r15, 12*8, r48	st.q	r15, 11*8, r47	st.q	r15, 10*8, r46	st.q	r15,  9*8, r45	st.q	r15,  8*8, r44	st.q	r15,  7*8, r35	st.q	r15,  6*8, r34	st.q	r15,  5*8, r33	st.q	r15,  4*8, r32	st.q	r15,  3*8, r31	st.q	r15,  2*8, r30	st.q	r15,  1*8, r29	st.q	r15,  0*8, r28	blink	tr0, r63#ifndef __SH4_NOFPU__	.global	GLOBAL(GCC_pop_shmedia_regs)GLOBAL(GCC_pop_shmedia_regs):	pt	.L0, tr1	movi	41*8, r0	fld.d	r15, 40*8, dr62	fld.d	r15, 39*8, dr60	fld.d	r15, 38*8, dr58	fld.d	r15, 37*8, dr56	fld.d	r15, 36*8, dr54	fld.d	r15, 35*8, dr52	fld.d	r15, 34*8, dr50	fld.d	r15, 33*8, dr48	fld.d	r15, 32*8, dr46	fld.d	r15, 31*8, dr44	fld.d	r15, 30*8, dr42	fld.d	r15, 29*8, dr40	fld.d	r15, 28*8, dr38	fld.d	r15, 27*8, dr36	blink	tr1, r63#endif	.global	GLOBAL(GCC_pop_shmedia_regs_nofpu)GLOBAL(GCC_pop_shmedia_regs_nofpu):	movi	27*8, r0.L0:	ptabs	r18, tr0	ld.q	r15, 26*8, r62	ld.q	r15, 25*8, r61	ld.q	r15, 24*8, r60	ptabs	r62, tr7	ptabs	r61, tr6	ptabs	r60, tr5	ld.q	r15, 23*8, r59	ld.q	r15, 22*8, r58	ld.q	r15, 21*8, r57	ld.q	r15, 20*8, r56	ld.q	r15, 19*8, r55	ld.q	r15, 18*8, r54	ld.q	r15, 17*8, r53	ld.q	r15, 16*8, r52	ld.q	r15, 15*8, r51	ld.q	r15, 14*8, r50	ld.q	r15, 13*8, r49	ld.q	r15, 12*8, r48	ld.q	r15, 11*8, r47	ld.q	r15, 10*8, r46	ld.q	r15,  9*8, r45	ld.q	r15,  8*8, r44	ld.q	r15,  7*8, r35	ld.q	r15,  6*8, r34	ld.q	r15,  5*8, r33	ld.q	r15,  4*8, r32	ld.q	r15,  3*8, r31	ld.q	r15,  2*8, r30	ld.q	r15,  1*8, r29	ld.q	r15,  0*8, r28	add.l	r15, r0, r15	blink	tr0, r63#endif /* __SH5__ == 32 */#endif /* L_push_pop_shmedia_regs */

⌨️ 快捷键说明

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