public override PowerPcInstruction Decode(uint wInstr, PowerPcDisassembler dasm) { // Only supported on 64-bit arch. if (dasm.defaultWordWidth.BitSize == 32) { return(dasm.CreateInvalidInstruction()); } else { Mnemonic mnemonic; switch ((wInstr >> 1) & 0xF) { case 0: case 1: mnemonic = Mnemonic.rldicl; break; case 2: case 3: mnemonic = Mnemonic.rldicr; break; case 4: case 5: mnemonic = Mnemonic.rldic; break; case 6: case 7: mnemonic = Mnemonic.rldimi; break; case 8: mnemonic = Mnemonic.rldcl; break; case 9: mnemonic = Mnemonic.rldcr; break; default: return(dasm.CreateInvalidInstruction()); } wInstr &= ~1u; return(new PowerPcInstruction(mnemonic) { InstructionClass = InstrClass.Linear, Operands = new MachineOperand[] { dasm.RegFromBits(wInstr >> 16), dasm.RegFromBits(wInstr >> 21), ImmediateOperand.Byte((byte)((wInstr >> 11) & 0x1F | (wInstr << 4) & 0x20)), ImmediateOperand.Byte((byte)((wInstr >> 6) & 0x1F | (wInstr & 0x20))), } }); } }
public override PowerPcInstruction Decode(uint wInstr, PowerPcDisassembler dasm) { if (!seen.Contains(wInstr)) { seen.Add(wInstr); EmitUnitTest(wInstr); } return(dasm.CreateInvalidInstruction()); }
public override PowerPcInstruction Decode(uint wInstr, PowerPcDisassembler dasm) { var x = (wInstr >> shift) & mask; if (decoders.TryGetValue(x, out Decoder decoder)) { return(decoder.Decode(wInstr, dasm)); } else { return(dasm.CreateInvalidInstruction()); } }
public override PowerPcInstruction Decode(PowerPcDisassembler dasm, uint wInstr) { bool link = (wInstr & 1) != 0; var mnemonic = link ? this.opLink : this.mnemonic; var iclass = link ? InstrClass.Transfer | InstrClass.Call : InstrClass.Transfer; foreach (var m in mutators) { if (!m(wInstr, dasm)) { return(dasm.CreateInvalidInstruction()); } } return(dasm.MakeInstruction(iclass, mnemonic)); }
public static PowerPcInstruction DecodeOperands( uint wInstr, PowerPcDisassembler dasm, InstrClass iclass, Mnemonic mnemonic, Mutator <PowerPcDisassembler>[] mutators) { foreach (var m in mutators) { if (!m(wInstr, dasm)) { return(dasm.CreateInvalidInstruction()); } } return(dasm.MakeInstruction(iclass, mnemonic)); }
public override PowerPcInstruction Decode(uint wInstr, PowerPcDisassembler dasm) { return(dasm.CreateInvalidInstruction()); }
public override PowerPcInstruction Decode(PowerPcDisassembler dasm, uint wInstr) { EmitUnitTest(wInstr); return(dasm.CreateInvalidInstruction()); }