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