/// <summary>
 /// Initializes a ReloadedFunction with its default parameters supplied in the constructor.
 /// </summary>
 /// <param name="sourceRegister">Registers in left to right parameter order passed to the custom function.</param>
 /// <param name="returnRegister">The register that the function returns its value in.</param>
 /// <param name="stackCleanup">Defines the stack cleanup rule for the function. See <see cref="StackCleanup"/> for more details.</param>
 /// <param name="reservedStackSpace">Allocates an extra amount of uninitialized (not zero-written) stack space for the function to use when calling. Required by some compiler optimized functions.</param>
 public FunctionAttribute(Register sourceRegister, Register returnRegister, StackCleanup stackCleanup, int reservedStackSpace = 0)
 {
     SourceRegisters    = new[] { sourceRegister };
     ReturnRegister     = returnRegister;
     Cleanup            = stackCleanup;
     ReservedStackSpace = reservedStackSpace;
 }
 /// <summary>
 /// Initializes a ReloadedFunction with its default parameters supplied in the constructor.
 /// </summary>
 /// <param name="sourceRegisters">Specifies the registers in left to right parameter order to pass to the custom function to be called.</param>
 /// <param name="returnRegister">Specifies the register to return the value from the funtion in (mov eax, source). This is typically eax.</param>
 /// <param name="stackCleanup">Defines the stack cleanup rule for the function. See <see cref="StackCleanup"/> for more details.</param>
 /// <param name="reservedStackSpace">Allocates an extra amount of uninitialized (not zero-written) stack space for the function to use when calling. Required by some compiler optimized functions.</param>
 public ReloadedFunctionAttribute(Register[] sourceRegisters, Register returnRegister, StackCleanup stackCleanup, int reservedStackSpace = 0)
 {
     SourceRegisters    = sourceRegisters;
     ReturnRegister     = returnRegister;
     Cleanup            = stackCleanup;
     ReservedStackSpace = reservedStackSpace;
 }
 /// <summary>
 /// Initializes a ReloadedFunction with its default parameters supplied in the constructor.
 /// </summary>
 /// <param name="sourceRegisters">Registers in left to right parameter order passed to the custom function.</param>
 /// <param name="returnRegister">The register that the function returns its value in.</param>
 /// <param name="stackCleanup">Defines the stack cleanup rule for the function. See <see cref="StackCleanup"/> for more details.</param>
 /// <param name="calleeSavedRegisters">A list of registers that should be preserved by this function.</param>
 /// <param name="reservedStackSpace">Allocates an extra amount of uninitialized (not zero-written) stack space for the function to use when calling. Required by some compiler optimized functions.</param>
 public FunctionAttribute(Register[] sourceRegisters, Register returnRegister, StackCleanup stackCleanup, Register[] calleeSavedRegisters, int reservedStackSpace = 0)
 {
     SourceRegisters      = sourceRegisters;
     ReturnRegister       = returnRegister;
     Cleanup              = stackCleanup;
     ReservedStackSpace   = reservedStackSpace;
     CalleeSavedRegisters = calleeSavedRegisters;
 }
 /// <inheritdoc />
 public ManagedFunctionAttribute(Register sourceRegister, Register returnRegister, StackCleanup stackCleanup, Register[] calleeSavedRegisters, int reservedStackSpace) : base(sourceRegister, returnRegister, stackCleanup, calleeSavedRegisters, reservedStackSpace)
 {
 }
 // BACKCOMPAT OVERLOAD -- DO NOT TOUCH
 /// <inheritdoc />
 public ManagedFunctionAttribute(Register sourceRegister, Register returnRegister, StackCleanup stackCleanup, Register[] calleeSavedRegisters) : base(sourceRegister, returnRegister, stackCleanup, calleeSavedRegisters, 0)
 {
 }
 // BACKCOMPAT OVERLOAD -- DO NOT TOUCH
 /// <inheritdoc />
 public ManagedFunctionAttribute(Register sourceRegister, Register returnRegister, StackCleanup stackCleanup) : base(sourceRegister, returnRegister, stackCleanup, 0)
 {
 }
 /// <summary>
 /// Initializes a ReloadedFunction with its default parameters supplied in the constructor.
 /// </summary>
 /// <param name="sourceRegisters">Specifies the registers in left to right parameter order to pass to the custom function to be called.</param>
 /// <param name="returnRegister">Specifies the register to return the value from the funtion in (mov eax, source). This is typically eax.</param>
 /// <param name="stackCleanup">Defines the stack cleanup rule for the function. See <see cref="StackCleanup"/> for more details.</param>
 public ReloadedFunctionAttribute(Register[] sourceRegisters, Register returnRegister, StackCleanup stackCleanup)
 {
     SourceRegisters = sourceRegisters;
     ReturnRegister  = returnRegister;
     Cleanup         = stackCleanup;
 }
 /// <summary>
 /// Initializes a ReloadedFunction with its default parameters supplied in the constructor.
 /// </summary>
 /// <param name="sourceRegister">Specifies the registers for the parameter.</param>
 /// <param name="returnRegister">Specifies the register to return the value from the funtion in (mov eax, source). This is typically eax.</param>
 /// <param name="stackCleanup">Defines the stack cleanup rule for the function. See <see cref="StackCleanup"/> for more details.</param>
 public ReloadedFunctionAttribute(Register sourceRegister, Register returnRegister, StackCleanup stackCleanup)
 {
     SourceRegisters = new[] { sourceRegister };
     ReturnRegister  = returnRegister;
     Cleanup         = stackCleanup;
 }