Lines Matching refs:instr
98 void PrintRs(Instruction* instr);
99 void PrintRt(Instruction* instr);
100 void PrintRd(Instruction* instr);
101 void PrintFs(Instruction* instr);
102 void PrintFt(Instruction* instr);
103 void PrintFd(Instruction* instr);
104 void PrintSa(Instruction* instr);
105 void PrintSd(Instruction* instr);
106 void PrintSs1(Instruction* instr);
107 void PrintSs2(Instruction* instr);
108 void PrintBc(Instruction* instr);
109 void PrintCc(Instruction* instr);
110 void PrintFunction(Instruction* instr);
111 void PrintSecondaryField(Instruction* instr);
112 void PrintUImm16(Instruction* instr);
113 void PrintSImm16(Instruction* instr);
114 void PrintXImm16(Instruction* instr);
115 void PrintXImm26(Instruction* instr);
116 void PrintCode(Instruction* instr); // For break and trap instructions.
118 void PrintInstructionName(Instruction* instr);
121 int FormatRegister(Instruction* instr, const char* option);
122 int FormatFPURegister(Instruction* instr, const char* option);
123 int FormatOption(Instruction* instr, const char* option);
124 void Format(Instruction* instr, const char* format);
125 void Unknown(Instruction* instr);
128 void DecodeTypeRegister(Instruction* instr);
129 void DecodeTypeImmediate(Instruction* instr);
130 void DecodeTypeJump(Instruction* instr);
168 void Decoder::PrintRs(Instruction* instr) { in PrintRs() argument
169 int reg = instr->RsValue(); in PrintRs()
174 void Decoder::PrintRt(Instruction* instr) { in PrintRt() argument
175 int reg = instr->RtValue(); in PrintRt()
180 void Decoder::PrintRd(Instruction* instr) { in PrintRd() argument
181 int reg = instr->RdValue(); in PrintRd()
192 void Decoder::PrintFs(Instruction* instr) { in PrintFs() argument
193 int freg = instr->RsValue(); in PrintFs()
198 void Decoder::PrintFt(Instruction* instr) { in PrintFt() argument
199 int freg = instr->RtValue(); in PrintFt()
204 void Decoder::PrintFd(Instruction* instr) { in PrintFd() argument
205 int freg = instr->RdValue(); in PrintFd()
211 void Decoder::PrintSa(Instruction* instr) { in PrintSa() argument
212 int sa = instr->SaValue(); in PrintSa()
218 void Decoder::PrintSd(Instruction* instr) { in PrintSd() argument
219 int sd = instr->RdValue(); in PrintSd()
225 void Decoder::PrintSs1(Instruction* instr) { in PrintSs1() argument
226 int ss = instr->RdValue(); in PrintSs1()
232 void Decoder::PrintSs2(Instruction* instr) { in PrintSs2() argument
233 int ss = instr->RdValue(); in PrintSs2()
234 int pos = instr->SaValue(); in PrintSs2()
241 void Decoder::PrintBc(Instruction* instr) { in PrintBc() argument
242 int cc = instr->FBccValue(); in PrintBc()
248 void Decoder::PrintCc(Instruction* instr) { in PrintCc() argument
249 int cc = instr->FCccValue(); in PrintCc()
255 void Decoder::PrintUImm16(Instruction* instr) { in PrintUImm16() argument
256 int32_t imm = instr->Imm16Value(); in PrintUImm16()
262 void Decoder::PrintSImm16(Instruction* instr) { in PrintSImm16() argument
263 int32_t imm = ((instr->Imm16Value()) << 16) >> 16; in PrintSImm16()
269 void Decoder::PrintXImm16(Instruction* instr) { in PrintXImm16() argument
270 int32_t imm = instr->Imm16Value(); in PrintXImm16()
276 void Decoder::PrintXImm26(Instruction* instr) { in PrintXImm26() argument
277 uint32_t imm = instr->Imm26Value() << kImmFieldShift; in PrintXImm26()
283 void Decoder::PrintCode(Instruction* instr) { in PrintCode() argument
284 if (instr->OpcodeFieldRaw() != SPECIAL) in PrintCode()
286 switch (instr->FunctionFieldRaw()) { in PrintCode()
288 int32_t code = instr->Bits(25, 6); in PrintCode()
299 int32_t code = instr->Bits(15, 6); in PrintCode()
311 void Decoder::PrintInstructionName(Instruction* instr) { in PrintInstructionName() argument
317 int Decoder::FormatRegister(Instruction* instr, const char* format) { in FormatRegister() argument
320 int reg = instr->RsValue(); in FormatRegister()
324 int reg = instr->RtValue(); in FormatRegister()
328 int reg = instr->RdValue(); in FormatRegister()
339 int Decoder::FormatFPURegister(Instruction* instr, const char* format) { in FormatFPURegister() argument
342 int reg = instr->FsValue(); in FormatFPURegister()
346 int reg = instr->FtValue(); in FormatFPURegister()
350 int reg = instr->FdValue(); in FormatFPURegister()
364 int Decoder::FormatOption(Instruction* instr, const char* format) { in FormatOption() argument
368 PrintCode(instr); in FormatOption()
376 PrintSImm16(instr); in FormatOption()
379 PrintSImm16(instr); in FormatOption()
382 PrintXImm16(instr); in FormatOption()
387 PrintXImm26(instr); in FormatOption()
392 return FormatRegister(instr, format); in FormatOption()
395 return FormatFPURegister(instr, format); in FormatOption()
401 PrintSa(instr); in FormatOption()
406 PrintSd(instr); in FormatOption()
412 PrintSs1(instr); in FormatOption()
416 PrintSs2(instr); in FormatOption()
424 PrintBc(instr); in FormatOption()
429 PrintCc(instr); in FormatOption()
441 void Decoder::Format(Instruction* instr, const char* format) { in Format() argument
445 format += FormatOption(instr, format); in Format()
457 void Decoder::Unknown(Instruction* instr) { in Unknown() argument
458 Format(instr, "unknown"); in Unknown()
462 void Decoder::DecodeTypeRegister(Instruction* instr) { in DecodeTypeRegister() argument
463 switch (instr->OpcodeFieldRaw()) { in DecodeTypeRegister()
465 switch (instr->RsFieldRaw()) { in DecodeTypeRegister()
470 Format(instr, "mfc1 'rt, 'fs"); in DecodeTypeRegister()
473 Format(instr, "mfhc1 'rt, 'fs"); in DecodeTypeRegister()
476 Format(instr, "mtc1 'rt, 'fs"); in DecodeTypeRegister()
480 Format(instr, "ctc1 'rt, 'fs"); in DecodeTypeRegister()
483 Format(instr, "cfc1 'rt, 'fs"); in DecodeTypeRegister()
486 Format(instr, "mthc1 'rt, 'fs"); in DecodeTypeRegister()
489 switch (instr->FunctionFieldRaw()) { in DecodeTypeRegister()
491 Format(instr, "add.d 'fd, 'fs, 'ft"); in DecodeTypeRegister()
494 Format(instr, "sub.d 'fd, 'fs, 'ft"); in DecodeTypeRegister()
497 Format(instr, "mul.d 'fd, 'fs, 'ft"); in DecodeTypeRegister()
500 Format(instr, "div.d 'fd, 'fs, 'ft"); in DecodeTypeRegister()
503 Format(instr, "abs.d 'fd, 'fs"); in DecodeTypeRegister()
506 Format(instr, "mov.d 'fd, 'fs"); in DecodeTypeRegister()
509 Format(instr, "neg.d 'fd, 'fs"); in DecodeTypeRegister()
512 Format(instr, "sqrt.d 'fd, 'fs"); in DecodeTypeRegister()
515 Format(instr, "cvt.w.d 'fd, 'fs"); in DecodeTypeRegister()
519 Format(instr, "cvt.l.d 'fd, 'fs"); in DecodeTypeRegister()
521 Unknown(instr); in DecodeTypeRegister()
526 Format(instr, "trunc.w.d 'fd, 'fs"); in DecodeTypeRegister()
530 Format(instr, "trunc.l.d 'fd, 'fs"); in DecodeTypeRegister()
532 Unknown(instr); in DecodeTypeRegister()
537 Format(instr, "round.w.d 'fd, 'fs"); in DecodeTypeRegister()
540 Format(instr, "floor.w.d 'fd, 'fs"); in DecodeTypeRegister()
543 Format(instr, "ceil.w.d 'fd, 'fs"); in DecodeTypeRegister()
546 Format(instr, "cvt.s.d 'fd, 'fs"); in DecodeTypeRegister()
549 Format(instr, "c.f.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
552 Format(instr, "c.un.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
555 Format(instr, "c.eq.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
558 Format(instr, "c.ueq.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
561 Format(instr, "c.olt.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
564 Format(instr, "c.ult.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
567 Format(instr, "c.ole.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
570 Format(instr, "c.ule.d 'fs, 'ft, 'Cc"); in DecodeTypeRegister()
573 Format(instr, "unknown.cop1.d"); in DecodeTypeRegister()
581 switch (instr->FunctionFieldRaw()) { in DecodeTypeRegister()
583 Format(instr, "cvt.s.w 'fd, 'fs"); in DecodeTypeRegister()
586 Format(instr, "cvt.d.w 'fd, 'fs"); in DecodeTypeRegister()
593 switch (instr->FunctionFieldRaw()) { in DecodeTypeRegister()
596 Format(instr, "cvt.d.l 'fd, 'fs"); in DecodeTypeRegister()
598 Unknown(instr); in DecodeTypeRegister()
604 Format(instr, "cvt.s.l 'fd, 'fs"); in DecodeTypeRegister()
606 Unknown(instr); in DecodeTypeRegister()
622 switch (instr->FunctionFieldRaw()) { in DecodeTypeRegister()
624 Format(instr, "jr 'rs"); in DecodeTypeRegister()
627 Format(instr, "jalr 'rs"); in DecodeTypeRegister()
630 if ( 0x0 == static_cast<int>(instr->InstructionBits())) in DecodeTypeRegister()
631 Format(instr, "nop"); in DecodeTypeRegister()
633 Format(instr, "sll 'rd, 'rt, 'sa"); in DecodeTypeRegister()
636 if (instr->RsValue() == 0) { in DecodeTypeRegister()
637 Format(instr, "srl 'rd, 'rt, 'sa"); in DecodeTypeRegister()
640 Format(instr, "rotr 'rd, 'rt, 'sa"); in DecodeTypeRegister()
642 Unknown(instr); in DecodeTypeRegister()
647 Format(instr, "sra 'rd, 'rt, 'sa"); in DecodeTypeRegister()
650 Format(instr, "sllv 'rd, 'rt, 'rs"); in DecodeTypeRegister()
653 if (instr->SaValue() == 0) { in DecodeTypeRegister()
654 Format(instr, "srlv 'rd, 'rt, 'rs"); in DecodeTypeRegister()
657 Format(instr, "rotrv 'rd, 'rt, 'rs"); in DecodeTypeRegister()
659 Unknown(instr); in DecodeTypeRegister()
664 Format(instr, "srav 'rd, 'rt, 'rs"); in DecodeTypeRegister()
667 Format(instr, "mfhi 'rd"); in DecodeTypeRegister()
670 Format(instr, "mflo 'rd"); in DecodeTypeRegister()
673 Format(instr, "mult 'rs, 'rt"); in DecodeTypeRegister()
676 Format(instr, "multu 'rs, 'rt"); in DecodeTypeRegister()
679 Format(instr, "div 'rs, 'rt"); in DecodeTypeRegister()
682 Format(instr, "divu 'rs, 'rt"); in DecodeTypeRegister()
685 Format(instr, "add 'rd, 'rs, 'rt"); in DecodeTypeRegister()
688 Format(instr, "addu 'rd, 'rs, 'rt"); in DecodeTypeRegister()
691 Format(instr, "sub 'rd, 'rs, 'rt"); in DecodeTypeRegister()
694 Format(instr, "subu 'rd, 'rs, 'rt"); in DecodeTypeRegister()
697 Format(instr, "and 'rd, 'rs, 'rt"); in DecodeTypeRegister()
700 if (0 == instr->RsValue()) { in DecodeTypeRegister()
701 Format(instr, "mov 'rd, 'rt"); in DecodeTypeRegister()
702 } else if (0 == instr->RtValue()) { in DecodeTypeRegister()
703 Format(instr, "mov 'rd, 'rs"); in DecodeTypeRegister()
705 Format(instr, "or 'rd, 'rs, 'rt"); in DecodeTypeRegister()
709 Format(instr, "xor 'rd, 'rs, 'rt"); in DecodeTypeRegister()
712 Format(instr, "nor 'rd, 'rs, 'rt"); in DecodeTypeRegister()
715 Format(instr, "slt 'rd, 'rs, 'rt"); in DecodeTypeRegister()
718 Format(instr, "sltu 'rd, 'rs, 'rt"); in DecodeTypeRegister()
721 Format(instr, "break, code: 'code"); in DecodeTypeRegister()
724 Format(instr, "tge 'rs, 'rt, code: 'code"); in DecodeTypeRegister()
727 Format(instr, "tgeu 'rs, 'rt, code: 'code"); in DecodeTypeRegister()
730 Format(instr, "tlt 'rs, 'rt, code: 'code"); in DecodeTypeRegister()
733 Format(instr, "tltu 'rs, 'rt, code: 'code"); in DecodeTypeRegister()
736 Format(instr, "teq 'rs, 'rt, code: 'code"); in DecodeTypeRegister()
739 Format(instr, "tne 'rs, 'rt, code: 'code"); in DecodeTypeRegister()
742 Format(instr, "movz 'rd, 'rs, 'rt"); in DecodeTypeRegister()
745 Format(instr, "movn 'rd, 'rs, 'rt"); in DecodeTypeRegister()
748 if (instr->Bit(16)) { in DecodeTypeRegister()
749 Format(instr, "movt 'rd, 'rs, 'bc"); in DecodeTypeRegister()
751 Format(instr, "movf 'rd, 'rs, 'bc"); in DecodeTypeRegister()
759 switch (instr->FunctionFieldRaw()) { in DecodeTypeRegister()
761 Format(instr, "mul 'rd, 'rs, 'rt"); in DecodeTypeRegister()
764 Format(instr, "clz 'rd, 'rs"); in DecodeTypeRegister()
771 switch (instr->FunctionFieldRaw()) { in DecodeTypeRegister()
774 Format(instr, "ins 'rt, 'rs, 'sa, 'ss2"); in DecodeTypeRegister()
776 Unknown(instr); in DecodeTypeRegister()
782 Format(instr, "ext 'rt, 'rs, 'sa, 'ss1"); in DecodeTypeRegister()
784 Unknown(instr); in DecodeTypeRegister()
798 void Decoder::DecodeTypeImmediate(Instruction* instr) { in DecodeTypeImmediate() argument
799 switch (instr->OpcodeFieldRaw()) { in DecodeTypeImmediate()
802 switch (instr->RsFieldRaw()) { in DecodeTypeImmediate()
804 if (instr->FBtrueValue()) { in DecodeTypeImmediate()
805 Format(instr, "bc1t 'bc, 'imm16u"); in DecodeTypeImmediate()
807 Format(instr, "bc1f 'bc, 'imm16u"); in DecodeTypeImmediate()
815 switch (instr->RtFieldRaw()) { in DecodeTypeImmediate()
817 Format(instr, "bltz 'rs, 'imm16u"); in DecodeTypeImmediate()
820 Format(instr, "bltzal 'rs, 'imm16u"); in DecodeTypeImmediate()
823 Format(instr, "bgez 'rs, 'imm16u"); in DecodeTypeImmediate()
826 Format(instr, "bgezal 'rs, 'imm16u"); in DecodeTypeImmediate()
834 Format(instr, "beq 'rs, 'rt, 'imm16u"); in DecodeTypeImmediate()
837 Format(instr, "bne 'rs, 'rt, 'imm16u"); in DecodeTypeImmediate()
840 Format(instr, "blez 'rs, 'imm16u"); in DecodeTypeImmediate()
843 Format(instr, "bgtz 'rs, 'imm16u"); in DecodeTypeImmediate()
847 Format(instr, "addi 'rt, 'rs, 'imm16s"); in DecodeTypeImmediate()
850 Format(instr, "addiu 'rt, 'rs, 'imm16s"); in DecodeTypeImmediate()
853 Format(instr, "slti 'rt, 'rs, 'imm16s"); in DecodeTypeImmediate()
856 Format(instr, "sltiu 'rt, 'rs, 'imm16u"); in DecodeTypeImmediate()
859 Format(instr, "andi 'rt, 'rs, 'imm16x"); in DecodeTypeImmediate()
862 Format(instr, "ori 'rt, 'rs, 'imm16x"); in DecodeTypeImmediate()
865 Format(instr, "xori 'rt, 'rs, 'imm16x"); in DecodeTypeImmediate()
868 Format(instr, "lui 'rt, 'imm16x"); in DecodeTypeImmediate()
872 Format(instr, "lb 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
875 Format(instr, "lh 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
878 Format(instr, "lwl 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
881 Format(instr, "lw 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
884 Format(instr, "lbu 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
887 Format(instr, "lhu 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
890 Format(instr, "lwr 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
893 Format(instr, "sb 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
896 Format(instr, "sh 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
899 Format(instr, "swl 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
902 Format(instr, "sw 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
905 Format(instr, "swr 'rt, 'imm16s('rs)"); in DecodeTypeImmediate()
908 Format(instr, "lwc1 'ft, 'imm16s('rs)"); in DecodeTypeImmediate()
911 Format(instr, "ldc1 'ft, 'imm16s('rs)"); in DecodeTypeImmediate()
914 Format(instr, "swc1 'ft, 'imm16s('rs)"); in DecodeTypeImmediate()
917 Format(instr, "sdc1 'ft, 'imm16s('rs)"); in DecodeTypeImmediate()
926 void Decoder::DecodeTypeJump(Instruction* instr) { in DecodeTypeJump() argument
927 switch (instr->OpcodeFieldRaw()) { in DecodeTypeJump()
929 Format(instr, "j 'imm26x"); in DecodeTypeJump()
932 Format(instr, "jal 'imm26x"); in DecodeTypeJump()
942 Instruction* instr = Instruction::At(instr_ptr); in InstructionDecode() local
946 instr->InstructionBits()); in InstructionDecode()
947 switch (instr->InstructionType()) { in InstructionDecode()
949 DecodeTypeRegister(instr); in InstructionDecode()
953 DecodeTypeImmediate(instr); in InstructionDecode()
957 DecodeTypeJump(instr); in InstructionDecode()
961 Format(instr, "UNSUPPORTED"); in InstructionDecode()