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"); } } }
internal abstract unsafe void ParseDetails(CsDetailBase *detail);