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

📄 lib1funcs.asm

📁 linux下编程用 编译软件
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	.global	GLOBAL(GCC_shcompact_call_trampoline)	FUNC(GLOBAL(GCC_shcompact_call_trampoline))GLOBAL(GCC_shcompact_call_trampoline):	ptabs/l	r0, tr0	/* Prepare to call the actual function.  */	movi	((datalabel LOCAL(ct_main_table) - 31 * 2) >> 16) & 65535, r0	pt/l	LOCAL(ct_loop), tr1	addz.l	r1, r63, r1	shori	((datalabel LOCAL(ct_main_table) - 31 * 2)) & 65535, r0LOCAL(ct_loop):	nsb	r1, r28	shlli	r28, 1, r29	ldx.w	r0, r29, r30LOCAL(ct_main_label):	ptrel/l	r30, tr2	blink	tr2, r63LOCAL(ct_r2_fp):	/* Copy r2 from an FP register.  */	/* It must be dr0, so just do it.  */	fmov.dq	dr0, r2	movi	7, r30	shlli	r30, 29, r31	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r3_fp):	/* Copy r3 from an FP register.  */	/* It is either dr0 or dr2.  */	movi	7, r30	shlri	r1, 26, r32	shlli	r30, 26, r31	andc	r1, r31, r1	fmov.dq	dr0, r3	beqi/l	r32, 4, tr1	fmov.dq	dr2, r3	blink	tr1, r63LOCAL(ct_r4_fp):	/* Copy r4 from an FP register.  */	shlri	r1, 23 - 3, r34	andi	r34, 3 << 3, r33	addi	r33, LOCAL(ct_r4_fp_copy) - datalabel LOCAL(ct_r4_fp_base), r32LOCAL(ct_r4_fp_base):	ptrel/l	r32, tr2	movi	7, r30	shlli	r30, 23, r31	andc	r1, r31, r1	blink	tr2, r63LOCAL(ct_r4_fp_copy):	fmov.dq	dr0, r4	blink	tr1, r63	fmov.dq	dr2, r4	blink	tr1, r63	fmov.dq	dr4, r4	blink	tr1, r63LOCAL(ct_r5_fp):	/* Copy r5 from an FP register.  */	shlri	r1, 20 - 3, r34	andi	r34, 3 << 3, r33	addi	r33, LOCAL(ct_r5_fp_copy) - datalabel LOCAL(ct_r5_fp_base), r32LOCAL(ct_r5_fp_base):	ptrel/l	r32, tr2	movi	7, r30	shlli	r30, 20, r31	andc	r1, r31, r1	blink	tr2, r63LOCAL(ct_r5_fp_copy):	fmov.dq	dr0, r5	blink	tr1, r63	fmov.dq	dr2, r5	blink	tr1, r63	fmov.dq	dr4, r5	blink	tr1, r63	fmov.dq	dr6, r5	blink	tr1, r63LOCAL(ct_r6_fph):	/* Copy r6 from a high FP register.  */	/* It must be dr8.  */	fmov.dq	dr8, r6	movi	15, r30	shlli	r30, 16, r31	andc	r1, r31, r1	blink	tr1, r63LOCAL(ct_r6_fpl):	/* Copy r6 from a low FP register.  */	shlri	r1, 16 - 3, r34	andi	r34, 3 << 3, r33	addi	r33, LOCAL(ct_r6_fp_copy) - datalabel LOCAL(ct_r6_fp_base), r32LOCAL(ct_r6_fp_base):	ptrel/l	r32, tr2	movi	7, r30	shlli	r30, 16, r31	andc	r1, r31, r1	blink	tr2, r63LOCAL(ct_r6_fp_copy):	fmov.dq	dr0, r6	blink	tr1, r63	fmov.dq	dr2, r6	blink	tr1, r63	fmov.dq	dr4, r6	blink	tr1, r63	fmov.dq	dr6, r6	blink	tr1, r63LOCAL(ct_r7_fph):	/* Copy r7 from a high FP register.  */	/* It is either dr8 or dr10.  */	movi	15 << 12, r31	shlri	r1, 12, r32	andc	r1, r31, r1	fmov.dq	dr8, r7	beqi/l	r32, 8, tr1	fmov.dq	dr10, r7	blink	tr1, r63LOCAL(ct_r7_fpl):	/* Copy r7 from a low FP register.  */	shlri	r1, 12 - 3, r34	andi	r34, 3 << 3, r33	addi	r33, LOCAL(ct_r7_fp_copy) - datalabel LOCAL(ct_r7_fp_base), r32LOCAL(ct_r7_fp_base):	ptrel/l	r32, tr2	movi	7 << 12, r31	andc	r1, r31, r1	blink	tr2, r63LOCAL(ct_r7_fp_copy):	fmov.dq	dr0, r7	blink	tr1, r63	fmov.dq	dr2, r7	blink	tr1, r63	fmov.dq	dr4, r7	blink	tr1, r63	fmov.dq	dr6, r7	blink	tr1, r63LOCAL(ct_r8_fph):	/* Copy r8 from a high FP register.  */	/* It is either dr8 or dr10.  */	movi	15 << 8, r31	andi	r1, 1 << 8, r32	andc	r1, r31, r1	fmov.dq	dr8, r8	beq/l	r32, r63, tr1	fmov.dq	dr10, r8	blink	tr1, r63LOCAL(ct_r8_fpl):	/* Copy r8 from a low FP register.  */	shlri	r1, 8 - 3, r34	andi	r34, 3 << 3, r33	addi	r33, LOCAL(ct_r8_fp_copy) - datalabel LOCAL(ct_r8_fp_base), r32LOCAL(ct_r8_fp_base):	ptrel/l	r32, tr2	movi	7 << 8, r31	andc	r1, r31, r1	blink	tr2, r63LOCAL(ct_r8_fp_copy):	fmov.dq	dr0, r8	blink	tr1, r63	fmov.dq	dr2, r8	blink	tr1, r63	fmov.dq	dr4, r8	blink	tr1, r63	fmov.dq	dr6, r8	blink	tr1, r63LOCAL(ct_r9_fph):	/* Copy r9 from a high FP register.  */	/* It is either dr8 or dr10.  */	movi	15 << 4, r31	andi	r1, 1 << 4, r32	andc	r1, r31, r1	fmov.dq	dr8, r9	beq/l	r32, r63, tr1	fmov.dq	dr10, r9	blink	tr1, r63LOCAL(ct_r9_fpl):	/* Copy r9 from a low FP register.  */	shlri	r1, 4 - 3, r34	andi	r34, 3 << 3, r33	addi	r33, LOCAL(ct_r9_fp_copy) - datalabel LOCAL(ct_r9_fp_base), r32LOCAL(ct_r9_fp_base):	ptrel/l	r32, tr2	movi	7 << 4, r31	andc	r1, r31, r1	blink	tr2, r63LOCAL(ct_r9_fp_copy):	fmov.dq	dr0, r9	blink	tr1, r63	fmov.dq	dr2, r9	blink	tr1, r63	fmov.dq	dr4, r9	blink	tr1, r63	fmov.dq	dr6, r9	blink	tr1, r63LOCAL(ct_r2_ld):	/* Copy r2 from a memory address.  */	pt/l	LOCAL(ct_r2_load), tr2	movi	3, r30	shlli	r30, 29, r31	and	r1, r31, r32	andc	r1, r31, r1	beq/l	r31, r32, tr2	addi.l	r2, 8, r3	ldx.q	r2, r63, r2	/* Fall through.  */LOCAL(ct_r3_ld):	/* Copy r3 from a memory address.  */	pt/l	LOCAL(ct_r3_load), tr2	movi	3, r30	shlli	r30, 26, r31	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	ENDFUNC(GLOBAL(GCC_shcompact_call_trampoline))#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)	HIDDEN_FUNC(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	ENDFUNC(GLOBAL(GCC_shcompact_return_trampoline))#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, and loads the address in which each register	was stored into itself.  The lower 32 bits of r17 hold the address	to begin storing, and the upper 32 bits of r17 hold the cookie.	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	individual `long long' arguments.  See sh.h for details on the	actual bit pattern.  */		.global	GLOBAL(GCC_shcompact_incoming_args) 	FUNC(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, r43	pt/l	LOCAL(ia_loop), tr1	add.l	r17, r63, r17	shori	((datalabel LOCAL(ia_main_table) - 31 * 2)) & 65535, r43LOCAL(ia_loop):	nsb	r0, r36	shlli	r36, 1, r37	ldx.w	r43, r37, r38LOCAL(ia_main_label):	ptrel/l	r38, tr2	blink	tr2, r63LOCAL(ia_r2_ld):	/* Store r2 and load its address.  */	movi	3, r38	shlli	r38, 29, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r2	add.l	r17, r63, r2	addi.l	r17, 8, r17	beq/u	r39, r40, tr1LOCAL(ia_r3_ld):	/* Store r3 and load its address.  */	movi	3, r38	shlli	r38, 26, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r3	add.l	r17, r63, r3	addi.l	r17, 8, r17	beq/u	r39, r40, tr1LOCAL(ia_r4_ld):	/* Store r4 and load its address.  */	movi	3, r38	shlli	r38, 23, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r4	add.l	r17, r63, r4	addi.l	r17, 8, r17	beq/u	r39, r40, tr1LOCAL(ia_r5_ld):	/* Store r5 and load its address.  */	movi	3, r38	shlli	r38, 20, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r5	add.l	r17, r63, r5	addi.l	r17, 8, r17	beq/u	r39, r40, tr1LOCAL(ia_r6_ld):	/* Store r6 and load its address.  */	movi	3, r38	shlli	r38, 16, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r6	add.l	r17, r63, r6	addi.l	r17, 8, r17	beq/u	r39, r40, tr1LOCAL(ia_r7_ld):	/* Store r7 and load its address.  */	movi	3 << 12, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r7	add.l	r17, r63, r7	addi.l	r17, 8, r17	beq/u	r39, r40, tr1LOCAL(ia_r8_ld):	/* Store r8 and load its address.  */	movi	3 << 8, r39	and	r0, r39, r40	andc	r0, r39, r0	stx.q	r17, r63, r8	add.l	r17, r63, r8	addi.l	r17, 8, r17	beq/u	r39, r40, 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, r38	shlli	r38, 29, r39	andc	r0, r39, r0	stx.q	r17, r63, r2	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r3_push):	/* Push r3 onto the stack.  */	movi	1, r38	shlli	r38, 26, r39	andc	r0, r39, r0	stx.q	r17, r63, r3	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r4_push):	/* Push r4 onto the stack.  */	movi	1, r38	shlli	r38, 23, r39	andc	r0, r39, r0	stx.q	r17, r63, r4	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r5_push):	/* Push r5 onto the stack.  */	movi	1, r38	shlli	r38, 20, r39	andc	r0, r39, r0	stx.q	r17, r63, r5	addi.l	r17, 8, r17	blink	tr1, r63LOCAL(ia_r6_push):	/* Push r6 onto the stack.  */	movi	1, r38	shlli	r38, 16, r39	andc	r0, r39, 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, r39	andc	r0, r39, 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, r39	andc	r0, r39, 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, r38	movi	(LOCAL(ia_end_of_push_

⌨️ 快捷键说明

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