Example #1
0
 public override XtensaInstruction Decode(XtensaDisassembler dasm)
 {
     if (this.twoByte)
     {
         dasm.rdr.Offset -= 1;
     }
     return(dasm.DecodeOperands(opcode, fmt));
 }
Example #2
0
 public override XtensaInstruction Decode(XtensaDisassembler dasm)
 {
     return(new XtensaInstruction
     {
         Opcode = this.opcode,
         Operands = new MachineOperand[] {
             dasm.GetAluRegister(dasm.state.s),
             ImmediateOperand.Byte((byte)(((dasm.state.r & 1) << 4) | dasm.state.t)),
             dasm.JumpOffset(dasm.state.imm8)
         }
     });
 }
Example #3
0
 public override XtensaInstruction Decode(XtensaDisassembler dasm)
 {
     return(new XtensaInstruction
     {
         Opcode = Opcodes.extui,
         Operands = new MachineOperand[]
         {
             dasm.GetAluRegister(dasm.state.r),
             dasm.GetAluRegister(dasm.state.t),
             ImmediateOperand.Byte((byte)((dasm.state.s | ((dasm.state.op1 & 1) << 4)))),
             ImmediateOperand.Byte((byte)(dasm.state.op2 + 1))
         }
     });
 }
Example #4
0
            public override XtensaInstruction Decode(XtensaDisassembler dasm)
            {
                var n =
                    dasm.state.r |
                    ((dasm.state.t & 0x3) << 4);
                var dst = dasm.JumpOffset((byte)n);

                // this is a 2-byte instruction, so back up one byte.
                dasm.rdr.Offset -= 1;

                return(new XtensaInstruction
                {
                    Opcode = opcode,
                    Operands = new MachineOperand[]
                    {
                        dasm.GetAluRegister(dasm.state.s),
                        dst,
                    }
                });
            }
Example #5
0
            public override XtensaInstruction Decode(XtensaDisassembler dasm)
            {
                int shoff = dasm.state.imm12;

                if (shoff > 0x7FF)
                {
                    shoff |= ~0x7FF;
                }
                var dst = AddressOperand.Ptr32((uint)
                                               ((int)dasm.state.addr.ToUInt32() + 4 + shoff));

                return(new XtensaInstruction
                {
                    Opcode = opcode,
                    Operands = new MachineOperand[]
                    {
                        dasm.GetAluRegister(dasm.state.s),
                        dst,
                    }
                });
            }
Example #6
0
            public override XtensaInstruction Decode(XtensaDisassembler dasm)
            {
                var n =
                    dasm.state.r |
                    ((dasm.state.t & 0x7) << 4) |
                    (((dasm.state.t & 0x6) == 0x6)
                        ? ~0x1F
                        : 0);
                var imm = ImmediateOperand.SByte((sbyte)n);

                // this is a 2-byte instruction, so back up one byte.
                dasm.rdr.Offset -= 1;

                return(new XtensaInstruction
                {
                    Opcode = Opcodes.movi_n,
                    Operands = new MachineOperand[]
                    {
                        dasm.GetAluRegister(dasm.state.s),
                        imm,
                    }
                });
            }
Example #7
0
 public override XtensaInstruction Decode(XtensaDisassembler dasm)
 {
     return(aOprecs[dasm.state.t].Decode(dasm));
 }
Example #8
0
 public abstract XtensaInstruction Decode(XtensaDisassembler dasm);
Example #9
0
 public override XtensaInstruction Decode(XtensaDisassembler dasm)
 {
     return(decoders[dasm.state.s].Decode(dasm));
 }