Exemplo n.º 1
0
            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))),
                        }
                    });
                }
            }
Exemplo n.º 2
0
 public override PowerPcInstruction Decode(uint wInstr, PowerPcDisassembler dasm)
 {
     if (!seen.Contains(wInstr))
     {
         seen.Add(wInstr);
         EmitUnitTest(wInstr);
     }
     return(dasm.CreateInvalidInstruction());
 }
Exemplo n.º 3
0
            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));
            }
Exemplo n.º 5
0
 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));
 }
Exemplo n.º 6
0
 public override PowerPcInstruction Decode(uint wInstr, PowerPcDisassembler dasm)
 {
     return(dasm.CreateInvalidInstruction());
 }
 public override PowerPcInstruction Decode(PowerPcDisassembler dasm, uint wInstr)
 {
     EmitUnitTest(wInstr);
     return(dasm.CreateInvalidInstruction());
 }