Ejemplo n.º 1
0
        internal override unsafe void ParseDetails(CsDetailBase *detail)
        {
            var ad = (CsArm64Detail *)&detail->ArchSpecificPlaceholder;

            Condition = (ConditionCode)ad->CC;
            var ops = (CsArm64Op *)&ad->OpsPlaceholder;

            for (var i = 0; i < ad->OpCount; ++i)
            {
                var op = ops[i];
                switch (op.OpType)
                {
                case 1:
                    Operands.Add(new RegOperand(*(Reg *)&op.Placeholder0));
                    break;

                case 2:
                    Operands.Add(new ImmOperand(*(ulong *)&op.Placeholder0));
                    break;

                case 3:
                    Operands.Add(new MemOperand(
                                     *(Reg *)&op.Placeholder0,
                                     *(Reg *)&op.Placeholder1,
                                     *(int *)&op.Placeholder2
                                     ));
                    break;

                case 4:
                    Operands.Add(new FpOperand(*(double *)&op.Placeholder0));
                    break;

                case 65:
                case 66:
                case 67:
                case 68:
                case 69:
                    Operands.Add(null);
                    break;

                case 70:
                    Operands.Add(new BarrierOperand(*(Barrier *)&op.Placeholder0));
                    break;

                default:
                    throw new NotImplementedException($"Operand type {op.OpType} not supported");
                }
            }
        }
Ejemplo n.º 2
0
 internal abstract unsafe void ParseDetails(CsDetailBase *detail);