From 5b53f9438e1ad4bc46a317f092ae4a0597d905e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> Date: Fri, 25 Nov 2011 15:47:12 +0100 Subject: [PATCH] * x86_64/machine.m4 (W64_ENTRY, W64_EXIT): New macros for supporting W64 ABI. Rev: nettle/x86_64/machine.m4:1.3 --- x86_64/machine.m4 | 103 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/x86_64/machine.m4 b/x86_64/machine.m4 index e3b38244..c0de0c87 100644 --- a/x86_64/machine.m4 +++ b/x86_64/machine.m4 @@ -42,3 +42,106 @@ define(<XREG>,<ifelse( $1, %r13, %r13d, $1, %r14, %r14d, $1, %r15, %r15d)>)dnl + +dnl W64_ENTRY(nargs, xmm_used) +define(<W64_ENTRY>, < + changequote([,])dnl + ifelse(<<<<<<<<<<<<<<< ignored; only for balancing) + ifelse(W64_ABI,yes,[ + ifelse(eval($2 > 6), 1, [ + sub [$]eval(8 + 16*($2 - 6)), %rsp + movdqa %xmm6, 0(%rsp) + ]) + ifelse(eval($2 > 7), 1, [ + movdqa %xmm7, 16(%rsp) + ]) + ifelse(eval($2 > 8), 1, [ + movdqa %xmm8, 32(%rsp) + ]) + ifelse(eval($2 > 9), 1, [ + movdqa %xmm9, 48(%rsp) + ]) + ifelse(eval($2 > 10), 1, [ + movdqa %xmm10, 64(%rsp) + ]) + ifelse(eval($2 > 11), 1, [ + movdqa %xmm11, 80(%rsp) + ]) + ifelse(eval($2 > 12), 1, [ + movdqa %xmm12, 96(%rsp) + ]) + ifelse(eval($2 > 13), 1, [ + movdqa %xmm13, 112(%rsp) + ]) + ifelse(eval($2 > 14), 1, [ + movdqa %xmm14, 128(%rsp) + ]) + ifelse(eval($2 > 15), 1, [ + movdqa %xmm15, 144(%rsp) + ]) + ifelse(eval($1 >= 1), 1, [ + push %rdi + mov %rcx, %rdi + ]) + ifelse(eval($1 >= 2), 1, [ + push %rsi + mov %rdx, %rsi + ]) + ifelse(eval($1 >= 3), 1, [ + mov %r8, %rdx + ]) + ifelse(eval($1 >= 4), 1, [ + mov %r9, %rcx + ]) + ifelse(eval($1 >= 5), 1, [ + mov 56(%rsp), %r8 + ]) + ]) + changequote(<,>)dnl +>) + +dnl W64_EXIT(nargs, xmm_used) +define(<W64_EXIT>, < + changequote([,])dnl + ifelse(<<<<<<<<<<<< ignored; only for balancing) + ifelse(W64_ABI,yes,[ + ifelse(eval($1 >= 2), 1, [ + pop %rsi + ]) + ifelse(eval($1 >= 1), 1, [ + pop %rdi + ]) + ifelse(eval($2 > 15), 1, [ + movdqa 144(%rsp), %xmm15 + ]) + ifelse(eval($2 > 14), 1, [ + movdqa 128(%rsp), %xmm14 + ]) + ifelse(eval($2 > 13), 1, [ + movdqa 112(%rsp), %xmm13 + ]) + ifelse(eval($2 > 12), 1, [ + movdqa 96(%rsp), %xmm12 + ]) + ifelse(eval($2 > 11), 1, [ + movdqa 80(%rsp), %xmm11 + ]) + ifelse(eval($2 > 10), 1, [ + movdqa 64(%rsp), %xmm10 + ]) + ifelse(eval($2 > 9), 1, [ + movdqa 48(%rsp), %xmm9 + ]) + ifelse(eval($2 > 8), 1, [ + movdqa 32(%rsp), %xmm8 + ]) + ifelse(eval($2 > 7), 1, [ + movdqa 16(%rsp), %xmm7 + ]) + ifelse(eval($2 > 6), 1, [ + movdqa 0(%rsp), %xmm6 + add [$]eval(8 + 16*($2 - 6)), %rsp + ]) + ]) + changequote(<,>)dnl +>) -- GitLab