mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
Passing AVX 256-bit structures in Win64 was wrong.
Fixed Win64 calling conventions. llvm-svn: 149494
This commit is contained in:
parent
f63bfb1b5d
commit
455db87d41
@ -198,6 +198,10 @@ def CC_X86_Win64_C : CallingConv<[
|
|||||||
// 128 bit vectors are passed by pointer
|
// 128 bit vectors are passed by pointer
|
||||||
CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCPassIndirect<i64>>,
|
CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCPassIndirect<i64>>,
|
||||||
|
|
||||||
|
|
||||||
|
// 256 bit vectors are passed by pointer
|
||||||
|
CCIfType<[v32i8, v16i16, v8i32, v4i64, v8f32, v4f64], CCPassIndirect<i64>>,
|
||||||
|
|
||||||
// The first 4 MMX vector arguments are passed in GPRs.
|
// The first 4 MMX vector arguments are passed in GPRs.
|
||||||
CCIfType<[x86mmx], CCBitConvertToType<i64>>,
|
CCIfType<[x86mmx], CCBitConvertToType<i64>>,
|
||||||
|
|
||||||
|
18
test/CodeGen/X86/avx-win64-args.ll
Executable file
18
test/CodeGen/X86/avx-win64-args.ll
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
; RUN: llc < %s -mcpu=corei7-avx -mattr=+avx | FileCheck %s
|
||||||
|
target triple = "x86_64-pc-win32"
|
||||||
|
|
||||||
|
declare <8 x float> @foo(<8 x float>, i32)
|
||||||
|
|
||||||
|
define <8 x float> @test1(<8 x float> %x, <8 x float> %y) nounwind uwtable readnone ssp {
|
||||||
|
entry:
|
||||||
|
; CHECK: test1
|
||||||
|
; CHECK: leaq {{.*}}, %rcx
|
||||||
|
; CHECK: movl {{.*}}, %edx
|
||||||
|
; CHECK: call
|
||||||
|
; CHECK: ret
|
||||||
|
%x1 = fadd <8 x float> %x, %y
|
||||||
|
%call = call <8 x float> @foo(<8 x float> %x1, i32 1) nounwind
|
||||||
|
%y1 = fsub <8 x float> %call, %y
|
||||||
|
ret <8 x float> %y1
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,6 @@ target triple = "x86_64-pc-win32"
|
|||||||
|
|
||||||
; CHECK: f___vyf
|
; CHECK: f___vyf
|
||||||
; CHECK: pushq %rbp
|
; CHECK: pushq %rbp
|
||||||
; CHECK-NOT: vmovaps{{.*}}(%r
|
|
||||||
; CHECK: vmovmsk
|
; CHECK: vmovmsk
|
||||||
; CHECK: vmovaps %ymm{{.*}}(%r
|
; CHECK: vmovaps %ymm{{.*}}(%r
|
||||||
; CHECK: vmovaps %ymm{{.*}}(%r
|
; CHECK: vmovaps %ymm{{.*}}(%r
|
||||||
|
Loading…
x
Reference in New Issue
Block a user