|
@@ -411,16 +411,6 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 |
|
|
%endif |
|
|
%endif |
|
|
%endmacro |
|
|
%endmacro |
|
|
|
|
|
|
|
|
%macro DEFINE_ARGS_INTERNAL 3+ |
|
|
|
|
|
%ifnum %2 |
|
|
|
|
|
DEFINE_ARGS %3 |
|
|
|
|
|
%elif %1 == 4 |
|
|
|
|
|
DEFINE_ARGS %2 |
|
|
|
|
|
%elif %1 > 4 |
|
|
|
|
|
DEFINE_ARGS %2, %3 |
|
|
|
|
|
%endif |
|
|
|
|
|
%endmacro |
|
|
|
|
|
|
|
|
|
|
|
%if WIN64 ; Windows x64 ;================================================= |
|
|
%if WIN64 ; Windows x64 ;================================================= |
|
|
|
|
|
|
|
|
DECLARE_REG 0, rcx |
|
|
DECLARE_REG 0, rcx |
|
@@ -439,7 +429,7 @@ DECLARE_REG 12, R15, 104 |
|
|
DECLARE_REG 13, R12, 112 |
|
|
DECLARE_REG 13, R12, 112 |
|
|
DECLARE_REG 14, R13, 120 |
|
|
DECLARE_REG 14, R13, 120 |
|
|
|
|
|
|
|
|
%macro PROLOGUE 2-5+ 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names... |
|
|
|
|
|
|
|
|
%macro PROLOGUE 2-5+ 0, 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names... |
|
|
%assign num_args %1 |
|
|
%assign num_args %1 |
|
|
%assign regs_used %2 |
|
|
%assign regs_used %2 |
|
|
ASSERT regs_used >= num_args |
|
|
ASSERT regs_used >= num_args |
|
@@ -451,7 +441,15 @@ DECLARE_REG 14, R13, 120 |
|
|
WIN64_SPILL_XMM %3 |
|
|
WIN64_SPILL_XMM %3 |
|
|
%endif |
|
|
%endif |
|
|
LOAD_IF_USED 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
LOAD_IF_USED 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
DEFINE_ARGS_INTERNAL %0, %4, %5 |
|
|
|
|
|
|
|
|
%if %0 > 4 |
|
|
|
|
|
%ifnum %4 |
|
|
|
|
|
DEFINE_ARGS %5 |
|
|
|
|
|
%else |
|
|
|
|
|
DEFINE_ARGS %4, %5 |
|
|
|
|
|
%endif |
|
|
|
|
|
%elifnnum %4 |
|
|
|
|
|
DEFINE_ARGS %4 |
|
|
|
|
|
%endif |
|
|
%endmacro |
|
|
%endmacro |
|
|
|
|
|
|
|
|
%macro WIN64_PUSH_XMM 0 |
|
|
%macro WIN64_PUSH_XMM 0 |
|
@@ -547,7 +545,7 @@ DECLARE_REG 12, R15, 56 |
|
|
DECLARE_REG 13, R12, 64 |
|
|
DECLARE_REG 13, R12, 64 |
|
|
DECLARE_REG 14, R13, 72 |
|
|
DECLARE_REG 14, R13, 72 |
|
|
|
|
|
|
|
|
%macro PROLOGUE 2-5+ 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names... |
|
|
|
|
|
|
|
|
%macro PROLOGUE 2-5+ 0, 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names... |
|
|
%assign num_args %1 |
|
|
%assign num_args %1 |
|
|
%assign regs_used %2 |
|
|
%assign regs_used %2 |
|
|
%assign xmm_regs_used %3 |
|
|
%assign xmm_regs_used %3 |
|
@@ -557,7 +555,15 @@ DECLARE_REG 14, R13, 72 |
|
|
PUSH_IF_USED 9, 10, 11, 12, 13, 14 |
|
|
PUSH_IF_USED 9, 10, 11, 12, 13, 14 |
|
|
ALLOC_STACK %4 |
|
|
ALLOC_STACK %4 |
|
|
LOAD_IF_USED 6, 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
LOAD_IF_USED 6, 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
DEFINE_ARGS_INTERNAL %0, %4, %5 |
|
|
|
|
|
|
|
|
%if %0 > 4 |
|
|
|
|
|
%ifnum %4 |
|
|
|
|
|
DEFINE_ARGS %5 |
|
|
|
|
|
%else |
|
|
|
|
|
DEFINE_ARGS %4, %5 |
|
|
|
|
|
%endif |
|
|
|
|
|
%elifnnum %4 |
|
|
|
|
|
DEFINE_ARGS %4 |
|
|
|
|
|
%endif |
|
|
%endmacro |
|
|
%endmacro |
|
|
|
|
|
|
|
|
%define has_epilogue regs_used > 9 || stack_size > 0 || vzeroupper_required |
|
|
%define has_epilogue regs_used > 9 || stack_size > 0 || vzeroupper_required |
|
@@ -598,7 +604,7 @@ DECLARE_REG 6, ebp, 28 |
|
|
|
|
|
|
|
|
DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
|
|
|
|
|
|
%macro PROLOGUE 2-5+ ; #args, #regs, #xmm_regs, [stack_size,] arg_names... |
|
|
|
|
|
|
|
|
%macro PROLOGUE 2-5+ 0, 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names... |
|
|
%assign num_args %1 |
|
|
%assign num_args %1 |
|
|
%assign regs_used %2 |
|
|
%assign regs_used %2 |
|
|
ASSERT regs_used >= num_args |
|
|
ASSERT regs_used >= num_args |
|
@@ -613,7 +619,15 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14 |
|
|
PUSH_IF_USED 3, 4, 5, 6 |
|
|
PUSH_IF_USED 3, 4, 5, 6 |
|
|
ALLOC_STACK %4 |
|
|
ALLOC_STACK %4 |
|
|
LOAD_IF_USED 0, 1, 2, 3, 4, 5, 6 |
|
|
LOAD_IF_USED 0, 1, 2, 3, 4, 5, 6 |
|
|
DEFINE_ARGS_INTERNAL %0, %4, %5 |
|
|
|
|
|
|
|
|
%if %0 > 4 |
|
|
|
|
|
%ifnum %4 |
|
|
|
|
|
DEFINE_ARGS %5 |
|
|
|
|
|
%else |
|
|
|
|
|
DEFINE_ARGS %4, %5 |
|
|
|
|
|
%endif |
|
|
|
|
|
%elifnnum %4 |
|
|
|
|
|
DEFINE_ARGS %4 |
|
|
|
|
|
%endif |
|
|
%endmacro |
|
|
%endmacro |
|
|
|
|
|
|
|
|
%define has_epilogue regs_used > 3 || stack_size > 0 || vzeroupper_required |
|
|
%define has_epilogue regs_used > 3 || stack_size > 0 || vzeroupper_required |
|
|