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