1
2
3
4
5
6
7 package main
8
9 import (
10 "sort"
11 "strings"
12 )
13
14 func format(insts []*instruction) {
15
16
17
18 sort.Sort(bySyntax(insts))
19 needSize := make(map[string]bool)
20 for i := 0; i < 2; i++ {
21 seen := make(map[string]bool)
22 for _, inst := range insts {
23 if hasTag(inst, "pseudo") || hasTag(inst, "pseudo64") {
24 continue
25 }
26 switch i {
27 case 0:
28 if inst.valid32 != "V" {
29 continue
30 }
31 case 1:
32 if inst.valid64 != "V" {
33 continue
34 }
35 }
36 unsized := stripSize.Replace(inst.syntax)
37 if seen[unsized] {
38 op, _ := splitSyntax(inst.syntax)
39 needSize[op] = true
40 }
41 seen[unsized] = true
42 }
43 }
44
45 for _, inst := range insts {
46 op, _ := splitSyntax(inst.syntax)
47 if needSize[op] || forceNeedSize[op] {
48 inst.multisize = "Y"
49 }
50 }
51
52
53 for _, inst := range insts {
54 if inst.multisize != "Y" {
55 continue
56 }
57 op, args := splitSyntax(inst.syntax)
58 Args:
59 for i := startArg[op]; i < len(args); i++ {
60 switch args[i] {
61 case "AL", "r8", "r8op", "r/m8":
62 inst.datasize = 8
63 break Args
64 case "AX", "r16", "r16op", "r/m16":
65 inst.datasize = 16
66 break Args
67 case "EAX", "r32", "r32op", "r/m32", "rmr32", "m32fp", "m32int":
68 inst.datasize = 32
69 break Args
70 case "RAX", "r64", "r64op", "r/m64", "rmr64", "m64fp", "m64int":
71 inst.datasize = 64
72 break Args
73 case "m80fp":
74 inst.datasize = 80
75 break Args
76 case "xmm2/m128":
77 inst.datasize = 128
78 break Args
79 case "ymm2/m256":
80 inst.datasize = 256
81 break Args
82 }
83 }
84 }
85
86
87
88
89 for _, inst := range insts {
90 op, args := splitSyntax(inst.syntax)
91 intelOp := op
92 op = strings.ToLower(op)
93 if custom, ok := gnuOpcode[inst.syntax]; ok {
94 op = custom
95 } else {
96 if inst.multisize == "Y" {
97 suffix := defaultSizeSuffix[inst.datasize]
98 if custom, ok := gnuSizeSuffix[op]; ok {
99 suffix = custom[inst.datasize]
100 }
101 op += suffix
102 }
103 }
104 switch intelOp {
105 case "BOUND", "ENTER":
106
107 default:
108 for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
109 args[i], args[j] = args[j], args[i]
110 }
111 }
112 inst.gnuSyntax = joinSyntax(op, args)
113 }
114
115
116
117
118
119 for _, inst := range insts {
120 intelOp, args := splitSyntax(inst.syntax)
121
122
123 op, _ := splitSyntax(inst.gnuSyntax)
124 op = strings.ToUpper(op)
125 if custom, ok := goOpcode[inst.syntax]; ok {
126 op = custom
127 } else if custom, ok := goOpcode[intelOp]; ok {
128 op = custom
129 } else if custom, ok := goOpcode[op]; ok {
130 op = custom
131 } else if suffix, ok := goSizeSuffix[op]; ok {
132 op += suffix[inst.datasize]
133 }
134
135 switch intelOp {
136 case "CMP":
137
138 case "CMPPD", "CMPPS", "CMPSD", "CMPSS":
139
140 if len(args) == 3 {
141 args[0], args[1], args[2] = args[2], args[0], args[1]
142 break
143 }
144 fallthrough
145 default:
146 for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
147 args[i], args[j] = args[j], args[i]
148 }
149 }
150 inst.goSyntax = joinSyntax(op, args)
151 }
152 }
153
154 var forceNeedSize = map[string]bool{
155 "SAL": true,
156 }
157
158 var stripSize = strings.NewReplacer(
159 "rel8", "rel8",
160 "rel16", "rel16",
161 "rel32", "rel32",
162 "8", "#",
163 "16", "#",
164 "32", "#",
165 "64", "#",
166 "xmm2/m128", "xy/#",
167 "ymm2/m256", "xy/#",
168 "EAX", "AX",
169 )
170
171 var defaultSizeSuffix = map[int]string{
172 8: "b",
173 16: "w",
174 32: "l",
175 64: "q",
176 }
177
178 var gnuSizeSuffix = map[string]map[int]string{
179 "cvtsd2si": {64: "q"},
180 "cvtss2si": {64: "q"},
181 "cvttsd2si": {64: "q"},
182 "cvttss2si": {64: "q"},
183 "vcvtsd2si": {64: "q"},
184 "vcvtss2si": {64: "q"},
185 "vcvttsd2si": {64: "q"},
186 "vcvttss2si": {64: "q"},
187
188 "vcvtpd2dq": {128: "x", 256: "y"},
189 "vcvtpd2ps": {128: "x", 256: "y"},
190 "vcvttpd2dq": {128: "x", 256: "y"},
191 "vcvttpd2ps": {128: "x", 256: "y"},
192
193 "fadd": {32: "s", 64: "l"},
194 "fcom": {32: "s", 64: "l"},
195 "fcomp": {32: "s", 64: "l"},
196 "fdiv": {32: "s", 64: "l"},
197 "fdivr": {32: "s", 64: "l"},
198 "fmul": {32: "s", 64: "l"},
199 "fsub": {32: "s", 64: "l"},
200 "fsubr": {32: "s", 64: "l"},
201
202 "fld": {32: "s", 64: "l", 80: "t"},
203 "fst": {32: "s", 64: "l", 80: "t"},
204 "fstp": {32: "s", 64: "l", 80: "t"},
205
206 "fiadd": {32: "l"},
207 "ficom": {32: "l"},
208 "ficomp": {32: "l"},
209 "fidiv": {32: "l"},
210 "fidivr": {32: "l"},
211 "fimul": {32: "l"},
212 "fist": {32: "l"},
213 "fisub": {32: "l"},
214 "fisubr": {32: "l"},
215
216 "fild": {32: "l", 64: "ll"},
217 "fistp": {32: "l", 64: "ll"},
218 "fisttp": {32: "l", 64: "ll"},
219
220 "fldenv": {64: "l"},
221
222
223
224 "bswap": {},
225 "rdfsbase": {},
226 "rdgsbase": {},
227 "rdrand": {},
228 "rdseed": {},
229 "wrfsbase": {},
230 "wrgsbase": {},
231 }
232
233 var gnuOpcode = map[string]string{
234
235 "CBW": "cbtw",
236 "CDQ": "cltd",
237 "CDQE": "cltq",
238 "CMPSD": "cmpsl",
239 "CQO": "cqto",
240 "CWD": "cwtd",
241 "CWDE": "cwtl",
242 "INSD": "insl",
243 "LODSD": "lodsl",
244 "MOVSD": "movsl",
245 "OUTSD": "outsl",
246 "PUSHAD": "pushal",
247 "PUSHFD": "pushfl",
248 "POPAD": "popal",
249 "POPFD": "popfl",
250 "STOSD": "stosl",
251 "XLATB": "xlat",
252 "POPA": "popaw",
253 "POPF": "popfw",
254 "PUSHA": "pushaw",
255 "PUSHF": "pushfw",
256 "SCASD": "scasl",
257
258
259
260 "FDIV ST(i), ST(0)": "fdivr",
261 "FDIVR ST(i), ST(0)": "fdiv",
262 "FDIVP ST(i), ST(0)": "fdivrp",
263 "FDIVRP ST(i), ST(0)": "fdivp",
264 "FSUB ST(i), ST(0)": "fsubr",
265 "FSUBR ST(i), ST(0)": "fsub",
266 "FSUBP ST(i), ST(0)": "fsubrp",
267 "FSUBRP ST(i), ST(0)": "fsubp",
268
269 "MOV r64op, imm64": "movabsq",
270 "MOV moffs64, RAX": "movabsq",
271 "MOV RAX, moffs64": "movabsq",
272
273 "MOV moffs8, AL": "movb/movb/movabsb",
274 "MOV AL, moffs8": "movb/movb/movabsb",
275
276 "LGDT m16&32": "lgdtw/lgdtl",
277 "LIDT m16&32": "lidtw/lidtl",
278 "SGDT m": "sgdtw/sgdtl/sgdt",
279 "SIDT m": "sidtw/sidtl/sidt",
280 "LEAVE": "leavew/leavel/leaveq",
281
282 "MOVBE r16, m16": "movbeww",
283 "MOVBE m16, r16": "movbeww",
284 "MOVBE m32, r32": "movbell",
285 "MOVBE r32, m32": "movbell",
286 "MOVBE m64, r64": "movbeqq",
287 "MOVBE r64, m64": "movbeqq",
288
289 "MOVSX r16, r/m16": "movsww",
290 "MOVSX r16, r/m8": "movsbw",
291 "MOVSX r32, r/m16": "movswl",
292 "MOVSX r32, r/m8": "movsbl",
293 "MOVSX r64, r/m16": "movswq",
294 "MOVSX r64, r/m8": "movsbq",
295 "MOVSXD r64, r/m32": "movslq",
296 "MOVZX r16, r/m16": "movzww",
297 "MOVZX r16, r/m8": "movzbw",
298 "MOVZX r32, r/m16": "movzwl",
299 "MOVZX r32, r/m8": "movzbl",
300 "MOVZX r64, r/m16": "movzwq",
301 "MOVZX r64, r/m8": "movzbq",
302
303 "CALL r/m16": "callw*",
304 "CALL r/m32": "calll*",
305 "CALL r/m64": "callq*",
306
307 "JMP r/m16": "jmpw*",
308 "JMP r/m32": "jmpl*",
309 "JMP r/m64": "jmpq*",
310
311 "CALL_FAR m16:16": "lcallw*",
312 "CALL_FAR m16:32": "lcalll*",
313 "CALL_FAR m16:64": "lcallq*",
314
315 "JMP_FAR m16:16": "ljmpw*",
316 "JMP_FAR m16:32": "ljmpl*",
317 "JMP_FAR m16:64": "ljmpq*",
318
319 "CALL_FAR ptr16:16": "lcallw",
320 "CALL_FAR ptr16:32": "lcalll",
321 "JMP_FAR ptr16:16": "ljmpw",
322 "JMP_FAR ptr16:32": "ljmpl",
323
324 "STR r32/m16": "str{l/w}",
325 "SMSW r32/m16": "smsw{l/w}",
326 "SLDT r32/m16": "sldt{l/w}",
327 "MOV Sreg, r32/m16": "mov{l/w}",
328 "MOV r32/m16, Sreg": "mov{l/w}",
329
330 "STR r64/m16": "str{q/w}",
331 "SMSW r64/m16": "smsw{q/w}",
332 "SLDT r64/m16": "sldt{q/w}",
333 "MOV Sreg, r64/m16": "mov{q/w}",
334 "MOV r64/m16, Sreg": "mov{q/w}",
335
336 "FLDENV m14/28byte": "fldenvs/fldenvl",
337 "FNSAVE m94/108byte": "fnsaves/fnsavel",
338 "FNSTENV m14/28byte": "fnstenvs/fnstenvl",
339 "FRSTOR m94/108byte": "frstors/frstorl",
340
341 "IRETD": "iretl",
342 "IRET": "iretw",
343 "RET_FAR imm16u": "lretw/lretl/lretl",
344 "RET_FAR": "lretw/lretl/lretl",
345 "ENTER imm16, imm8b": "enterw/enterl/enterq",
346 "RET": "retw/retl/retq",
347 "SYSRET": "sysretw/sysretl/sysretl",
348
349 "RET imm16u": "retw/retl/retq",
350
351 "PUSH CS": "pushw/pushl/pushq",
352 "PUSH DS": "pushw/pushl/pushq",
353 "PUSH ES": "pushw/pushl/pushq",
354 "PUSH FS": "pushw/pushl/pushq",
355 "PUSH GS": "pushw/pushl/pushq",
356 "PUSH SS": "pushw/pushl/pushq",
357
358 "PUSH imm16": "pushw",
359
360 "POP CS": "popw/popl/popq",
361 "POP DS": "popw/popl/popq",
362 "POP ES": "popw/popl/popq",
363 "POP FS": "popw/popl/popq",
364 "POP GS": "popw/popl/popq",
365 "POP SS": "popw/popl/popq",
366
367 "PUSH imm32": "-/pushl/pushq",
368 "PUSH imm8": "pushw/pushl/pushq",
369 }
370
371 var startArg = map[string]int{
372 "CRC32": 1,
373 }
374
375 var goSizeSuffix = map[string]map[int]string{
376 "BSWAP": {16: "W", 32: "L", 64: "Q"},
377 }
378
379 var goOpcode = map[string]string{
380
381 "CBW": "CBW",
382 "CDQ": "CDQ",
383 "CDQE": "CDQE",
384 "CQO": "CQO",
385 "CWD": "CWD",
386 "CWDE": "CWDE",
387 "SYSRET": "SYSRET",
388 "MOVABSQ": "MOVQ",
389
390
391 "CVTPD2DQ": "CVTPD2PL",
392 "CVTDQ2PD": "CVTPL2PD",
393 "CVTDQ2PS": "CVTPL2PS",
394 "CVTPS2DQ": "CVTPS2PL",
395 "CVTSD2SI": "CVTSD2SL",
396 "CVTSD2SIQ": "CVTSD2SQ",
397 "CVTSI2SDL": "CVTSL2SD",
398 "CVTSI2SDQ": "CVTSQ2SD",
399 "CVTSI2SSL": "CVTSL2SS",
400 "CVTSI2SSQ": "CVTSQ2SS",
401 "CVTSS2SI": "CVTSS2SL",
402 "CVTSS2SIQ": "CVTSS2SQ",
403 "CVTTPD2DQ": "CVTTPD2PL",
404 "CVTTPS2DQ": "CVTTPS2PL",
405 "CVTTSD2SI": "CVTTSD2SL",
406 "CVTTSD2SIQ": "CVTTSD2SQ",
407 "CVTTSS2SI": "CVTTSS2SL",
408 "CVTTSS2SIQ": "CVTTSS2SQ",
409
410 "LOOPE": "LOOPEQ",
411 "MASKMOVDQU": "MASKMOVOU",
412 "MOVDQA": "MOVO",
413 "MOVDQU": "MOVOU",
414 "MOVNTDQ": "MOVNTO",
415 "MOVQ2DQ": "MOVQOZX",
416 "MOVDQ2Q": "MOVQ",
417 "MOVSBL": "MOVBLSX",
418 "MOVSBQ": "MOVBQSX",
419 "MOVSBW": "MOVBWSX",
420 "MOVSLQ": "MOVLQSX",
421 "MOVSWL": "MOVWLSX",
422 "MOVSWQ": "MOVWQSX",
423 "MOVZBL": "MOVBLZX",
424 "MOVZBQ": "MOVBQZX",
425 "MOVZBW": "MOVBWZX",
426 "MOVZLQ": "MOVLQZX",
427 "MOVZWL": "MOVWLZX",
428 "MOVZWQ": "MOVWQZX",
429 "PACKSSDW": "PACKSSLW",
430 "PADDD": "PADDL",
431 "PCMPEQD": "PCMPEQL",
432 "PCMPGTD": "PCMPGTL",
433 "PMADDWD": "PMADDWL",
434 "PMULUDQ": "PMULULQ",
435 "PSLLD": "PSLLL",
436 "PSLLDQ": "PSLLO",
437 "PSRAD": "PSRAL",
438 "PSRLD": "PSRLL",
439 "PSRLDQ": "PSRLO",
440 "PSUBD": "PSUBL",
441 "PUNPCKLWD": "PUNPCKLWL",
442 "PUNPCKHDQ": "PUNPCKHLQ",
443 "PUNPCKHWD": "PUNPCKHWL",
444 "PUNPCKLDQ": "PUNPCKLLQ",
445 "PUSHA": "PUSHAW",
446 "PUSHAD": "PUSHAL",
447 "PUSHF": "PUSHFW",
448 "PUSHFD": "PUSHFL",
449 "RET_FAR": "RETFW/RETFL/RETFQ",
450 "CALLQ": "CALL",
451 "CALLL": "CALL",
452 "CALLW": "CALL",
453 "MOVSXDW": "MOVWQSX",
454 "MOVSXDL": "MOVLQSX",
455
456 "SHLDW": "SHLW",
457 "SHLDL": "SHLL",
458 "SHLDQ": "SHLQ",
459 "SHRDW": "SHRW",
460 "SHRDL": "SHRL",
461 "SHRDQ": "SHRQ",
462
463 "CMOVAW": "CMOVWHI",
464 "CMOVAEW": "CMOVWCC",
465 "CMOVBW": "CMOVWCS",
466 "CMOVBEW": "CMOVWLS",
467 "CMOVCW": "CMOVWCS",
468 "CMOVCCW": "CMOVWCC",
469 "CMOVCSW": "CMOVWCS",
470 "CMOVEW": "CMOVWEQ",
471 "CMOVEQW": "CMOVWEQ",
472 "CMOVGW": "CMOVWGT",
473 "CMOVGEW": "CMOVWGE",
474 "CMOVGTW": "CMOVWGT",
475 "CMOVHIW": "CMOVWHI",
476 "CMOVHSW": "CMOVWCC",
477 "CMOVLW": "CMOVWLT",
478 "CMOVLEW": "CMOVWLE",
479 "CMOVLSW": "CMOVWLS",
480 "CMOVLTW": "CMOVWLT",
481 "CMOVLOW": "CMOVWCS",
482 "CMOVMIW": "CMOVWMI",
483 "CMOVNAW": "CMOVWLS",
484 "CMOVNAEW": "CMOVWCS",
485 "CMOVNBW": "CMOVWCC",
486 "CMOVNBEW": "CMOVWHI",
487 "CMOVNCW": "CMOVWCC",
488 "CMOVNEW": "CMOVWNE",
489 "CMOVNGW": "CMOVWLE",
490 "CMOVNGEW": "CMOVWLT",
491 "CMOVNLW": "CMOVWGE",
492 "CMOVNLEW": "CMOVWGT",
493 "CMOVNOW": "CMOVWOC",
494 "CMOVNPW": "CMOVWPC",
495 "CMOVNSW": "CMOVWPL",
496 "CMOVNZW": "CMOVWNE",
497 "CMOVOW": "CMOVWOS",
498 "CMOVOCW": "CMOVWOC",
499 "CMOVOSW": "CMOVWOS",
500 "CMOVPW": "CMOVWPS",
501 "CMOVPCW": "CMOVWPC",
502 "CMOVPEW": "CMOVWPS",
503 "CMOVPOW": "CMOVWPC",
504 "CMOVPSW": "CMOVWPS",
505 "CMOVSW": "CMOVWMI",
506 "CMOVZW": "CMOVWEQ",
507
508 "CMOVAL": "CMOVLHI",
509 "CMOVAEL": "CMOVLCC",
510 "CMOVBL": "CMOVLCS",
511 "CMOVBEL": "CMOVLLS",
512 "CMOVCL": "CMOVLCS",
513 "CMOVCCL": "CMOVLCC",
514 "CMOVCSL": "CMOVLCS",
515 "CMOVEL": "CMOVLEQ",
516 "CMOVEQL": "CMOVLEQ",
517 "CMOVGL": "CMOVLGT",
518 "CMOVGEL": "CMOVLGE",
519 "CMOVGTL": "CMOVLGT",
520 "CMOVHIL": "CMOVLHI",
521 "CMOVHSL": "CMOVLCC",
522 "CMOVLL": "CMOVLLT",
523 "CMOVLEL": "CMOVLLE",
524 "CMOVLSL": "CMOVLLS",
525 "CMOVLTL": "CMOVLLT",
526 "CMOVLOL": "CMOVLCS",
527 "CMOVMIL": "CMOVLMI",
528 "CMOVNAL": "CMOVLLS",
529 "CMOVNAEL": "CMOVLCS",
530 "CMOVNBL": "CMOVLCC",
531 "CMOVNBEL": "CMOVLHI",
532 "CMOVNCL": "CMOVLCC",
533 "CMOVNEL": "CMOVLNE",
534 "CMOVNGL": "CMOVLLE",
535 "CMOVNGEL": "CMOVLLT",
536 "CMOVNLL": "CMOVLGE",
537 "CMOVNLEL": "CMOVLGT",
538 "CMOVNOL": "CMOVLOC",
539 "CMOVNPL": "CMOVLPC",
540 "CMOVNSL": "CMOVLPL",
541 "CMOVNZL": "CMOVLNE",
542 "CMOVOL": "CMOVLOS",
543 "CMOVOCL": "CMOVLOC",
544 "CMOVOSL": "CMOVLOS",
545 "CMOVPL": "CMOVLPS",
546 "CMOVPCL": "CMOVLPC",
547 "CMOVPEL": "CMOVLPS",
548 "CMOVPOL": "CMOVLPC",
549 "CMOVPSL": "CMOVLPS",
550 "CMOVSL": "CMOVLMI",
551 "CMOVZL": "CMOVLEQ",
552
553 "CMOVAQ": "CMOVQHI",
554 "CMOVAEQ": "CMOVQCC",
555 "CMOVBQ": "CMOVQCS",
556 "CMOVBEQ": "CMOVQLS",
557 "CMOVCQ": "CMOVQCS",
558 "CMOVCCQ": "CMOVQCC",
559 "CMOVCSQ": "CMOVQCS",
560 "CMOVEQ": "CMOVQEQ",
561 "CMOVEQQ": "CMOVQEQ",
562 "CMOVGQ": "CMOVQGT",
563 "CMOVGEQ": "CMOVQGE",
564 "CMOVGTQ": "CMOVQGT",
565 "CMOVHIQ": "CMOVQHI",
566 "CMOVHSQ": "CMOVQCC",
567 "CMOVLQ": "CMOVQLT",
568 "CMOVLEQ": "CMOVQLE",
569 "CMOVLSQ": "CMOVQLS",
570 "CMOVLTQ": "CMOVQLT",
571 "CMOVLOQ": "CMOVQCS",
572 "CMOVMIQ": "CMOVQMI",
573 "CMOVNAQ": "CMOVQLS",
574 "CMOVNAEQ": "CMOVQCS",
575 "CMOVNBQ": "CMOVQCC",
576 "CMOVNBEQ": "CMOVQHI",
577 "CMOVNCQ": "CMOVQCC",
578 "CMOVNEQ": "CMOVQNE",
579 "CMOVNGQ": "CMOVQLE",
580 "CMOVNGEQ": "CMOVQLT",
581 "CMOVNLQ": "CMOVQGE",
582 "CMOVNLEQ": "CMOVQGT",
583 "CMOVNOQ": "CMOVQOC",
584 "CMOVNPQ": "CMOVQPC",
585 "CMOVNSQ": "CMOVQPL",
586 "CMOVNZQ": "CMOVQNE",
587 "CMOVOQ": "CMOVQOS",
588 "CMOVOCQ": "CMOVQOC",
589 "CMOVOSQ": "CMOVQOS",
590 "CMOVPQ": "CMOVQPS",
591 "CMOVPCQ": "CMOVQPC",
592 "CMOVPEQ": "CMOVQPS",
593 "CMOVPOQ": "CMOVQPC",
594 "CMOVPSQ": "CMOVQPS",
595 "CMOVSQ": "CMOVQMI",
596 "CMOVZQ": "CMOVQEQ",
597
598 "SETA": "SETHI",
599 "SETAE": "SETCC",
600 "SETB": "SETCS",
601 "SETBE": "SETLS",
602 "SETC": "SETCS",
603 "SETCC": "SETCC",
604 "SETCS": "SETCS",
605 "SETE": "SETEQ",
606 "SETEQ": "SETEQ",
607 "SETG": "SETGT",
608 "SETGE": "SETGE",
609 "SETGT": "SETGT",
610 "SETHI": "SETHI",
611 "SETHS": "SETCC",
612 "SETL": "SETLT",
613 "SETLE": "SETLE",
614 "SETLS": "SETLS",
615 "SETLT": "SETLT",
616 "SETLO": "SETCS",
617 "SETMI": "SETMI",
618 "SETNA": "SETLS",
619 "SETNAE": "SETCS",
620 "SETNB": "SETCC",
621 "SETNBE": "SETHI",
622 "SETNC": "SETCC",
623 "SETNE": "SETNE",
624 "SETNG": "SETLE",
625 "SETNGE": "SETLT",
626 "SETNL": "SETGE",
627 "SETNLE": "SETGT",
628 "SETNO": "SETOC",
629 "SETNP": "SETPC",
630 "SETNS": "SETPL",
631 "SETNZ": "SETNE",
632 "SETO": "SETOS",
633 "SETOC": "SETOC",
634 "SETOS": "SETOS",
635 "SETP": "SETPS",
636 "SETPC": "SETPC",
637 "SETPE": "SETPS",
638 "SETPO": "SETPC",
639 "SETPS": "SETPS",
640 "SETS": "SETMI",
641 "SETZ": "SETEQ",
642
643 "FADD": "FADDD",
644 "FADDP": "FADDDP",
645 "FADDS": "FADDF",
646 "FCOM": "FCOMD",
647 "FCOMS": "FCOMF",
648 "FCOMPS": "FCOMFP",
649 "FDIV": "FDIVD",
650 "FDIVS": "FDIVF",
651 "FDIVRS": "FDIVFR",
652 }
653
View as plain text