| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | /* * Copyright (C) 2006 CodeSourcery Inc * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. * * This file defines some m68k assembly macros for handling the differences * between PIC and non-PIC. */#include <features.h>	/* When assembling code for shared flat libraries, this is nonzero	 * if %a5 points the current library's GOT.  */	.equ	have_current_got, 0	/* Perform the equivalent of "<op> <target>", where <target> is	 * a text address.  <tmp> is available as a temporary address	 * register.  */	.macro	DO_TEXT op,target,tmp#if defined __UCLIBC_FORMAT_SHARED_FLAT__	.ifne	have_current_got	move.l \target@GOT(%a5),\tmp	.else	move.l _current_shared_library_a5_offset_(%a5),\tmp	move.l \target@GOT(\tmp),\tmp	.endif	\op (\tmp)#elif defined __PIC__	lea \target-.-8,\tmp	\op (%pc,\tmp)#else	\op \target#endif	.endm	/* Do "pea <target>" when <target> is a text address.	 * <tmp> is available as a temporary register.  */	.macro PEA_TEXT target,tmp	DO_TEXT pea,\target,\tmp	.endm	/* Likewise jsr.  */	.macro CALL target,tmp	DO_TEXT jsr,\target,\tmp	.endm	/* Likewise jmp.  */	.macro JUMP target,tmp	DO_TEXT jmp,\target,\tmp	.endm	/* Initialize the global pointer, if functions need to do that.  */	.macro INIT_GP#if defined __UCLIBC_FORMAT_SHARED_FLAT__	move.l	%a5,-(%sp)	move.l _current_shared_library_a5_offset_(%a5),%a5#endif	.endm	/* Undo the effects of INIT_GP.  */	.macro FINI_GP#if defined __UCLIBC_FORMAT_SHARED_FLAT__	move.l	(%sp)+,%a5#endif	.endm
 |