Commit | Line | Data |
---|---|---|
71e06f80 CV |
1 | # You'll find a bunch of nop opcodes in the below macros. They are |
2 | # there to keep the code correctly aligned. Be careful to maintain | |
3 | # them when changing the code. | |
4 | ||
5 | comment "subroutine declare" | |
584b6e9e | 6 | .purgem gdbasm_declare |
71e06f80 CV |
7 | .macro gdbasm_declare name |
8 | .align 1 | |
9 | .global \name | |
10 | \name: | |
11 | .endm | |
12 | ||
13 | comment "subroutine prologue" | |
14 | .macro gdbasm_enter | |
15 | mov.l r14,@-r15 | |
16 | sts.l pr,@-r15 | |
17 | mov r15,r14 | |
18 | nop | |
19 | .endm | |
20 | ||
21 | comment "subroutine epilogue" | |
22 | .macro gdbasm_leave | |
23 | mov r14,r15 | |
24 | lds.l @r15+,pr | |
25 | mov.l @r15+,r14 | |
26 | rts | |
27 | nop | |
28 | nop | |
29 | .endm | |
30 | ||
31 | comment "subroutine end" | |
584b6e9e | 32 | .purgem gdbasm_end |
71e06f80 | 33 | .macro gdbasm_end name |
cbf68a60 | 34 | .size \name, . - \name |
71e06f80 CV |
35 | .align 1 |
36 | .endm | |
37 | ||
38 | comment "subroutine call" | |
39 | .macro gdbasm_call subr | |
40 | mov.l .Lconst\@,r1 | |
41 | bra .Lafterconst\@ | |
42 | nop | |
43 | nop | |
44 | .Lconst\@: | |
45 | .align 2 | |
46 | .long \subr | |
47 | .align 1 | |
48 | .Lafterconst\@: | |
49 | jsr @r1 | |
50 | nop | |
51 | .endm | |
52 | ||
53 | .macro gdbasm_several_nops | |
54 | nop | |
55 | nop | |
56 | nop | |
57 | nop | |
58 | .endm | |
59 | ||
60 | comment "exit (0)" | |
61 | .macro gdbasm_exit0 | |
62 | sleep | |
63 | nop | |
64 | .endm | |
65 | ||
66 | comment "crt0 startup" | |
67 | .macro gdbasm_startup | |
dd6d3b70 TS |
68 | comment "If there is a _stack symbol, use it for setting up the stack" |
69 | comment "pointer. In hosted mode (when there is no _stack symbol)," | |
70 | comment "the operating system will have initialized it already." | |
71 | mov.l .stackaddr, r0 | |
72 | tst r0, r0 | |
73 | bt .afterstackaddr | |
74 | mov r0, r15 | |
71e06f80 CV |
75 | bra .afterstackaddr |
76 | nop | |
71e06f80 CV |
77 | .align 2 |
78 | .stackaddr: | |
dd6d3b70 TS |
79 | .weak _stack |
80 | .long _stack | |
71e06f80 CV |
81 | .align 1 |
82 | .afterstackaddr: | |
83 | .endm | |
84 | ||
85 | comment "Declare a data variable" | |
584b6e9e | 86 | .purgem gdbasm_datavar |
71e06f80 CV |
87 | .macro gdbasm_datavar name value |
88 | .data | |
89 | .align 2 | |
90 | .type \name, @object | |
91 | .size \name, 4 | |
92 | \name: | |
93 | .long \value | |
94 | .endm |