Deleted Added
full compact
X86CallingConv.td (210299) X86CallingConv.td (212904)
1//===- X86CallingConv.td - Calling Conventions X86 32/64 ---*- tablegen -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 19 unchanged lines hidden (view full) ---

28 // the way LLVM does multiple return values -- a return of {i16,i8} would end
29 // up in AX and AH, which overlap. Front-ends wishing to conform to the ABI
30 // for functions that return two i8 values are currently expected to pack the
31 // values into an i16 (which uses AX, and thus AL:AH).
32 CCIfType<[i8] , CCAssignToReg<[AL, DL]>>,
33 CCIfType<[i16], CCAssignToReg<[AX, DX]>>,
34 CCIfType<[i32], CCAssignToReg<[EAX, EDX]>>,
35 CCIfType<[i64], CCAssignToReg<[RAX, RDX]>>,
1//===- X86CallingConv.td - Calling Conventions X86 32/64 ---*- tablegen -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 19 unchanged lines hidden (view full) ---

28 // the way LLVM does multiple return values -- a return of {i16,i8} would end
29 // up in AX and AH, which overlap. Front-ends wishing to conform to the ABI
30 // for functions that return two i8 values are currently expected to pack the
31 // values into an i16 (which uses AX, and thus AL:AH).
32 CCIfType<[i8] , CCAssignToReg<[AL, DL]>>,
33 CCIfType<[i16], CCAssignToReg<[AX, DX]>>,
34 CCIfType<[i32], CCAssignToReg<[EAX, EDX]>>,
35 CCIfType<[i64], CCAssignToReg<[RAX, RDX]>>,
36
37 // Vector types are returned in XMM0 and XMM1, when they fit. XMMM2 and XMM3
36
37 // Vector types are returned in XMM0 and XMM1, when they fit. XMM2 and XMM3
38 // can only be used by ABI non-compliant code. If the target doesn't have XMM
39 // registers, it won't have vector types.
40 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
41 CCAssignToReg<[XMM0,XMM1,XMM2,XMM3]>>,
42
38 // can only be used by ABI non-compliant code. If the target doesn't have XMM
39 // registers, it won't have vector types.
40 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
41 CCAssignToReg<[XMM0,XMM1,XMM2,XMM3]>>,
42
43 // 256-bit vectors are returned in YMM0 and XMM1, when they fit. YMM2 and YMM3
44 // can only be used by ABI non-compliant code. This vector type is only
45 // supported while using the AVX target feature.
46 CCIfType<[v32i8, v16i16, v8i32, v4i64, v8f32, v4f64],
47 CCIfSubtarget<"hasAVX()", CCAssignToReg<[YMM0,YMM1,YMM2,YMM3]>>>,
48
43 // MMX vector types are always returned in MM0. If the target doesn't have
44 // MM0, it doesn't support these vector types.
45 CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToReg<[MM0]>>,
46
47 // Long double types are always returned in ST0 (even with SSE).
48 CCIfType<[f80], CCAssignToReg<[ST0, ST1]>>
49]>;
50

--- 108 unchanged lines hidden (view full) ---

159 CCIfSubtarget<"isTargetDarwin()",
160 CCIfSubtarget<"hasSSE2()",
161 CCPromoteToType<v2i64>>>>,
162
163 // The first 8 FP/Vector arguments are passed in XMM registers.
164 CCIfType<[f32, f64, v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
165 CCIfSubtarget<"hasSSE1()",
166 CCAssignToReg<[XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7]>>>,
49 // MMX vector types are always returned in MM0. If the target doesn't have
50 // MM0, it doesn't support these vector types.
51 CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToReg<[MM0]>>,
52
53 // Long double types are always returned in ST0 (even with SSE).
54 CCIfType<[f80], CCAssignToReg<[ST0, ST1]>>
55]>;
56

--- 108 unchanged lines hidden (view full) ---

165 CCIfSubtarget<"isTargetDarwin()",
166 CCIfSubtarget<"hasSSE2()",
167 CCPromoteToType<v2i64>>>>,
168
169 // The first 8 FP/Vector arguments are passed in XMM registers.
170 CCIfType<[f32, f64, v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
171 CCIfSubtarget<"hasSSE1()",
172 CCAssignToReg<[XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7]>>>,
167
173
174 // The first 8 256-bit vector arguments are passed in YMM registers.
175 CCIfType<[v32i8, v16i16, v8i32, v4i64, v8f32, v4f64],
176 CCIfSubtarget<"hasAVX()",
177 CCAssignToReg<[YMM0, YMM1, YMM2, YMM3, YMM4, YMM5, YMM6, YMM7]>>>,
178
168 // Integer/FP values get stored in stack slots that are 8 bytes in size and
169 // 8-byte aligned if there are no more registers to hold them.
170 CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
179 // Integer/FP values get stored in stack slots that are 8 bytes in size and
180 // 8-byte aligned if there are no more registers to hold them.
181 CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
171
182
172 // Long doubles get stack slots whose size and alignment depends on the
173 // subtarget.
174 CCIfType<[f80], CCAssignToStack<0, 0>>,
175
176 // Vectors get 16-byte stack slots that are 16-byte aligned.
177 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>,
178
183 // Long doubles get stack slots whose size and alignment depends on the
184 // subtarget.
185 CCIfType<[f80], CCAssignToStack<0, 0>>,
186
187 // Vectors get 16-byte stack slots that are 16-byte aligned.
188 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>,
189
190 // 256-bit vectors get 32-byte stack slots that are 32-byte aligned.
191 CCIfType<[v32i8, v16i16, v8i32, v4i64, v8f32, v4f64],
192 CCAssignToStack<32, 32>>,
193
179 // __m64 vectors get 8-byte stack slots that are 8-byte aligned.
180 CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToStack<8, 8>>
181]>;
182
183// Calling convention used on Win64
184def CC_X86_Win64_C : CallingConv<[
185 // FIXME: Handle byval stuff.
186 // FIXME: Handle varargs.

--- 79 unchanged lines hidden (view full) ---

266
267 // Long doubles get slots whose size depends on the subtarget.
268 CCIfType<[f80], CCAssignToStack<0, 4>>,
269
270 // The first 4 SSE vector arguments are passed in XMM registers.
271 CCIfNotVarArg<CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
272 CCAssignToReg<[XMM0, XMM1, XMM2, XMM3]>>>,
273
194 // __m64 vectors get 8-byte stack slots that are 8-byte aligned.
195 CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToStack<8, 8>>
196]>;
197
198// Calling convention used on Win64
199def CC_X86_Win64_C : CallingConv<[
200 // FIXME: Handle byval stuff.
201 // FIXME: Handle varargs.

--- 79 unchanged lines hidden (view full) ---

281
282 // Long doubles get slots whose size depends on the subtarget.
283 CCIfType<[f80], CCAssignToStack<0, 4>>,
284
285 // The first 4 SSE vector arguments are passed in XMM registers.
286 CCIfNotVarArg<CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
287 CCAssignToReg<[XMM0, XMM1, XMM2, XMM3]>>>,
288
289 // The first 4 AVX 256-bit vector arguments are passed in YMM registers.
290 CCIfNotVarArg<CCIfType<[v32i8, v16i16, v8i32, v4i64, v8f32, v4f64],
291 CCIfSubtarget<"hasAVX()",
292 CCAssignToReg<[YMM0, YMM1, YMM2, YMM3]>>>>,
293
274 // Other SSE vectors get 16-byte stack slots that are 16-byte aligned.
275 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>,
276
294 // Other SSE vectors get 16-byte stack slots that are 16-byte aligned.
295 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>,
296
297 // 256-bit AVX vectors get 32-byte stack slots that are 32-byte aligned.
298 CCIfType<[v32i8, v16i16, v8i32, v4i64, v8f32, v4f64],
299 CCAssignToStack<32, 32>>,
300
277 // __m64 vectors get 8-byte stack slots that are 4-byte aligned. They are
278 // passed in the parameter area.
279 CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToStack<8, 4>>]>;
280
281def CC_X86_32_C : CallingConv<[
282 // Promote i8/i16 arguments to i32.
283 CCIfType<[i8, i16], CCPromoteToType<i32>>,
284

--- 74 unchanged lines hidden ---
301 // __m64 vectors get 8-byte stack slots that are 4-byte aligned. They are
302 // passed in the parameter area.
303 CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToStack<8, 4>>]>;
304
305def CC_X86_32_C : CallingConv<[
306 // Promote i8/i16 arguments to i32.
307 CCIfType<[i8, i16], CCPromoteToType<i32>>,
308

--- 74 unchanged lines hidden ---