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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# You'll find a bunch of nop opcodes in the below macros. They are
# there to keep the code correctly aligned. Be careful to maintain
# them when changing the code.
comment "subroutine declare"
.purgem gdbasm_declare
.macro gdbasm_declare name
.align 1
.global \name
\name:
.endm
comment "subroutine prologue"
.macro gdbasm_enter
mov.l r14,@-r15
sts.l pr,@-r15
mov r15,r14
nop
.endm
comment "subroutine epilogue"
.macro gdbasm_leave
mov r14,r15
lds.l @r15+,pr
mov.l @r15+,r14
rts
nop
nop
.endm
comment "subroutine end"
.purgem gdbasm_end
.macro gdbasm_end name
.size \name, . - \name
.align 1
.endm
comment "subroutine call"
.macro gdbasm_call subr
mov.l .Lconst\@,r1
bra .Lafterconst\@
nop
nop
.Lconst\@:
.align 2
.long \subr
.align 1
.Lafterconst\@:
jsr @r1
nop
.endm
.macro gdbasm_several_nops
nop
nop
nop
nop
.endm
comment "exit (0)"
.macro gdbasm_exit0
sleep
nop
.endm
comment "crt0 startup"
.macro gdbasm_startup
comment "If there is a _stack symbol, use it for setting up the stack"
comment "pointer. In hosted mode (when there is no _stack symbol),"
comment "the operating system will have initialized it already."
mov.l .stackaddr, r0
tst r0, r0
bt .afterstackaddr
mov r0, r15
bra .afterstackaddr
nop
.align 2
.stackaddr:
.weak _stack
.long _stack
.align 1
.afterstackaddr:
.endm
comment "Declare a data variable"
.purgem gdbasm_datavar
.macro gdbasm_datavar name value
.data
.align 2
.type \name, @object
.size \name, 4
\name:
.long \value
.endm
|