Commit | Line | Data |
---|---|---|
3f8107ab AM |
1 | # Used for all instructions that have a 3-address form |
2 | .macro TERNARY insn | |
3 | # reg-reg | |
4 | \insn $r31, $r0, $r0 | |
5 | \insn $r0, $r31, $r0 | |
6 | \insn $r0, $r0, $r31 | |
7 | \insn $r1, $r2, $r4 | |
8 | \insn $r8, $r16, $r0 | |
9 | ||
10 | # immediate | |
11 | \insn $r31, $r0, -512 | |
12 | \insn $r0, $r31, 0 | |
13 | \insn $r0, $r31, 1 | |
14 | \insn $r0, $r31, 511 | |
15 | ||
16 | # short and byte | |
17 | \insn\().s $r0, $r31, $r1 | |
18 | \insn\().s $r0, $r31, 77 | |
19 | \insn\().b $r0, $r31, $r1 | |
20 | \insn\().b $r0, $r31, 77 | |
21 | ||
22 | .endm | |
23 | ||
24 | .macro RegUImm insn | |
25 | \insn r0, r0, 0 | |
26 | \insn r0, r0, 65535 | |
27 | \insn r0, r31, 0 | |
28 | \insn r0, r31, 65535 | |
29 | \insn r31, r0, 0 | |
30 | \insn r31, r0, 65535 | |
31 | .endm | |
32 | ||
33 | .macro CMPOP insn | |
34 | # reg-reg | |
35 | \insn $r0, $r0 | |
36 | \insn $r31, $r0 | |
37 | \insn $r0, $r31 | |
38 | ||
39 | # immediate | |
40 | \insn $r0, -512 | |
41 | \insn $r31, 0 | |
42 | \insn $r31, 1 | |
43 | \insn $r31, 511 | |
44 | ||
45 | # short and byte | |
46 | \insn\().s $r31, $r1 | |
47 | \insn\().s $r31, 77 | |
48 | \insn\().b $r31, $r1 | |
49 | \insn\().b $r31, 77 | |
50 | ||
51 | .endm | |
52 | ||
53 | .section .data | |
54 | dalabel: | |
55 | .long 0 | |
56 | ||
57 | .section .text | |
58 | pmlabel: | |
59 | ||
60 | TERNARY add | |
61 | TERNARY sub | |
62 | TERNARY and | |
63 | TERNARY or | |
64 | TERNARY xor | |
65 | TERNARY xnor | |
66 | TERNARY ashl | |
67 | TERNARY lshr | |
68 | TERNARY ashr | |
69 | TERNARY ror | |
70 | TERNARY ldl | |
71 | TERNARY bins | |
72 | TERNARY bexts | |
73 | TERNARY bextu | |
74 | TERNARY flip | |
75 | ||
76 | CMPOP addcc | |
77 | CMPOP cmp | |
78 | CMPOP tst | |
79 | CMPOP btst | |
80 | ||
81 | # LDI, STI, EXI | |
82 | ldi.l $r0,$r31,-128 | |
83 | ldi.l $r31,$r0,127 | |
84 | ldi.s $r0,$r31,-128 | |
85 | ldi.s $r0,$r31,127 | |
86 | ldi.b $r31,$r0,-128 | |
87 | ldi.b $r31,$r0,127 | |
88 | sti.l $r31,-128,$r0 | |
89 | sti.l $r0,127,$r31 | |
90 | sti.s $r31,-128,$r0 | |
91 | sti.s $r31,127,$r0 | |
92 | sti.b $r0,-128,$r31 | |
93 | sti.b $r0,127,$r31 | |
94 | exi.l $r0,$r31,-128 | |
95 | exi.l $r31,$r0,127 | |
96 | exi.s $r0,$r31,-128 | |
97 | exi.s $r0,$r31,127 | |
98 | exi.b $r31,$r0,-128 | |
99 | exi.b $r31,$r0,127 | |
100 | ||
101 | # LPM, LPMI | |
102 | lpm.l $r0,pmlabel | |
103 | lpm.s $r16,pmlabel | |
104 | lpm.b $r31,pmlabel | |
105 | lpmi.l $r0,$r1,-128 | |
106 | lpmi.s $r16,$r1,127 | |
107 | lpmi.b $r31,$r1,-128 | |
108 | ||
109 | # JMP | |
110 | jmp pmlabel | |
111 | jmpi $r16 | |
112 | jmpx 31,$r28,1,pmlabel | |
113 | jmpc nz,pmlabel | |
114 | ||
115 | # CALL | |
116 | call pmlabel | |
117 | calli $r16 | |
118 | callx 31,$r28,1,pmlabel | |
119 | callc nz,pmlabel | |
120 | ||
121 | # PUSH, POP | |
122 | push $r0 | |
123 | push $r16 | |
124 | push $r31 | |
125 | pop $r0 | |
126 | pop $r16 | |
127 | pop $r31 | |
128 | ||
129 | # LINK,UNLINK | |
130 | link $r0,0 | |
131 | link $r16,65535 | |
132 | link $r31,1017 | |
133 | unlink $r0 | |
134 | unlink $r16 | |
135 | unlink $r31 | |
136 | ||
137 | # RETURN,RETI | |
138 | return | |
139 | reti | |
140 | ||
141 | # LDA,STA,EXA | |
142 | lda.l $r0,dalabel | |
143 | lda.s $r16,dalabel | |
144 | lda.b $r31,dalabel | |
145 | sta.l dalabel,$r0 | |
146 | sta.s dalabel,$r16 | |
147 | sta.b dalabel,$r31 | |
148 | exa.l $r0,dalabel | |
149 | exa.s $r16,dalabel | |
150 | exa.b $r31,dalabel | |
151 | ||
152 | # LDK | |
153 | ldk $r0,-524288 | |
154 | ldk $r0,524287 | |
155 | ldk $r0,0 | |
156 | ||
157 | move $r0,$r31 | |
158 | move $r31,$r0 | |
159 | ||
160 | TERNARY udiv | |
161 | TERNARY umod | |
162 | TERNARY div | |
163 | TERNARY mod | |
164 | TERNARY strcmp | |
165 | TERNARY memcpy | |
166 | TERNARY memset | |
167 | TERNARY mul | |
168 | TERNARY muluh | |
169 | TERNARY streamin | |
170 | TERNARY streamini | |
171 | TERNARY streamout | |
172 | TERNARY streamouti | |
173 | ||
174 | strlen.l $r0,$r31 | |
175 | strlen.l $r31,$r0 | |
176 | strlen.s $r0,$r31 | |
177 | strlen.s $r31,$r0 | |
178 | strlen.b $r0,$r31 | |
179 | strlen.b $r31,$r0 | |
180 | stpcpy.l $r0,$r31 | |
181 | stpcpy.l $r31,$r0 | |
182 | stpcpy.s $r0,$r31 | |
183 | stpcpy.s $r31,$r0 | |
184 | stpcpy.b $r0,$r31 | |
185 | stpcpy.b $r31,$r0 |