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 --- |