Revert "Merge branch 'upstream' into tizen"
[platform/upstream/nettle.git] / x86_64 / machine.m4
1 C OFFSET(i)
2 C Expands to 4*i, or to the empty string if i is zero
3 define(<OFFSET>, <ifelse($1,0,,eval(4*$1))>)
4
5 C OFFSET64(i)
6 C Expands to 8*i, or to the empty string if i is zero
7 define(<OFFSET64>, <ifelse($1,0,,eval(8*$1))>)
8
9 dnl LREG(reg) gives the 8-bit register corresponding to the given 64-bit register.
10 define(<LREG>,<ifelse(
11         $1, %rax, %al,
12         $1, %rbx, %bl,
13         $1, %rcx, %cl,
14         $1, %rdx, %dl,
15         $1, %rsi, %sil,
16         $1, %rdi, %dil,
17         $1, %rbp, %bpl,
18         $1, %r8, %r8b,
19         $1, %r9, %r9b,
20         $1, %r10, %r10b,
21         $1, %r11, %r11b,
22         $1, %r12, %r12b,
23         $1, %r13, %r13b,
24         $1, %r14, %r14b,
25         $1, %r15, %r15b)>)dnl
26
27 define(<HREG>,<ifelse(
28         $1, %rax, %ah,
29         $1, %rbx, %bh,
30         $1, %rcx, %ch,
31         $1, %rdx, %dh)>)dnl
32
33 define(<WREG>,<ifelse(
34         $1, %rax, %ax,
35         $1, %rbx, %bx,
36         $1, %rcx, %cx,
37         $1, %rdx, %dx,
38         $1, %rsi, %si,
39         $1, %rdi, %di,
40         $1, %rbp, %bp,
41         $1, %r8, %r8w,
42         $1, %r9, %r9w,
43         $1, %r10, %r10w,
44         $1, %r11, %r11w,
45         $1, %r12, %r12w,
46         $1, %r13, %r13w,
47         $1, %r14, %r14w,
48         $1, %r15, %r15w)>)dnl
49
50 define(<XREG>,<ifelse(
51         $1, %rax, %eax,
52         $1, %rbx, %ebx,
53         $1, %rcx, %ecx,
54         $1, %rdx, %edx,
55         $1, %rsi, %esi,
56         $1, %rdi, %edi,
57         $1, %rbp, %ebp,
58         $1, %r8, %r8d,
59         $1, %r9, %r9d,
60         $1, %r10, %r10d,
61         $1, %r11, %r11d,
62         $1, %r12, %r12d,
63         $1, %r13, %r13d,
64         $1, %r14, %r14d,
65         $1, %r15, %r15d)>)dnl
66
67 dnl W64_ENTRY(nargs, xmm_used)
68 define(<W64_ENTRY>, <
69   changequote([,])dnl
70   ifelse(<<<<<<<<<<<<<<<< ignored; only for balancing)
71   ifelse(W64_ABI,yes,[
72     ifelse(eval($2 > 6), 1, [
73       sub       [$]eval(8 + 16*($2 - 6)), %rsp
74       movdqu    %xmm6, 0(%rsp)
75     ])
76     ifelse(eval($2 > 7), 1, [
77       movdqu    %xmm7, 16(%rsp)
78     ])
79     ifelse(eval($2 > 8), 1, [
80       movdqu    %xmm8, 32(%rsp)
81     ])
82     ifelse(eval($2 > 9), 1, [
83       movdqu    %xmm9, 48(%rsp)
84     ])
85     ifelse(eval($2 > 10), 1, [
86       movdqu    %xmm10, 64(%rsp)
87     ])
88     ifelse(eval($2 > 11), 1, [
89       movdqu    %xmm11, 80(%rsp)
90     ])
91     ifelse(eval($2 > 12), 1, [
92       movdqu    %xmm12, 96(%rsp)
93     ])
94     ifelse(eval($2 > 13), 1, [
95       movdqu    %xmm13, 112(%rsp)
96     ])
97     ifelse(eval($2 > 14), 1, [
98       movdqu    %xmm14, 128(%rsp)
99     ])
100     ifelse(eval($2 > 15), 1, [
101       movdqu    %xmm15, 144(%rsp)
102     ])
103     ifelse(eval($1 >= 1), 1, [
104       push      %rdi
105       mov       %rcx, %rdi
106     ])
107     ifelse(eval($1 >= 2), 1, [
108       push      %rsi
109       mov       %rdx, %rsi
110     ])
111     ifelse(eval($1 >= 3), 1, [
112       mov       %r8, %rdx
113     ])
114     ifelse(eval($1 >= 4), 1, [
115       mov       %r9, %rcx
116     ])
117     ifelse(eval($1 >= 5), 1, [
118       ifelse(eval($2 > 6), 1, [
119         mov     eval(8 + 16*($2 - 6) + 56)(%rsp), %r8
120       ], [
121         mov     56(%rsp), %r8
122       ])
123     ])
124   ])
125   changequote(<,>)dnl
126 >)
127
128 dnl W64_EXIT(nargs, xmm_used)
129 define(<W64_EXIT>, <
130   changequote([,])dnl
131   ifelse(<<<<<<<<<<<< ignored; only for balancing)
132   ifelse(W64_ABI,yes,[
133     ifelse(eval($1 >= 2), 1, [
134       pop       %rsi
135     ])
136     ifelse(eval($1 >= 1), 1, [
137       pop       %rdi
138     ])
139     ifelse(eval($2 > 15), 1, [
140       movdqu    144(%rsp), %xmm15
141     ])
142     ifelse(eval($2 > 14), 1, [
143       movdqu    128(%rsp), %xmm14
144     ])
145     ifelse(eval($2 > 13), 1, [
146       movdqu    112(%rsp), %xmm13
147     ])
148     ifelse(eval($2 > 12), 1, [
149       movdqu    96(%rsp), %xmm12
150     ])
151     ifelse(eval($2 > 11), 1, [
152       movdqu    80(%rsp), %xmm11
153     ])
154     ifelse(eval($2 > 10), 1, [
155       movdqu    64(%rsp), %xmm10
156     ])
157     ifelse(eval($2 > 9), 1, [
158       movdqu    48(%rsp), %xmm9
159     ])
160     ifelse(eval($2 > 8), 1, [
161       movdqu    32(%rsp), %xmm8
162     ])
163     ifelse(eval($2 > 7), 1, [
164       movdqu    16(%rsp), %xmm7
165     ])
166     ifelse(eval($2 > 6), 1, [
167       movdqu    0(%rsp), %xmm6
168       add       [$]eval(8 + 16*($2 - 6)), %rsp
169     ])
170   ])
171   changequote(<,>)dnl
172 >)