-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmacro_def.c
More file actions
50 lines (38 loc) · 2.26 KB
/
macro_def.c
File metadata and controls
50 lines (38 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#define sp r6
#define pc r7
#define WORD 1
#define NL __NL__
#define HASH __HASH__
#define PUSH(reg) add sp, sp, #WORD NL st reg, [ r0, sp ]
#define POP(reg) sub sp, sp, #WORD NL ld reg, [ sp, #1 ]
#define CALL_SAVE_R5(func) \
PUSH(r5) NL CALL(func) \
NL POP(r5)
#define CALL(func) \
add r5, r7, #3; \
r5 = return address(next instruction) NL PUSH(r5); \
push return address NL bal func
#define SYSCALL() \
add r5, r7, #3; \
r5 = return address(next instruction) NL PUSH(r5); \
push return address NL ld pc, [ r0, #sys_call_function ]
#define SYSCALL_SAVE_R5() \
PUSH(r5) NL add r5, r7, #3; \
r5 = return address(next instruction) NL PUSH(r5); \
push return address NL ld pc, [ r0, #sys_call_function ] NL POP(r5)
#define return_macro ld pc, [ r0, #return ]
#define NULL r0
#define J_SYS_CALL(func_offset) \
add r5, r7, #4 NL PUSH(r5) \
NL ld r5, [ r0, #sys_table_pointer ] NL ld r7, [ r5, HASH func_offset ]; \
call the corresponding function
#define CALL_UTIL(func_offset) \
add r5, r7, #4 NL PUSH(r5) \
NL ld r5, [ r0, #util_table_pointer ] NL ld r7, [ r5, HASH func_offset ]; \
call the corresponding function
#define J_SYS_CALL_FAR(func_offset) \
add r5, r7, #5 NL PUSH(r5) \
NL ld r5, [ r0, #sys_table_pointer ] NL add r5, r5, #15 NL ld r7, \
[ r5, HASH func_offset ]; \
call the corresponding function
#define FAR_SYS_IDX(func) add r4, r0, #15 NL add r4, r4, HASH func