home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Headers / architecture / m68k / asm_help.h < prev    next >
Text File  |  1995-06-30  |  1KB  |  53 lines

  1. /* asm_help.h Created Wed Jun 28 14:08:07 PDT 1995 by mwatson */
  2.  
  3. /*
  4.  * dynamic/PIC macros for routines which reference external symbols
  5.  */
  6.  
  7. #if defined(__DYNAMIC__)
  8. #define PICIFY(var)    \
  9.     movl    pc@(L ## var ## $non_lazy_ptr-.),a0
  10.  
  11. #define CALL_EXTERN_AGAIN(func)    \
  12.     PICIFY(func)        ; \
  13.     jbsr    a0@
  14.  
  15. #define NON_LAZY_STUB(var)    \
  16. .non_lazy_symbol_pointer    ; \
  17. L ## var ## $non_lazy_ptr:    ; \
  18. .indirect_symbol var        ; \
  19. .long 0                ; \
  20. .text
  21.  
  22. #define CALL_EXTERN(func)    \
  23.         CALL_EXTERN_AGAIN(func)    ; \
  24.         NON_LAZY_STUB(func)
  25.  
  26. #define    BRANCH_EXTERN(func)    \
  27.         PICIFY(func)        ; \
  28.         jmp    a0@        ; \
  29.         NON_LAZY_STUB(func)
  30.  
  31. #define PUSH_EXTERN(var)    \
  32.     PICIFY(var)        ; \
  33.     movl    a0@, sp@-    ; \
  34.     NON_LAZY_STUB(var)
  35.  
  36. #define REG_TO_EXTERN(reg, var)    \
  37.     PICIFY(var)            ; \
  38.     movl    reg, a0@        ;\
  39.     NON_LAZY_STUB(var)
  40.  
  41. #define EXTERN_TO_REG(var, reg)                \
  42.     movl    pc@(L ## var ## $non_lazy_ptr-.),reg    ;\
  43.     NON_LAZY_STUB(var)
  44.  
  45. #else
  46. #define BRANCH_EXTERN(func)        jmp    func
  47. #define PUSH_EXTERN(var)        movl    var, sp@-
  48. #define CALL_EXTERN(func)        jsr    func
  49. #define CALL_EXTERN_AGAIN(func)        jsr    func
  50. #define REG_TO_EXTERN(reg, var)    movl    reg, var
  51. #define EXTERN_TO_REG(var, reg)        lea    var, reg
  52. #endif
  53.