123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #ifndef _SYSDEP_H_
- #define _SYSDEP_H_
- #ifndef C_LABEL
- #ifdef __STDC__
- #define C_LABEL(name) name##:
- #else
- #define C_LABEL(name) name:
- #endif
- #endif
- #define __STR(x) #x
- #define STR(x) __STR(x)
- #ifndef END
- #define END(sym)
- #endif
- #define C_SYMBOL_NAME(name) name
- #ifdef __ASSEMBLER__
- #define ALIGNARG(log2) log2
- #define ASM_GLOBAL_DIRECTIVE .globl
- #define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg
- #define ASM_SIZE_DIRECTIVE(name) .size name,.-name
- #ifdef __PIC__
- #define PLTJUMP(_x) \
- add.d C_SYMBOL_NAME (_x):PLT,$pc
- #define PLTCALL(_x) \
- jsr [$r0+C_SYMBOL_NAME (_x):GOTPLT16]
- #define SETUP_PIC \
- push $r0 @ \
- move.d $pc,$r0 @ \
- sub.d .:GOTOFF,$r0
- #define TEARDOWN_PIC pop $r0
- #else
- #define PLTJUMP(_x) jump C_SYMBOL_NAME (_x)
- #define PLTCALL(_x) jsr C_SYMBOL_NAME (_x)
- #define SETUP_PIC
- #define TEARDOWN_PIC
- #endif
- #define ENTRY(name) \
- .text @ \
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (name) @ \
- ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME (name), function) @ \
- .align ALIGNARG (2) @ \
- C_LABEL(name) @ \
- CALL_MCOUNT
- #undef END
- #define END(name) \
- ASM_SIZE_DIRECTIVE (C_SYMBOL_NAME (name))
- #define PSEUDO(name, syscall_name, args) \
- ENTRY (name) @ \
- DOARGS_##args @ \
- movu.w SYS_ify (syscall_name),$r9 @ \
- break 13 @ \
- cmps.w -4096,$r10 @ \
- bhs 0f @ \
- nop @ \
- UNDOARGS_return_##args
- #define PSEUDO_END(name) \
- 0: @ \
- SETUP_PIC @ \
- PLTJUMP (__syscall_error) @ \
- END (name)
- #ifdef PROF
- #define CALL_MCOUNT \
- push $srp @ \
- push $r9 @ \
- push $r10 @ \
- push $r11 @ \
- push $r12 @ \
- push $r13 @ \
- SETUP_PIC @ \
- PLTCALL (_mcount) @ \
- TEARDOWN_PIC @ \
- pop $r13 @ \
- pop $r12 @ \
- pop $r11 @ \
- pop $r10 @ \
- pop $r9 @ \
- pop $srp
- #else
- #define CALL_MCOUNT
- #endif
- #endif
- #endif
|