4 from pyparsing
import *
7 from collections
import defaultdict
22 LBRACK = Suppress(
"[")
23 RBRACK = Suppress(
"]")
26 LPARENT = Suppress(
"(")
27 RPARENT = Suppress(
")")
37 return (t[0] & t[1]) + t[2]
40 if not t
in mn_sh4.regs.all_regs_ids_byname:
43 r = mn_sh4.regs.all_regs_ids_byname[t]
50 my_var_parser =
parse_ast(ast_id2expr, ast_int2expr)
51 base_expr.setParseAction(my_var_parser)
53 int_or_expr = base_expr
55 ref_pc = Group(LPARENT + regi_pc.parser + COMMA +
56 int_or_expr + RPARENT).setParseAction(parse_deref_pcimm)
58 LPARENT + regi_pc.parser + AND + int_or_expr +
59 COMMA + int_or_expr + RPARENT).setParseAction(parse_pcandimmimm)
62 pcdisp = Group(regi_pc.parser + AND + int_or_expr +
63 PLUS + int_or_expr).setParseAction(parse_pcandimmimm)
98 deref_pc = Group(DEREF + ref_pc).setParseAction(parse_deref_mem)
99 deref_pcimm = Group(DEREF + ref_pcandimm).setParseAction(parse_deref_mem)
101 dgpregs_base = Group(DEREF + gpregs.parser).setParseAction(parse_deref_mem)
102 dgpregs_predec = Group(
103 DEREF + MINUS + gpregs.parser).setParseAction(parse_predec)
104 dgpregs_postinc = Group(
105 DEREF + gpregs.parser + PLUS).setParseAction(parse_postinc)
107 dgpregs = dgpregs_base | dgpregs_predec | dgpregs_postinc
109 d_gpreg_gpreg = Group(DEREF +
110 LPARENT + gpregs.parser + COMMA + gpregs.parser + RPARENT
111 ).setParseAction(parse_regdisp)
112 dgpregs_p = dgpregs_predec | dgpregs_postinc
115 dgpregs_ir = Group(DEREF + LPARENT + gpregs.parser +
116 COMMA + int_or_expr + RPARENT).setParseAction(parse_regdisp)
117 dgpregs_ir |= d_gpreg_gpreg
119 dgbr_imm = Group(DEREF + LPARENT + regi_gbr.parser +
120 COMMA + int_or_expr + RPARENT).setParseAction(parse_regdisp)
122 dgbr_reg = Group(DEREF + LPARENT + regi_gbr.parser +
123 COMMA + gpregs.parser + RPARENT).setParseAction(parse_regreg)
130 class sh4_gpreg(sh4_reg):
132 parser = reg_info.parser
137 parser = reg_info.parser
142 parser = reg_info.parser
147 parser = reg_info.parser
152 parser = reg_info.parser
156 parser = dgpregs_base
159 start, stop = super(sh4_dgpreg, self).
fromstring(s, parser_result)
172 if not isinstance(e, ExprMem):
174 if not isinstance(e.arg, ExprId):
176 v = gpregs.expr.index(e.arg)
185 start, stop = super(sh4_dgpregpinc, self).
fromstring(s, parser_result)
186 if self.
expr is None:
188 if not isinstance(self.expr.arg, ExprOp):
190 if self.expr.arg.op != self.op:
202 if not isinstance(e, ExprMem):
209 if not r
in gpregs.expr:
211 v = gpregs.expr.index(r)
217 parser = dgpregs_postinc
237 if not isinstance(e, ExprMem):
239 if isinstance(e.arg, ExprId):
240 v = gpregs.expr.index(e.arg)
242 elif isinstance(e.arg, ExprOp):
246 if not isinstance(res[jra], ExprId):
248 if not isinstance(res[jrb], ExprInt):
250 d = int(res[jrb].arg)
251 p.disp.value = d / (s / 8)
252 if not res[jra]
in gpregs.expr:
254 v = gpregs.expr.index(res[jra])
276 if not isinstance(self.
expr, ExprInt):
278 v = int(self.expr.arg)
279 if (1 << (self.l - 1)) & v:
280 v = -((0xffffffff ^ v) + 1)
282 self.
value = (v & 0xffffffff) & self.lmask
294 v = (int(v.arg) - 4) / 2
295 if not 0 < v <= 0xff:
303 if not isinstance(res[jra], ExprInt):
329 if not isinstance(res[jra], ExprInt):
331 self.
value = int(res[jra].arg) / (s / 8)
344 v = (int(v.arg) - 4) / 4
345 if not 0 < v <= 0xff:
354 if not isinstance(res[jra], ExprInt):
374 if not isinstance(res[jra], ExprInt):
376 v = (int(res[jra].arg) - 4) / 4
392 super(instruction_sh4, self).
__init__(*args, **kargs)
395 return self.name.startswith(
'J')
399 if isinstance(e, ExprId)
or isinstance(e, ExprInt):
401 assert(isinstance(e, ExprMem))
404 if isinstance(e, ExprOp):
406 s =
'-%s' % e.args[0]
407 elif e.op ==
"postinc":
408 s =
'%s+' % e.args[0]
410 s =
','.join([str(x).replace(
'(',
'').replace(
')',
'')
414 elif isinstance(e, ExprId):
417 raise NotImplementedError(
'zarb arg2str')
422 def dstflow2label(self, symbol_pool):
424 if not isinstance(e, ExprInt):
426 if self.name == 'BLX':
427 ad = e.arg+8+self.offset
429 ad = e.arg+8+self.offset
430 l = symbol_pool.getby_offset_create(ad)
431 s = ExprId(l, e.size)
436 if self.name.startswith(
'J'):
444 return [self.
args[0]]
447 return self.
name ==
'JSR'
454 if self.offset
is None:
455 raise ValueError(
'symbol not resolved %s' % l)
456 if not isinstance(e, ExprInt):
457 log.debug(
'dyn dst %r', e)
459 off = e.arg - (self.offset + 4 + self.l)
462 raise ValueError(
'strange offset! %r' % off)
464 print 'final', self.
args[0]
467 args = [a
for a
in self.
args]
476 all_mn_mode = defaultdict(list)
477 all_mn_name = defaultdict(list)
478 all_mn_inst = defaultdict(list)
483 instruction = instruction_sh4
494 if n > bs.getlen() * 8:
495 raise ValueError(
'not enought bits %r %r' % (n, len(bs.bin) * 8))
498 c = cls.getbytes(bs, i)
516 n_offset = (offset & ~1) + 1 - offset % 2
517 out += bs.getbytes(n_offset, 1)
523 l = sum([x.l
for x
in fields])
524 assert l == 16,
"len %r" % l
528 return name.upper().replace(
'_',
'.')
533 return [(subcls, name, bases, dct, fields)]
536 v = super(mn_sh4, self).
value(mode)
537 return [x[::-1]
for x
in v]
552 parser = d_gpreg_gpreg
563 if not r
in gpregs.expr:
570 parser = dgpregs_base
573 rn =
bs(l=4, cls=(sh4_gpreg,), fname=
"rn")
574 rm =
bs(l=4, cls=(sh4_gpreg,), fname=
"rm")
577 d08_rn =
bs(l=4, cls=(sh4_dgpreg,), fname=
"rn", sz = 8)
578 d16_rn =
bs(l=4, cls=(sh4_dgpreg,), fname=
"rn", sz = 16)
579 d32_rn =
bs(l=4, cls=(sh4_dgpreg,), fname=
"rn", sz = 32)
580 d08_rm =
bs(l=4, cls=(sh4_dgpreg,), fname=
"rm", sz = 8)
581 d16_rm =
bs(l=4, cls=(sh4_dgpreg,), fname=
"rm", sz = 16)
582 d32_rm =
bs(l=4, cls=(sh4_dgpreg,), fname=
"rm", sz = 32)
585 brm =
bs(l=3, cls=(sh4_bgpreg,), fname=
"brm")
586 brn =
bs(l=3, cls=(sh4_bgpreg,), fname=
"brn")
588 d08rnimm =
bs(l=4, fname=
"rn", cls=(sh4_dgpreg_imm,), sz = 8)
589 d16rnimm =
bs(l=4, fname=
"rn", cls=(sh4_dgpreg_imm,), sz = 16)
590 d32rnimm =
bs(l=4, fname=
"rn", cls=(sh4_dgpreg_imm,), sz = 32)
592 d08rmimm =
bs(l=4, fname=
"rm", cls=(sh4_dgpreg_imm,), sz = 8)
593 d16rmimm =
bs(l=4, fname=
"rm", cls=(sh4_dgpreg_imm,), sz = 16)
594 d32rmimm =
bs(l=4, fname=
"rm", cls=(sh4_dgpreg_imm,), sz = 32)
596 btype =
bs(l=4, fname=
"btype", order=-1)
598 s08imm =
bs(l=8, cls=(sh4_simm,), fname=
"imm")
599 s12imm =
bs(l=12, cls=(sh4_simm,), fname=
"imm")
600 dpc16imm =
bs(l=8, cls=(sh4_dpc16imm,), fname=
"pcimm", sz=16)
601 dpc32imm =
bs(l=8, cls=(sh4_dpc32imm,), fname=
"pcimm", sz=32)
602 dimm4 =
bs(l=4, fname=
'disp', order=-1)
603 d08gbrimm8 =
bs(l=8, cls=(sh4_dgbrimm8,), fname=
'disp', sz=8)
604 d16gbrimm8 =
bs(l=8, cls=(sh4_dgbrimm8,), fname=
'disp', sz=16)
605 d32gbrimm8 =
bs(l=8, cls=(sh4_dgbrimm8,), fname=
'disp', sz=32)
607 pc32imm =
bs(l=8, cls=(sh4_pc32imm,), fname=
"pcimm")
609 d08rnpinc =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'postinc', sz=8, fname=
"rn")
610 d08rmpinc =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'postinc', sz=8, fname=
"rm")
612 d16rnpinc =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'postinc', sz=16, fname=
"rn")
613 d16rmpinc =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'postinc', sz=16, fname=
"rm")
615 d32rnpinc =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'postinc', sz=32, fname=
"rn")
616 d32rmpinc =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'postinc', sz=32, fname=
"rm")
618 d08rnpdec =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'predec', sz=8, fname=
"rn")
619 d08rmpdec =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'predec', sz=8, fname=
"rm")
621 d16rnpdec =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'predec', sz=16, fname=
"rn")
622 d16rmpdec =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'predec', sz=16, fname=
"rm")
624 d32rnpdec =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'predec', sz=32, fname=
"rn")
625 d32rmpdec =
bs(l=4, cls=(sh4_dgpregpinc,), op=
'predec', sz=32, fname=
"rm")
628 u08imm =
bs(l=8, cls=(sh4_imm,), fname=
"imm")
629 dr0gbr =
bs(l=0, cls=(bs_dr0gbr,), sz=8)
631 d08gpreg =
bs(l=4, cls=(bs_dgpreg,), sz=8)
632 d32gpreg =
bs(l=4, cls=(bs_dgpreg,), sz=32)
634 frn =
bs(l=4, cls=(sh4_freg,), fname=
"frn")
635 frm =
bs(l=4, cls=(sh4_freg,), fname=
"frm")
637 bd08r0gp =
bs(l=4, cls=(bs_dr0gp,), sz=8)
638 bd16r0gp =
bs(l=4, cls=(bs_dr0gp,), sz=16)
639 bd32r0gp =
bs(l=4, cls=(bs_dr0gp,), sz=32)
641 drn =
bs(l=3, cls=(sh4_dr,), fname=
"drn")
642 drm =
bs(l=3, cls=(sh4_dr,), fname=
"drm")
645 def addop(name, fields, args=None, alias=False):
646 dct = {
"fields": fields}
650 type(name, (mn_sh4,), dct)
652 addop(
"mov", [
bs(
'1110'), rn, s08imm], [s08imm, rn])
653 addop(
"mov_w", [
bs(
'1001'), rn, dpc16imm], [dpc16imm, rn])
654 addop(
"mov_l", [
bs(
'1101'), rn, dpc32imm], [dpc32imm, rn])
655 addop(
"mov", [
bs(
'0110', fname=
"opc"), rn, rm,
bs(
'0011')], [rm, rn])
656 addop(
"mov_b", [
bs(
'0010', fname=
"opc"), d08_rn, rm,
bs(
'0000')], [rm, d08_rn])
657 addop(
"mov_w", [
bs(
'0010', fname=
"opc"), d16_rn, rm,
bs(
'0001')], [rm, d16_rn])
658 addop(
"mov_l", [
bs(
'0010', fname=
"opc"), d32_rn, rm,
bs(
'0010')], [rm, d32_rn])
659 addop(
"mov_b", [
bs(
'0110', fname=
"opc"), rn, d08_rm,
bs(
'0000')], [d08_rm, rn])
660 addop(
"mov_w", [
bs(
'0110', fname=
"opc"), rn, d16_rm,
bs(
'0001')], [d16_rm, rn])
661 addop(
"mov_l", [
bs(
'0110', fname=
"opc"), rn, d32_rm,
bs(
'0010')], [d32_rm, rn])
663 [
bs(
'0010', fname=
"opc"), d08rnpdec, rm,
bs(
'0100')], [rm, d08rnpdec])
665 [
bs(
'0010', fname=
"opc"), d16rnpdec, rm,
bs(
'0101')], [rm, d16rnpdec])
667 [
bs(
'0010', fname=
"opc"), d32rnpdec, rm,
bs(
'0110')], [rm, d32rnpdec])
669 [
bs(
'0110', fname=
"opc"), rn, d08rmpinc,
bs(
'0100')], [rm, d08rnpinc])
671 [
bs(
'0110', fname=
"opc"), rn, d16rmpinc,
bs(
'0101')], [d16rmpinc, rn])
673 [
bs(
'0110', fname=
"opc"), rn, d32rmpinc,
bs(
'0110')], [d32rmpinc, rn])
674 addop(
"mov_b", [
bs(
'10000000', fname=
'opc'), bsr0, d08rnimm, dimm4])
675 addop(
"mov_w", [
bs(
'10000001', fname=
'opc'), bsr0, d16rnimm, dimm4])
676 addop(
"mov_l", [
bs(
'0001', fname=
'opc'), d32rnimm, rm, dimm4], [rm, d32rnimm])
677 addop(
"mov_b", [
bs(
'10000100', fname=
'opc'), d08rmimm, dimm4, bsr0])
678 addop(
"mov_w", [
bs(
'10000101', fname=
'opc'), d16rmimm, dimm4, bsr0])
679 addop(
"mov_l", [
bs(
'0101', fname=
'opc'), rn, d32rmimm, dimm4], [d32rmimm, rn])
681 [
bs(
'0000', fname=
'opc'), bd08r0gp, rm,
bs(
'0100')], [rm, bd08r0gp])
683 [
bs(
'0000', fname=
'opc'), bd16r0gp, rm,
bs(
'0101')], [rm, bd16r0gp])
685 [
bs(
'0000', fname=
'opc'), bd32r0gp, rm,
bs(
'0110')], [rm, bd32r0gp])
687 [
bs(
'0000', fname=
'opc'), rn, bd08r0gp,
bs(
'1100')], [bd08r0gp, rn])
689 [
bs(
'0000', fname=
'opc'), rn, bd16r0gp,
bs(
'1101')], [bd16r0gp, rn])
691 [
bs(
'0000', fname=
'opc'), rn, bd32r0gp,
bs(
'1110')], [bd32r0gp, rn])
693 addop(
"mov_b", [
bs(
'11000000'), bsr0, d08gbrimm8])
694 addop(
"mov_w", [
bs(
'11000001'), bsr0, d16gbrimm8])
695 addop(
"mov_l", [
bs(
'11000010'), bsr0, d32gbrimm8])
697 addop(
"mov_b", [
bs(
'11000100'), d08gbrimm8, bsr0])
698 addop(
"mov_w", [
bs(
'11000101'), d16gbrimm8, bsr0])
699 addop(
"mov_l", [
bs(
'11000110'), d32gbrimm8, bsr0])
701 addop(
"mov", [
bs(
'11000111'), pc32imm, bsr0])
703 addop(
"swapb", [
bs(
'0110'), rn, rm,
bs(
'1000')], [rm, rn])
704 addop(
"swapw", [
bs(
'0110'), rn, rm,
bs(
'1001')], [rm, rn])
705 addop(
"xtrct", [
bs(
'0010'), rn, rm,
bs(
'1101')], [rm, rn])
708 addop(
"add", [
bs(
'0011'), rn, rm,
bs(
'1100')], [rm, rn])
709 addop(
"add", [
bs(
'0111'), rn, s08imm], [s08imm, rn])
710 addop(
"addc", [
bs(
'0011'), rn, rm,
bs(
'1110')], [rm, rn])
711 addop(
"addv", [
bs(
'0011'), rn, rm,
bs(
'1111')], [rm, rn])
714 addop(
"cmpeq", [
bs(
'10001000'), s08imm, bsr0])
717 addop(
"cmpeq", [
bs(
'0011'), rn, rm,
bs(
'0000')], [rm, rn])
718 addop(
"cmphs", [
bs(
'0011'), rn, rm,
bs(
'0010')], [rm, rn])
719 addop(
"cmpge", [
bs(
'0011'), rn, rm,
bs(
'0011')], [rm, rn])
720 addop(
"cmphi", [
bs(
'0011'), rn, rm,
bs(
'0110')], [rm, rn])
721 addop(
"cmpgt", [
bs(
'0011'), rn, rm,
bs(
'0111')], [rm, rn])
724 addop(
"cmppz", [
bs(
'0100'), rn,
bs(
'00010001')])
725 addop(
"cmppl", [
bs(
'0100'), rn,
bs(
'00010101')])
726 addop(
"cmpstr", [
bs(
'0010'), rn, rm,
bs(
'1100')], [rm, rn])
729 addop(
"div1", [
bs(
'0011'), rn, rm,
bs(
'0100')], [rm, rn])
731 addop(
"div0s", [
bs(
'0010'), rn, rm,
bs(
'0111')], [rm, rn])
732 addop(
"div0u", [
bs(
'0000000000011001')])
734 addop(
"dmuls", [
bs(
'0011'), rn, rm,
bs(
'1101')], [rm, rn])
735 addop(
"dmulu", [
bs(
'0011'), rn, rm,
bs(
'0101')], [rm, rn])
737 addop(
"dt", [
bs(
'0100'), rn,
bs(
'00010000')])
740 addop(
"extsb", [
bs(
'0110'), rn, rm,
bs(
'1110')], [rm, rn])
741 addop(
"extsw", [
bs(
'0110'), rn, rm,
bs(
'1111')], [rm, rn])
742 addop(
"extub", [
bs(
'0110'), rn, rm,
bs(
'1100')], [rm, rn])
743 addop(
"extuw", [
bs(
'0110'), rn, rm,
bs(
'1101')], [rm, rn])
745 addop(
"mac_l", [
bs(
'0000', fname=
'opc'), d32rnpinc,
746 d32rmpinc,
bs(
'1111')], [d32rmpinc, d32rnpinc])
747 addop(
"mac_w", [
bs(
'0100', fname=
'opc'), d16rnpinc,
748 d16rmpinc,
bs(
'1111')], [d16rmpinc, d16rnpinc])
750 addop(
"mull", [
bs(
'0000'), rn, rm,
bs(
'0111')], [rm, rn])
751 addop(
"mulsw", [
bs(
'0010'), rn, rm,
bs(
'1111')], [rm, rn])
752 addop(
"muluw", [
bs(
'0010'), rn, rm,
bs(
'1110')], [rm, rn])
754 addop(
"neg", [
bs(
'0110'), rn, rm,
bs(
'1011')], [rm, rn])
755 addop(
"negc", [
bs(
'0110'), rn, rm,
bs(
'1010')], [rm, rn])
757 addop(
"sub", [
bs(
'0011'), rn, rm,
bs(
'1000')], [rm, rn])
758 addop(
"subc", [
bs(
'0011'), rn, rm,
bs(
'1010')], [rm, rn])
759 addop(
"subv", [
bs(
'0011'), rn, rm,
bs(
'1011')], [rm, rn])
761 addop(
"and", [
bs(
'0010'), rn, rm,
bs(
'1001')], [rm, rn])
762 addop(
"and", [
bs(
'11001001'), u08imm, bsr0])
763 addop(
"and_b", [
bs(
'11001101'), u08imm, dr0gbr])
765 addop(
"not", [
bs(
'0110'), rn, rm,
bs(
'0111')], [rm, rn])
767 addop(
"or", [
bs(
'0010'), rn, rm,
bs(
'1011')], [rm, rn])
769 addop(
"or", [
bs(
'11001011'), u08imm, bsr0])
770 addop(
"or_b", [
bs(
'11001111'), u08imm, dr0gbr])
772 addop(
"tas_b", [
bs(
'0100'), d08gpreg,
bs(
'00011011')])
773 addop(
"tst", [
bs(
'0010'), rn, rm,
bs(
'1000')], [rm, rn])
774 addop(
"tst", [
bs(
'11001000'), u08imm, bsr0])
775 addop(
"tst_b", [
bs(
'11001100'), u08imm, dr0gbr])
778 addop(
"xor", [
bs(
'0010'), rn, rm,
bs(
'1010')], [rm, rn])
779 addop(
"xor", [
bs(
'11001010'), u08imm, bsr0])
780 addop(
"xor_b", [
bs(
'11001110'), u08imm, dr0gbr])
782 addop(
"rotl", [
bs(
'0100'), rn,
bs(
'00000100')])
783 addop(
"rotr", [
bs(
'0100'), rn,
bs(
'00000101')])
784 addop(
"rotcl", [
bs(
'0100'), rn,
bs(
'00100100')])
785 addop(
"rotcr", [
bs(
'0100'), rn,
bs(
'00100101')])
787 addop(
"shad", [
bs(
'0100'), rn, rm,
bs(
'1100')], [rm, rn])
788 addop(
"shal", [
bs(
'0100'), rn,
bs(
'00100000')])
789 addop(
"shar", [
bs(
'0100'), rn,
bs(
'00100001')])
790 addop(
"shld", [
bs(
'0100'), rn, rm,
bs(
'1101')], [rm, rn])
792 addop(
"shll", [
bs(
'0100'), rn,
bs(
'00000000')])
793 addop(
"shlr", [
bs(
'0100'), rn,
bs(
'00000001')])
794 addop(
"shll2", [
bs(
'0100'), rn,
bs(
'00001000')])
795 addop(
"shlr2", [
bs(
'0100'), rn,
bs(
'00001001')])
796 addop(
"shll8", [
bs(
'0100'), rn,
bs(
'00011000')])
797 addop(
"shlr8", [
bs(
'0100'), rn,
bs(
'00011001')])
798 addop(
"shll16", [
bs(
'0100'), rn,
bs(
'00101000')])
799 addop(
"shlr16", [
bs(
'0100'), rn,
bs(
'00101001')])
802 addop(
"bf", [
bs(
'10001011'), s08imm])
810 def dstflow2label(self, symbol_pool):
811 e = self.args[0].expr
812 ad = e.arg*2+4+self.offset
813 l = symbol_pool.getby_offset_create(ad)
814 s = ExprId(l, e.size)
815 self.args[0].expr = s
818 addop(
"bfs", [
bs(
'10001111'), s08imm])
822 addop(
"bt", [
bs(
'10001001'), s08imm])
824 addop(
"bts", [
bs(
'10001101'), s08imm])
826 addop(
"bra", [
bs(
'1010'), s12imm])
833 def dstflow2label(self, symbol_pool):
834 e = self.args[0].expr
835 ad = e.arg*2+4+self.offset
836 l = symbol_pool.getby_offset_create(ad)
837 s = ExprId(l, e.size)
838 self.args[0].expr = s
841 addop(
"braf", [
bs(
'0000'), rn,
bs(
'00100011')])
849 addop(
"bsr", [
bs(
'1011'), s12imm])
851 addop(
"bsrf", [
bs(
'0000'), rn,
bs(
'00000011')])
856 def is_subcall(self):
862 addop(
"jmp_l", [
bs(
'0100'), d32gpreg,
bs(
'00101011')])
869 addop(
"jsr_l", [
bs(
'0100'), d32gpreg,
bs(
'00001011')])
874 def is_subcall(self):
880 addop(
"rts", [
bs(
'0000000000001011')])
886 addop(
"clrmac", [
bs(
'0000000000101000')])
887 addop(
"clrs", [
bs(
'0000000001001000')])
888 addop(
"clrt", [
bs(
'0000000000001000')])
891 addop(
"ldc", [
bs(
'0100'), rm, bssr,
bs(
'00001110')])
892 addop(
"ldc", [
bs(
'0100'), rm, bsgbr,
bs(
'00011110')])
893 addop(
"ldc", [
bs(
'0100'), rm, bsvbr,
bs(
'00101110')])
894 addop(
"ldc", [
bs(
'0100'), rm, bsssr,
bs(
'00111110')])
895 addop(
"ldc", [
bs(
'0100'), rm, bsspc,
bs(
'01001110')])
896 addop(
"ldc", [
bs(
'0100'), rm, bsdbr,
bs(
'11111010')])
897 addop(
"ldc", [
bs(
'0100'), rm,
bs(
'1'), brn,
bs(
'1110')], [rm, brn])
898 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc, bssr,
bs(
'00000111')])
899 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc, bsgbr,
bs(
'00010111')])
900 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc, bsvbr,
bs(
'00100111')])
901 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc, bsssr,
bs(
'00110111')])
902 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc, bsspc,
bs(
'01000111')])
903 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc, bsdbr,
bs(
'11110110')])
904 addop(
"ldc_l", [
bs(
'0100'), d32rmpinc,
bs(
'1'), brn,
bs(
'0111')])
905 addop(
"lds", [
bs(
'0100'), rm, bsmach,
bs(
'00001010')])
906 addop(
"lds", [
bs(
'0100'), rm, bsmacl,
bs(
'00011010')])
907 addop(
"lds", [
bs(
'0100'), rm, bspr,
bs(
'00101010')])
908 addop(
"lds_l", [
bs(
'0100'), d32rmpinc, bsmach,
bs(
'00000110')])
909 addop(
"lds_l", [
bs(
'0100'), d32rmpinc, bsmacl,
bs(
'00010110')])
910 addop(
"lds_l", [
bs(
'0100'), d32rmpinc, bspr,
bs(
'00100110')])
911 addop(
"ldtlb", [
bs(
'0000000000111000')])
913 addop(
"movca_l", [
bs(
'0000'), bsr0, d32gpreg,
bs(
'11000011')])
914 addop(
"nop", [
bs(
'0000000000001001')])
915 addop(
"ocbi_l", [
bs(
'0000'), d32gpreg,
bs(
'10010011')])
916 addop(
"ocbp_l", [
bs(
'0000'), d32gpreg,
bs(
'10100011')])
917 addop(
"ocbwb_l", [
bs(
'0000'), d32gpreg,
bs(
'10110011')])
918 addop(
"pref_l", [
bs(
'0000'), d32gpreg,
bs(
'10000011')])
921 addop(
"rte", [
bs(
'0000000000101011')])
922 addop(
"sets", [
bs(
'0000000001011000')])
923 addop(
"sett", [
bs(
'0000000000011000')])
924 addop(
"sleep", [
bs(
'0000000000011011')])
925 addop(
"stc", [
bs(
'0000'), bssr, rn,
bs(
'00000010')])
926 addop(
"stc", [
bs(
'0000'), bsgbr, rn,
bs(
'00010010')])
927 addop(
"stc", [
bs(
'0000'), bsvbr, rn,
bs(
'00100010')])
928 addop(
"stc", [
bs(
'0000'), bsssr, rn,
bs(
'00110010')])
929 addop(
"stc", [
bs(
'0000'), bsspc, rn,
bs(
'01000010')])
930 addop(
"stc", [
bs(
'0000'), bssgr, rn,
bs(
'00111010')])
931 addop(
"stc", [
bs(
'0000'), bsdbr, rn,
bs(
'11111010')])
932 addop(
"stc", [
bs(
'0000'), rn,
bs(
'1'), brm,
bs(
'0010')], [brm, rn])
934 addop(
"stc_l", [
bs(
'0100'), bssr, d32rmpdec,
bs(
'00000011')])
935 addop(
"stc_l", [
bs(
'0100'), bsgbr, d32rmpdec,
bs(
'00010011')])
936 addop(
"stc_l", [
bs(
'0100'), bsvbr, d32rmpdec,
bs(
'00100011')])
937 addop(
"stc_l", [
bs(
'0100'), bsssr, d32rmpdec,
bs(
'00110011')])
938 addop(
"stc_l", [
bs(
'0100'), bsspc, d32rmpdec,
bs(
'01000011')])
939 addop(
"stc_l", [
bs(
'0100'), bssgr, d32rmpdec,
bs(
'00110010')])
940 addop(
"stc_l", [
bs(
'0100'), bsdbr, d32rmpdec,
bs(
'11110010')])
942 [
bs(
'0100'), d32rnpdec,
bs(
'1'), brm,
bs(
'0011')], [brm, d32rnpdec])
945 addop(
"sts", [
bs(
'0000'), bsmach, rm,
bs(
'00001010')])
946 addop(
"sts", [
bs(
'0000'), bsmacl, rm,
bs(
'00011010')])
947 addop(
"sts", [
bs(
'0000'), bspr, rm,
bs(
'00101010')])
948 addop(
"sts_l", [
bs(
'0100'), bsmach, d32rmpdec,
bs(
'00000010')])
949 addop(
"sts_l", [
bs(
'0100'), bsmacl, d32rmpdec,
bs(
'00010010')])
951 [
bs(
'0100'), d32rnpdec, bspr,
bs(
'00100010')], [bspr, d32rnpdec])
952 addop(
"trapa", [
bs(
'11000011'), u08imm])
954 addop(
"fldi0", [
bs(
'1111'), frn,
bs(
'10001101')])
955 addop(
"fldi1", [
bs(
'1111'), frn,
bs(
'10011101')])
956 addop(
"fmov", [
bs(
'1111'), frn, frm,
bs(
'1100')], [frm, frn])
957 addop(
"fmov_s", [
bs(
'1111'), frn, d32gpreg,
bs(
'1000')], [d32gpreg, frn])
958 addop(
"fmov_s", [
bs(
'1111'), frn, bd32r0gp,
bs(
'0110')], [bd32r0gp, frn])
959 addop(
"fmov_s", [
bs(
'1111'), frn, d32rmpinc,
bs(
'1001')], [d32rmpinc, frn])
960 addop(
"fmov_s", [
bs(
'1111'), d32gpreg, frm,
bs(
'1010')], [frm, d32gpreg])
961 addop(
"fmov_s", [
bs(
'1111'), d32rnpdec, frm,
bs(
'1011')], [frm, d32rnpdec])
962 addop(
"fmov_s", [
bs(
'1111'), bd32r0gp, frm,
bs(
'0111')], [frm, bd32r0gp])
964 addop(
"flds", [
bs(
'1111'), frm, bsfpul,
bs(
'00011101')])
965 addop(
"fsts", [
bs(
'1111'), bsfpul, frm,
bs(
'00001101')])
966 addop(
"fabs", [
bs(
'1111'), frn,
bs(
'01011101')])
967 addop(
"fadd", [
bs(
'1111'), frn, frm,
bs(
'0000')], [frm, frn])
968 addop(
"fcmpeq", [
bs(
'1111'), frn, frm,
bs(
'0100')], [frm, frn])
969 addop(
"fcmpgt", [
bs(
'1111'), frn, frm,
bs(
'0101')], [frm, frn])
970 addop(
"fdiv", [
bs(
'1111'), frn, frm,
bs(
'0011')], [frm, frn])
972 addop(
"float", [
bs(
'1111'), bsfpul, frn,
bs(
'00101101')])
973 addop(
"fmac", [
bs(
'1111'), bsfr0, frn, frm,
bs(
'1110')], [bsfr0, frm, frn])
974 addop(
"fmul", [
bs(
'1111'), frn, frm,
bs(
'0010')], [frm, frn])
975 addop(
"fneg", [
bs(
'1111'), frn,
bs(
'01001101')])
976 addop(
"fsqrt", [
bs(
'1111'), frn,
bs(
'01101101')])
977 addop(
"fsub", [
bs(
'1111'), frn, frm,
bs(
'0001')], [frm, frn])
978 addop(
"ftrc", [
bs(
'1111'), frm, bsfpul,
bs(
'00111101')])