/// <summary> /// Add an instruction directly to the flow of instructions. /// </summary> /// <param name="instruction"></param> /// <param name="flags">Operand flags passed.</param> void AddInstruction(Instruction instruction, AssemblerOperandFlags flags = AssemblerOperandFlags.None) { if (flags != AssemblerOperandFlags.None) { if ((flags & AssemblerOperandFlags.Broadcast) != 0) { instruction.IsBroadcast = true; } if ((flags & AssemblerOperandFlags.Zeroing) != 0) { instruction.ZeroingMasking = true; } if ((flags & AssemblerOperandFlags.RegisterMask) != 0) { // register mask is shift by 2 (starts at index 1 for K1) instruction.OpMask = (Register)((int)Register.K0 + (((int)(flags & AssemblerOperandFlags.RegisterMask)) >> 6)); } if ((flags & AssemblerOperandFlags.SuppressAllExceptions) != 0) { instruction.SuppressAllExceptions = true; } if ((flags & AssemblerOperandFlags.RoundControlMask) != 0) { instruction.RoundingControl = (RoundingControl)((((int)(flags & AssemblerOperandFlags.RoundControlMask)) >> 3)); } } AddInstruction(ref instruction); }
/// <summary> /// Creates a new instance. /// </summary> /// <param name="size">Size of the operand.</param> /// <param name="prefix">Register prefix.</param> /// <param name="base">Base register.</param> /// <param name="index">Index register.</param> /// <param name="scale">Scale of the index.</param> /// <param name="displacement">Displacement.</param> /// <param name="flags">Flags attached to this operand.</param> internal AssemblerMemoryOperand(MemoryOperandSize size, Register prefix, Register @base, Register index, int scale, long displacement, AssemblerOperandFlags flags) { Size = size; Prefix = prefix; Base = @base; Index = index; Scale = scale; Displacement = displacement; Flags = flags; }
/// <summary> /// Creates a new instance. /// </summary> /// <param name="size">Size of this memory operand.</param> /// <param name="prefix">Register prefix</param> /// <param name="flags">Flags</param> internal AssemblerMemoryOperandFactory(MemoryOperandSize size, Register prefix, AssemblerOperandFlags flags) { Size = size; Prefix = prefix; Flags = flags; }
/// <summary> /// Creates a new instance. /// </summary> /// <param name="size">Size of this memory operand.</param> /// <param name="segment">Segment register</param> /// <param name="flags">Flags</param> internal AssemblerMemoryOperandFactory(MemoryOperandSize size, Register segment, AssemblerOperandFlags flags) { Size = size; Segment = segment; Flags = flags; }