private static void AppendImmediate(StringBuilder str, ImmediateSize size) { switch (size) { case ImmediateSize.Zero: break; case ImmediateSize.Fixed8: str.Append(" ib"); break; case ImmediateSize.Fixed16: str.Append(" iw"); break; case ImmediateSize.Fixed32: str.Append(" id"); break; case ImmediateSize.Fixed64: str.Append(" iq"); break; case ImmediateSize.Operand16Or32: str.Append(" iwd"); break; case ImmediateSize.Operand16Or32Or64: str.Append(" iwdq"); break; case ImmediateSize.Address16Or32: str.Append(" rel"); break; default: throw new ArgumentException(nameof(size)); } }
public static InstructionEncoding WithSecondImmediateSize(this InstructionEncoding encoding, ImmediateSize size) { return (encoding & ~InstructionEncoding.SecondImmediateSize_Mask) | (InstructionEncoding)((uint)size << (int)InstructionEncoding.SecondImmediateSize_Shift); }
public static InstructionEncoding WithImmediateSizes(this InstructionEncoding encoding, ImmediateSize firstSize, ImmediateSize secondSize = ImmediateSize.Zero) { return (encoding & ~InstructionEncoding.ImmediateSizes_Mask) | (InstructionEncoding)((uint)firstSize << (int)InstructionEncoding.FirstImmediateSize_Shift) | (InstructionEncoding)((uint)secondSize << (int)InstructionEncoding.SecondImmediateSize_Shift); }
private void AddImmediate(ImmediateSize size) { Contract.Requires(state >= State.PostOpcode); int immediateCount = encoding.GetImmediateCount(); Contract.Requires(immediateCount < 2); encoding = (immediateCount == 0) ? encoding.WithFirstImmediateSize(size) : encoding.WithSecondImmediateSize(size); AdvanceTo(State.Immediates); }