2 C Expands to 4*i, or to the empty string if i is zero
3 define(<OFFSET>, <ifelse($1,0,,eval(4*$1))>)
6 C Expands to 8*i, or to the empty string if i is zero
7 define(<OFFSET64>, <ifelse($1,0,,eval(8*$1))>)
9 dnl LREG(reg) gives the 8-bit register corresponding to the given 64-bit register.
10 define(<LREG>,<ifelse(
27 define(<HREG>,<ifelse(
33 define(<WREG>,<ifelse(
50 define(<XREG>,<ifelse(
67 dnl W64_ENTRY(nargs, xmm_used)
70 ifelse(<<<<<<<<<<<<<<<<<< ignored; only for balancing)
72 dnl unconditionally push %rdi, making %rsp 16-byte aligned
74 dnl Save %xmm6, ..., if needed
75 ifelse(eval($2 > 6), 1, [
76 sub [$]eval(16*($2 - 6)), %rsp
79 ifelse(eval($2 > 7), 1, [
80 movdqa %xmm7, 16(%rsp)
82 ifelse(eval($2 > 8), 1, [
83 movdqa %xmm8, 32(%rsp)
85 ifelse(eval($2 > 9), 1, [
86 movdqa %xmm9, 48(%rsp)
88 ifelse(eval($2 > 10), 1, [
89 movdqa %xmm10, 64(%rsp)
91 ifelse(eval($2 > 11), 1, [
92 movdqa %xmm11, 80(%rsp)
94 ifelse(eval($2 > 12), 1, [
95 movdqa %xmm12, 96(%rsp)
97 ifelse(eval($2 > 13), 1, [
98 movdqa %xmm13, 112(%rsp)
100 ifelse(eval($2 > 14), 1, [
101 movdqa %xmm14, 128(%rsp)
103 ifelse(eval($2 > 15), 1, [
104 movdqa %xmm15, 144(%rsp)
106 dnl Move around arguments
107 ifelse(eval($1 >= 1), 1, [
110 ifelse(eval($1 >= 2), 1, [
111 dnl NOTE: Breaks 16-byte %rsp alignment
115 ifelse(eval($1 >= 3), 1, [
118 ifelse(eval($1 >= 4), 1, [
121 ifelse(eval($1 >= 5), 1, [
122 mov ifelse(eval($2 > 6), 1, eval(16*($2-6)+56),56)(%rsp), %r8
124 ifelse(eval($1 >= 6), 1, [
125 mov ifelse(eval($2 > 6), 1, eval(16*($2-6)+64),64)(%rsp), %r9
131 dnl W64_EXIT(nargs, xmm_used)
134 ifelse(<<<<<<<<<<< ignored; only for balancing)
136 ifelse(eval($1 >= 2), 1, [
139 ifelse(eval($2 > 15), 1, [
140 movdqa 144(%rsp), %xmm15
142 ifelse(eval($2 > 14), 1, [
143 movdqa 128(%rsp), %xmm14
145 ifelse(eval($2 > 13), 1, [
146 movdqa 112(%rsp), %xmm13
148 ifelse(eval($2 > 12), 1, [
149 movdqa 96(%rsp), %xmm12
151 ifelse(eval($2 > 11), 1, [
152 movdqa 80(%rsp), %xmm11
154 ifelse(eval($2 > 10), 1, [
155 movdqa 64(%rsp), %xmm10
157 ifelse(eval($2 > 9), 1, [
158 movdqa 48(%rsp), %xmm9
160 ifelse(eval($2 > 8), 1, [
161 movdqa 32(%rsp), %xmm8
163 ifelse(eval($2 > 7), 1, [
164 movdqa 16(%rsp), %xmm7
166 ifelse(eval($2 > 6), 1, [
168 add [$]eval(16*($2 - 6)), %rsp