示例#1
0
 def _d_clo(self, data):
     if bits.get(data, 10, 6):
         return None
     return MIB('clo', None)(
         MRO('srca', bits.get(data, 25, 21)),
         MRO('srca_', bits.get(data, 20, 16)
             ),  #according to the docs, srca and srca_ must be the same
         MRO('dest', bits.get(data, 15, 11)))
示例#2
0
 def _d_srlv(self, data):
     if bits.get(data, 10, 7):
         return None
     if bits.test(data, 6):
         return MIB('rotrv', None)(MRO('dest', bits.get(data, 15, 11)),
                                   MRO('src', bits.get(data, 20, 16)),
                                   MIO('shift', bits.get(data, 25, 21)))
     return MIB('srlv', None)(MRO('dest', bits.get(data, 15, 11)),
                              MRO('src', bits.get(data, 20, 16)),
                              MIO('shift', bits.get(data, 25, 21)))
示例#3
0
 def _d_movci(self, data):
     if bits.get(data, 10, 6) or bits.test(data, 17):
         return None
     if bits.test(data, 16):
         return MIB('movf', None)(MRO('src', bits.get(data, 25, 21)),
                                  MIO('cc', bits.get(data, 20, 18)),
                                  MRO('dest', bits.get(data, 15, 11)))
     else:
         return MIB('movt', None)(MRO('src', bits.get(data, 25, 21)),
                                  MIO('cc', bits.get(data, 20, 18)),
                                  MRO('dest', bits.get(data, 15, 11)))
示例#4
0
 def _d_seb(self, data):
     if bits.get(data, 25, 21):
         return None
     return MIB('seb', None)(MRO('dest', bits.get(data, 15, 11)),
                             MRO('src', bits.get(data, 20, 16)))
示例#5
0
 def _d_rdhwr(self, data):
     if bits.get(data, 10, 6) or bits.get(data, 25, 21):
         return None
     return MIB('rdhwr', None)(MRO('dest', bits.get(data, 20, 16)),
                               MIO('num', bits.get(data, 15, 11)))
示例#6
0
 def _d_movn(self, data):
     if bits.get(data, 10, 6):
         return None
     return MIB('movn', None)(MRO('src', bits.get(data, 25, 21)),
                              MRO('predicate', bits.get(data, 20, 16)),
                              MRO('dest', bits.get(data, 15, 11)))
示例#7
0
 def _d_break(self, data):
     return MIB('break', None)(MIO('code', bits.get(data, 25, 6)))
示例#8
0
 def _d_cache(self, data):
     return MIB('cache', None)(MIO('op', bits.get(data, 20, 16)),
                               MMO('target',
                                   MRO('base', bits.get(data, 25, 21)),
                                   MIO('offset', bits.get(data, 15, 0))))
示例#9
0
 def _d_bnel(self, data):
     return MIB('bnel', None)(MRO('lhs', bits.get(data, 25, 21)),
                              MRO('rhs', bits.get(data, 20, 16)),
                              MIO('target', bits.get(data, 15, 0)))
示例#10
0
 def _d_xori(self, data):
     return MIB('xori', None)(MRO('lhs', bits.get(data, 25, 21)),
                              MRO('dest', bits.get(data, 20, 16)),
                              MIO('rhs', bits.get(data, 15, 0)))
示例#11
0
 def _d_synci(self, data):
     return MIB('synci', None)(MMO(MRO('base', bits.get(data, 25, 21)),
                                   MIO('offset', bits.get(data, 15,
                                                          0))))
示例#12
0
 def _d_bgezall(self, data):
     return MIB('bgezall', None)(MRO('predicate',
                                     bits.get(data, 25, 21)),
                                 MIO('target', bits.get(data, 15, 0)))
示例#13
0
 def _d_tnei(self, data):
     return MIB('tnei', None)(MRO('lhs', bits.get(data, 25, 21)),
                              MIO('rhs', bits.get(data, 15, 0)))
示例#14
0
 def _d_tne(self, data):
     return MIB('tne', None)(MRO('srca', bits.get(data, 25, 21)),
                             MRO('srcb', bits.get(data, 20, 16)),
                             MRO('code', bits.get(data, 15, 6)))
示例#15
0
 def _d_mtlo(self, data):
     if bits.get(data, 20, 6):
         return None
     return MIB('mtlo', None)(MRO('src', bits.get(data, 25, 21)))
示例#16
0
 def _d_mflo(self, data):
     if bits.get(data, 25, 16) or bits.get(data, 10, 6):
         return None
     return MIB('mflo', None)(MRO('dest', bits.get(data, 15, 11)))
示例#17
0
 def _d_sync(self, data):
     if bits.get(data, 25, 11):
         return None
     return MIB('sync', None)(MIO('stype', bits.get(data, 10, 6)))
示例#18
0
 def _d_jal(self, data):
     return MIB('jal', None)(MIO('target', bits.get(data, 25, 0)))
示例#19
0
 def _d_addiu(self, data):
     return MIB('addiu', None)(MRO('src', bits.get(data, 25, 21)),
                               MRO('dest', bits.get(data, 20, 16)),
                               MIO('addend', bits.get(data, 15, 0)))
示例#20
0
 def _d_mul(self, data):
     if bits.get(data, 10, 6):
         return None
     return MIB('mul', None)(MRO('dest', bits.get(data, 25, 21)),
                             MRO('srca', bits.get(data, 20, 16)),
                             MRO('srcb', bits.get(data, 15, 11)))
示例#21
0
 def _d_lui(self, data):
     if bits.get(data, 25, 21):
         return None
     return MIB('lui', None)(MRO('dest', bits.get(data, 20, 16)),
                             MIO('imm', bits.get(data, 15, 0)))
示例#22
0
 def _d_msubu(self, data):
     if bits.get(data, 15, 6):
         return None
     return MIB('msubu', None)(MRO('srca', bits.get(data, 25, 21)),
                               MRO('srcb', bits.get(data, 20, 16)))
示例#23
0
 def _d_bgtzl(self, data):
     if bits.get(data, 20, 16):
         return None
     return MIB('blgtzl', None)(MRO('predicate', bits.get(data, 25, 21)),
                                MIO('target', bits.get(data, 15, 0)))
示例#24
0
 def _d_sdc2(self, data):
     return MIB('sdc2', None)(MIO('src', bits.get(data, 20, 16)),
                              MMO('dest', MRO('base',
                                              bits.get(data, 25, 21)),
                                  MIO('offset', bits.get(data, 15, 0))))
示例#25
0
 def _d_pref(self, data):
     return MIB('pref', None)(MIO('hint', bits.get(data, 20, 16)),
                              MMO('dest', MRO('base',
                                              bits.get(data, 25, 21)),
                                  MIO('offset', bits.get(data, 15, 0))))
示例#26
0
 def _d_syscall(self, data):
     return MIB('syscall', None)(MIO('code', bits.get(data, 25, 6)))
示例#27
0
 def _d_sll(self, data):
     if bits.get(data, 25, 21):
         return None
     return MIB('sll', None)(MRO('dest', bits.get(data, 15, 11)),
                             MRO('src', bits.get(data, 20, 16)),
                             MIO('shift', bits.get(data, 10, 6)))
示例#28
0
 def _d_sdbbp(self, data):
     return MIB('sdbbp', None)(MIO('code', bits.get(data, 25, 6)))
示例#29
0
 def decode(self, data):
     decoder_name = self.decode_table[bits.get(
         data, *self.row_bitrange)][bits.get(data, *self.col_bitrange)]
     return decoder_name and getattr(self, decoder_name)(data)
示例#30
0
 def _d_ins(self, data):
     return MIB('ins', None)(MRO('src', bits.get(data, 25, 21)),
                             MRO('dest', bits.get(data, 20, 16)),
                             MIO('size', bits.get(data, 15, 11)),
                             MIO('pos', bits.get(data, 10, 6)))