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
|