1 ### GNU Mes --- Maxwell Equations of Software
2 ### Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4 ### This file is part of GNU Mes.
6 ### Mes is free software# you can redistribute it and/or modify it
7 ### under the terms of the GNU General Public License as published by
8 ### the Free Software Foundation# either version 3 of the License, or (at
9 ### your option) any later version.
11 ### GNU Mes is distributed in the hope that it will be useful, but
12 ### WITHOUT ANY WARRANTY# without even the implied warranty of
13 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ### GNU General Public License for more details.
16 ### You should have received a copy of the GNU General Public License
17 ### along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
19 # reduced instruction set: rax, rdi (some rcx for shift, rdx for mul, div)
20 # and r10 as i64 immediate helper
22 DEFINE add____$i32,%rax 4805
23 DEFINE add____$i32,%rbp 4881c5
24 DEFINE add____$i32,%rdi 4881c7
25 DEFINE add____$i32,(%rax) 8100
26 DEFINE add____$i32,0x32(%rbp) 8185
27 DEFINE add____$i8,%rax 4883c0
28 DEFINE add____$i8,%rdi 4883c7
29 DEFINE add____$i8,%rsp 4883c4
30 DEFINE add____$i8,(%rax) 8300
31 DEFINE add____$i8,(%rdi) 8307
32 DEFINE add____$i8,0x8(%rbp) 8345
33 DEFINE add____%r15,(%rax) 4c0138
34 DEFINE add____%r15,(%rdi) 4c013f
35 DEFINE add____%rax,%rax 4801c0
36 DEFINE add____%rbp,%rax 4801e8
37 DEFINE add____%rdi,%rax 4801f8
38 DEFINE add____%rdi,%rdi 4801ff
39 DEFINE addb___$i8,(%rax) 8000
40 DEFINE addb___$i8,(%rdi) 8007
41 DEFINE addl___$i32,(%rax) 8100
42 DEFINE addl___$i32,(%rdi) 8107
43 DEFINE addl___$i8,(%rax) 8300
44 DEFINE addl___$i8,(%rdi) 8307
45 DEFINE addw___$i8,(%rax) 668100
46 DEFINE addw___$i8,(%rdi) 668107
47 DEFINE and____$i32,%rdi 4881e7
48 DEFINE and____%r15,%rax 4c21f8
49 DEFINE and____%r15,%rdi 4c21ff
50 DEFINE and____%rdi,%rax 4821f8
52 DEFINE call___*%rax ffd0
53 DEFINE call___*%rdi ffd7
54 DEFINE cmp____$i32,%rax 483d
55 DEFINE cmp____$i8,%rax 4883f8
56 DEFINE cmp____%r15,%rax 4c39f8
57 DEFINE cmp____%r15,%rdi 4c39ff
59 DEFINE idiv___%rdi 48f7ff
71 DEFINE jmp____*%rbx ffe3
74 DEFINE mov____$i32,%rax 48c7c0
75 DEFINE mov____$i32,%rdi 48c7c7
76 DEFINE mov____$i32,0x8(%rbp) c745
77 DEFINE mov____$i64,%r15 49bf
78 DEFINE mov____$i64,%rax 48a1
79 DEFINE mov____$i64,%rax 48b8
80 DEFINE mov____$i64,%rax 48b8
81 DEFINE mov____$i64,%rdi 48bf
82 DEFINE mov____%al,(%rdi) 8807
83 DEFINE mov____%al,0x32(%rbp) 8885
84 DEFINE mov____%al,0x8(%rbp) 8845
85 DEFINE mov____%ax,(%rdi) 668907
86 DEFINE mov____%ax,0x8(%rbp) 668945
87 DEFINE mov____%eax,%eax 89c0
88 DEFINE mov____%eax,%rax 89c0
89 DEFINE mov____%eax,(%rdi) 8907
90 DEFINE mov____%eax,0x32(%rbp) 8985
91 DEFINE mov____%eax,0x8(%rbp) 8945
92 DEFINE mov____%eax,0x8(%rbp) 8945
93 DEFINE mov____%edi,%edi 89ff
94 DEFINE mov____%edi,%rdi 89ff
95 DEFINE mov____%edi,0x32(%rbp) 89bd
96 DEFINE mov____%edi,0x8(%rbp) 897d
97 DEFINE mov____%esi,%eax 89f0
98 DEFINE mov____%r8,%rdi 4c89c7
99 DEFINE mov____%rax,%rax 4889c0
100 DEFINE mov____%rax,%rdi 4889c7
101 DEFINE mov____%rax,(%rdi) 488907
102 DEFINE mov____%rax,0x32 48890425
103 DEFINE mov____%rax,0x32(%rbp) 488985
104 DEFINE mov____%rax,0x8(%rbp) 488945
105 DEFINE mov____%rax,0x8(%rdi) 488947
106 DEFINE mov____%rbp,%rax 4889e8
107 DEFINE mov____%rbp,%rdi 4889ef
108 DEFINE mov____%rbp,%rsp 4889ec
109 DEFINE mov____%rbp,0x8(%rbp) 48896d
110 DEFINE mov____%rdi,%r8 4989f8
111 DEFINE mov____%rdi,%rax 4889f8
112 DEFINE mov____%rdi,%rcx 4889f9
113 DEFINE mov____%rdi,%rdi 4889ff
114 DEFINE mov____%rdi,0x32 48893c25
115 DEFINE mov____%rdi,0x32(%rbp) 4889bd
116 DEFINE mov____%rdi,0x8(%rbp) 48897d
117 DEFINE mov____%rdx,%rax 4889d0
118 DEFINE mov____%rdx,%rdi 4889d7
119 DEFINE mov____%rsi,(%rdi) 488937
120 DEFINE mov____%rsp,%rbp 4889e5
121 DEFINE mov____(%rax),%eax 8b00
122 DEFINE mov____(%rax),%rax 488b00
123 DEFINE mov____(%rax),%rsi 488b30
124 DEFINE mov____(%rdi),%edi 8b3f
125 DEFINE mov____(%rdi),%rdi 488b3f
126 DEFINE mov____0x32(%rbp),%rax 488b85
127 DEFINE mov____0x32(%rbp),%rdi 488bbd
128 DEFINE mov____0x32,%rax 488b0425
129 DEFINE mov____0x32,%rdi 488b3c25
130 DEFINE mov____0x8(%rbp),%eax 8b45
131 DEFINE mov____0x8(%rbp),%r10 4c8b55
132 DEFINE mov____0x8(%rbp),%r8 4c8b45
133 DEFINE mov____0x8(%rbp),%rax 488b45
134 DEFINE mov____0x8(%rbp),%rbp 488b6d
135 DEFINE mov____0x8(%rbp),%rbx 488b5d
136 DEFINE mov____0x8(%rbp),%rcx 488b4d
137 DEFINE mov____0x8(%rbp),%rdi 488b7d
138 DEFINE mov____0x8(%rbp),%rdx 488b55
139 DEFINE mov____0x8(%rbp),%rsi 488b75
140 DEFINE mov____0x8(%rbp),%rsp 488b65
141 DEFINE mov____0x8(%rdi),%rax 488b47
142 DEFINE mov____0x8(%rdi),%rbp 488b6f
143 DEFINE mov____0x8(%rdi),%rsp 488b67
144 DEFINE movsbq_%al,%rax 480fbec0
145 DEFINE movsbq_%dil,%rdi 480fbeff
146 DEFINE movsbq_(%rax),%rax 480fbe00
147 DEFINE movsbq_(%rdi),%rdi 480fbe3f
148 DEFINE movslq_%eax,%rax 4863c0
149 DEFINE movslq_%edi,%rdi 4863ff
150 DEFINE movslq_(%rax),%rax 486300
151 DEFINE movslq_(%rdi),%rdi 48633f
152 DEFINE movswq_%ax,%rax 480fbfc0
153 DEFINE movswq_%di,%rdi 480fbfff
154 DEFINE movswq_(%rax),%rax 480fbf00
155 DEFINE movswq_(%rdi),%rdi 480fbf3f
156 DEFINE movz___(%rax),%rax 480fb600
157 DEFINE movzbq_%al,%rax 480fb6c0
158 DEFINE movzbq_%dil,%rdi 480fb6ff
159 DEFINE movzbq_(%rax),%rax 480fb600
160 DEFINE movzbq_(%rdi),%rdi 480fb63f
161 DEFINE movzlq_%eax,%rax 89c0
162 DEFINE movzlq_%edi,%rdi 89ff
163 DEFINE movzlq_(%rax),%rax 8b00
164 DEFINE movzlq_(%rdi),%rdi 8b3f
165 DEFINE movzwq_%ax,%rax 480fb7c0
166 DEFINE movzwq_%di,%rdi 480fb7ff
167 DEFINE movzwq_(%rax),%rax 480fb700
168 DEFINE movzwq_(%rdi),%rdi 480fb73f
169 DEFINE mul____%rdi 48f7e7
171 DEFINE not____%rax 48f7d0
172 DEFINE not____%rdi 48f7d7
173 DEFINE or_____%rdi,%rax 4809f8
174 DEFINE pop____%rax 58
175 DEFINE pop____%rbp 5d
176 DEFINE pop____%rdi 5f
177 DEFINE pop____%rdx 5a
178 DEFINE push___$i32 68
179 DEFINE push___%r15 4157
180 DEFINE push___%rax 50
181 DEFINE push___%rbp 55
182 DEFINE push___%rdi 57
183 DEFINE push___%rdx 52
186 DEFINE seta___%al 0f97c0
187 DEFINE seta___%dil 400f97c7
188 DEFINE setae__%al 0f93c0
189 DEFINE setae__%dil 400f93c7
190 DEFINE setb___%al 0f92c0
191 DEFINE setb___%dil 400f92c7
192 DEFINE setbe__%al 0f96c0
193 DEFINE setbe__%dil 400f96c7
194 DEFINE sete___%al 0f94c0
195 DEFINE sete___%dil 400f94c7
196 DEFINE setg___%al 0f9fc0
197 DEFINE setg___%dil 400f9fc7
198 DEFINE setge__%al 0f9dc0
199 DEFINE setge__%dil 400f9dc7
200 DEFINE setl___%al 0f9cc0
201 DEFINE setl___%dil 400f9cc7
202 DEFINE setle__%al 0f9ec0
203 DEFINE setle__%dil 400f9ec7
204 DEFINE setne__%al 0f95c0
205 DEFINE shl____$i8,%rax 48c1e0
206 DEFINE shl____$i8,%rdi 48c1e7
207 DEFINE shl____%cl,%rax 48d3e0
208 DEFINE shl____%cl,%rdi 48d3e7
209 DEFINE shr____%cl,%rax 48d3e8
210 DEFINE sub____$i32,%rbp 4881ed
211 DEFINE sub____$i32,%rsp 4881ec
212 DEFINE sub____%rdi,%rax 4829f8
214 DEFINE test___%al,%al 84c0
215 DEFINE test___%rax,%rax 4885c0
216 DEFINE test___%rdi,%rdi 4885ff
217 DEFINE xchg___%rax,%rdi 4897
218 DEFINE xchg___%rax,(%rsp) 48870424
219 DEFINE xchg___%rdi,(%rsp) 48873c24
220 DEFINE xor____$i8,%ah 80f4
221 DEFINE xor____%rax,%rax 4831c0
222 DEFINE xor____%rdi,%rax 4831f8
223 DEFINE xor____%rdx,%rdx 4831d2
226 # Enough for all of Mes + Mes C Libray when using all registers, i.e.,
227 # non-reduced instruction set
228 #DEFINE add____$i32,%rdx 4881c2
229 #DEFINE add____$i32,%rsi 4881c6
230 #DEFINE add____$i8,%rcx 4883c1
231 #DEFINE add____$i8,%rdx 4883c2
232 #DEFINE add____$i8,%rsi 4883c6
233 #DEFINE add____$i8,(%rsi) 488306
234 #DEFINE add____%rdx,%rdx 4801d2
235 #DEFINE add____%rdx,%rsi 4801d6
236 #DEFINE add____%rsi,%rdi 4801f7
237 #DEFINE add____%rsi,%rsi 4801f6
238 #DEFINE addl___$i32,(%rsi) 8106
239 #DEFINE addl___$i8,(%rsi) 8306
240 #DEFINE and____$i32,%rsi 4881e6
241 #DEFINE idiv___%rcx 48f7f9
242 #DEFINE idiv___%rsi 48f7fe
243 #DEFINE mov____$i32,%r8 49c7c0
244 #DEFINE mov____$i32,%r9 49c7c1
245 #DEFINE mov____$i32,%rcx 48c7c1
246 #DEFINE mov____$i32,%rdx 48c7c2
247 #DEFINE mov____$i32,%rsi 48c7c6
248 #DEFINE mov____%dil,(%rsi) 40883e
249 #DEFINE mov____%edi,(%rsi) 893e
250 #DEFINE mov____%r8,%r8 4d89c0
251 #DEFINE mov____%r8,0x8(%rbp) 4c8945
252 #DEFINE mov____%r9,%r9 4d89c9
253 #DEFINE mov____%r9,%rdi 4c89cf
254 #DEFINE mov____%r9,0x8(%rbp) 4c894d
255 #DEFINE mov____%rax,%rbx 4889c3
256 #DEFINE mov____%rax,%rcx 4889c1
257 #DEFINE mov____%rax,%rdx 4889c2
258 #DEFINE mov____%rax,%rsi 4889c6
259 #DEFINE mov____%rbp,%rcx 4889e9
260 #DEFINE mov____%rbp,%rdx 4889ea
261 #DEFINE mov____%rbp,%rsi 4889ee
262 #DEFINE mov____%rcx,%rcx 4889c9
263 #DEFINE mov____%rcx,%rdi 4889cf
264 #DEFINE mov____%rcx,%rdx 4889ca
265 #DEFINE mov____%rcx,%rsi 4889ce
266 #DEFINE mov____%rcx,0x8(%rbp) 48894d
267 #DEFINE mov____%rdi,%rdx 4889fa
268 #DEFINE mov____%rdi,%rsi 4889fe
269 #DEFINE mov____%rdx,%rcx 4889d1
270 #DEFINE mov____%rdx,%rdx 4889d2
271 #DEFINE mov____%rdx,%rsi 4889d6
272 #DEFINE mov____%rdx,0x8(%rbp) 488955
273 #DEFINE mov____%rsi,%rax 4889f0
274 #DEFINE mov____%rsi,%rcx 4889f1
275 #DEFINE mov____%rsi,%rdi 4889f7
276 #DEFINE mov____%rsi,%rdx 4889f2
277 #DEFINE mov____%rsi,%rsi 4889f6
278 #DEFINE mov____%rsi,0x32 48893425
279 #DEFINE mov____%rsi,0x8(%rbp) 488975
280 #DEFINE mov____%rsi,0x8(%rdi) 488977
281 #DEFINE mov____(%rdx),%edx 8b12
282 #DEFINE mov____(%rdx),%rdx 488b12
283 #DEFINE mov____(%rsi),%rsi 488b36
284 #DEFINE mov____0x32(%rbp),%rcx 488b8d
285 #DEFINE mov____0x32(%rbp),%rdx 488b95
286 #DEFINE mov____0x32(%rbp),%rsi 488bb5
287 #DEFINE mov____0x32,%rcx 488b0c25
288 #DEFINE mov____0x32,%rdx 488b1425
289 #DEFINE mov____0x32,%rsi 488b3425
290 #DEFINE mov____0x8(%rax),%rsi 488b70
291 #DEFINE mov____0x8(%rdi),%rbx 488b5f
292 #DEFINE movsbq_%cl,%rcx 480fbec9
293 #DEFINE movsbq_%dl,%rdx 480fbed2
294 #DEFINE movsbq_%sil,%rsi 480fbef6
295 #DEFINE movslq_%ecx,%rcx 4863c9
296 #DEFINE movslq_%edx,%rdx 4863d2
297 #DEFINE movslq_%esi,%rsi 4863f6
298 #DEFINE movswq_%si,%rsi 480fbff6
299 #DEFINE movzbq_%dl,%rdx 480fb6d2
300 #DEFINE movzbq_%sil,%rsi 480fb6f6
301 #DEFINE movzbq_(%rsi),%rsi 480fb636
302 #DEFINE movzlq_(%rdx),%rdx 8b12
303 #DEFINE movzlq_(%rsi),%rsi 8b36
304 #DEFINE movzwq_(%rsi),%rsi 480fb736
305 #DEFINE mul____%rbx 48f7e3
306 #DEFINE mul____%rcx 48f7e1
307 #DEFINE mul____%rdx 48f7e2
308 #DEFINE mul____%rsi 48f7e6
309 #DEFINE or_____%rdx,%rsi 4809d6
310 #DEFINE or_____%rsi,%rdi 4809f7
311 #DEFINE pop____%rcx 59
312 #DEFINE pop____%rsi 5e
313 #DEFINE push___%rcx 51
314 #DEFINE push___%rsi 56
315 #DEFINE shl____$i8,%rsi 48c1e6
316 #DEFINE shl____%cl,%rsi 48d3e6
317 #DEFINE sub____$i32,%rsi 4881ee
318 #DEFINE sub____%rcx,%rdx 4829ca
319 #DEFINE sub____%rdx,%rsi 4829d6
320 #DEFINE sub____%rsi,%rdi 4829f7
321 #DEFINE test___%rdx,%rdx 4885d2
322 #DEFINE xchg___%rdi,%rsi 4887fe
323 #DEFINE xchg___%rdx,%rcx 4887d1
324 #DEFINE xchg___%rsi,%rdx 4887f2
326 DEFINE SYS_write 01000000
327 DEFINE SYS_exit 3c000000