sysv.s

来自「this gcc-g++-3.3.1.tar.gz is a source fi」· S 代码 · 共 97 行

S
97
字号
/* -----------------------------------------------------------------------   sysv.S      m68k Foreign Function Interface    ----------------------------------------------------------------------- */#define LIBFFI_ASM	#include <ffi.h>	.text	.globl	ffi_call_SYSV	.type	ffi_call_SYSV,@functionffi_call_SYSV:	link	%fp,#0	move.l	%d2,-(%sp)	| Make room for all of the new args.	sub.l	16(%fp),%sp	| Call ffi_prep_args	move.l	12(%fp),-(%sp)	pea	4(%sp)	move.l	8(%fp),%a0	jsr	(%a0)	addq.l	#8,%sp		| Pass pointer to struct value, if any	move.l	%a0,%a1	| Call the function	move.l	32(%fp),%a0	jsr	(%a0)	| Remove the space we pushed for the args	add.l	16(%fp),%sp	| Load the pointer to storage for the return value	move.l	28(%fp),%a1	| Load the return type code 	move.l	20(%fp),%d2	| If the return value pointer is NULL, assume no return value.	tst.l	%a1	jbeq	noretval	btst	#0,%d2	jbeq	retlongint	move.l	%d0,(%a1)	jbra	epilogueretlongint:	btst	#1,%d2	jbeq	retfloat	move.l	%d0,(%a1)	move.l	%d1,4(%a1)	jbra	epilogueretfloat:	btst	#2,%d2	jbeq	retdouble	fmove.s	%fp0,(%a1)	jbra	epilogueretdouble:	btst	#3,%d2	jbeq	retlongdouble	fmove.d	%fp0,(%a1)	jbra	epilogueretlongdouble:	btst	#4,%d2	jbeq	retpointer	fmove.x	%fp0,(%a1)	jbra	epilogueretpointer:	btst	#5,%d2	jbeq	retstruct	move.l	%a0,(%a1)	jbra	epilogueretstruct:	btst	#6,%d2	jbeq	noretval	move.l	24(%fp),%d2	bfins	%d0,(%a1){#0,%d2}noretval:epilogue:	move.l	(%sp)+,%d2	unlk	%a6	rts	.size	ffi_call_SYSV,.-ffi_call_SYSV

⌨️ 快捷键说明

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