1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+f16c | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+f16c | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+f16c | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; 7*9880d681SAndroid Build Coastguard Worker; Half to Float 8*9880d681SAndroid Build Coastguard Worker; 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine float @cvt_i16_to_f32(i16 %a0) { 11*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_i16_to_f32: 12*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 13*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %di, %eax 14*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 15*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 16*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 17*9880d681SAndroid Build Coastguard Worker %1 = bitcast i16 %a0 to half 18*9880d681SAndroid Build Coastguard Worker %2 = fpext half %1 to float 19*9880d681SAndroid Build Coastguard Worker ret float %2 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @cvt_4i16_to_4f32(<4 x i16> %a0) { 23*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4i16_to_4f32: 24*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 25*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 26*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %xmm0, %rax 27*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rcx 28*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rdx 29*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %esi 30*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 31*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %eax 32*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $32, %rcx 33*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $48, %rdx 34*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %dx, %edx 35*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edx, %xmm0 36*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 37*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %cx, %ecx 38*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm1 39*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 40*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 41*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm2 42*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 43*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %esi, %xmm3 44*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 45*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3] 46*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 47*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 48*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 49*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i16> %a0 to <4 x half> 50*9880d681SAndroid Build Coastguard Worker %2 = fpext <4 x half> %1 to <4 x float> 51*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @cvt_8i16_to_4f32(<8 x i16> %a0) { 55*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_8i16_to_4f32: 56*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 57*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %xmm0, %rax 58*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rcx 59*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rdx 60*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %esi 61*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 62*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %eax 63*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $32, %rcx 64*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $48, %rdx 65*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %dx, %edx 66*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edx, %xmm0 67*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 68*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %cx, %ecx 69*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm1 70*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 71*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 72*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm2 73*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 74*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %esi, %xmm3 75*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 76*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3] 77*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 78*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 79*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 80*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 81*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i16> %1 to <4 x half> 82*9880d681SAndroid Build Coastguard Worker %3 = fpext <4 x half> %2 to <4 x float> 83*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @cvt_8i16_to_8f32(<8 x i16> %a0) { 87*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8i16_to_8f32: 88*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 89*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrq $1, %xmm0, %rdx 90*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdx, %r8 91*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdx, %r10 92*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %dx, %r9d 93*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %EDX<def> %EDX<kill> %RDX<kill> 94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %edx 95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %r8 96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %r10 97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm0, %rdi 98*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %rax 99*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %rsi 100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %di, %ecx 101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<kill> 102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %edi 103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %rax 104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rsi 105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %si, %esi 106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %esi, %xmm0 107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm0 108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: cwtl 109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm1 110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm1, %xmm1 111*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %di, %eax 112*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm2 113*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm2, %xmm2 114*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm3 115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm3, %xmm3 116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %r10w, %eax 117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm4 118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm4, %xmm4 119*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %r8w, %eax 120*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm5 121*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm5, %xmm5 122*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %dx, %eax 123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm6 124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm6, %xmm6 125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %r9d, %xmm7 126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm7, %xmm7 127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[2,3] 128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3] 131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker; 136*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8i16_to_8f32: 137*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrq $1, %xmm0, %rdx 139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdx, %r8 140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdx, %r10 141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %dx, %r9d 142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %EDX<def> %EDX<kill> %RDX<kill> 143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %edx 144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %r8 145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %r10 146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm0, %rdi 147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %rax 148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %rsi 149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %di, %ecx 150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<kill> 151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %edi 152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %rax 153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rsi 154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %si, %esi 155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %esi, %xmm0 156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0 157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: cwtl 158*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm1 159*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1 160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %di, %eax 161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm2 162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm2, %xmm2 163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm3 164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm3, %xmm3 165*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %r10w, %eax 166*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm4 167*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm4, %xmm4 168*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %r8w, %eax 169*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm5 170*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm5, %xmm5 171*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %dx, %eax 172*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm6 173*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm6, %xmm6 174*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %r9d, %xmm7 175*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm7, %xmm7 176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[2,3] 177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 178*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 179*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3] 180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 183*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 184*9880d681SAndroid Build Coastguard Worker; 185*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8i16_to_8f32: 186*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpextrq $1, %xmm0, %rdx 188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdx, %r8 189*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdx, %r10 190*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %dx, %r9d 191*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %EDX<def> %EDX<kill> %RDX<kill> 192*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %edx 193*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %r8 194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %r10 195*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %xmm0, %rdi 196*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %rax 197*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %rsi 198*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %di, %ecx 199*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<kill> 200*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %edi 201*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %rax 202*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rsi 203*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %si, %esi 204*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %esi, %xmm0 205*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0 206*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: cwtl 207*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm1 208*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1 209*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %di, %eax 210*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm2 211*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2 212*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm3 213*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3 214*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %r10w, %eax 215*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm4 216*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4 217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %r8w, %eax 218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm5 219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5 220*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %dx, %eax 221*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm6 222*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6 223*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %r9d, %xmm7 224*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7 225*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[2,3] 226*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 227*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 228*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3] 229*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 230*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 231*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm0, %ymm0 232*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 233*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i16> %a0 to <8 x half> 234*9880d681SAndroid Build Coastguard Worker %2 = fpext <8 x half> %1 to <8 x float> 235*9880d681SAndroid Build Coastguard Worker ret <8 x float> %2 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @cvt_16i16_to_16f32(<16 x i16> %a0) { 239*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_16i16_to_16f32: 240*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm4, %rax 243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rcx 245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm8 247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %rcx 249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm9 251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %ax, %ecx 252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %eax 254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: cwtl 255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm10 256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrq $1, %xmm4, %rax 257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm11 258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rcx 260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm12 262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %rcx 264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm13 266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %ax, %ecx 267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %eax 269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: cwtl 270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm14 271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm0, %rax 272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm15 273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rcx 275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm2 277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %rcx 279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm3 281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %ax, %ecx 282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %eax 284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: cwtl 285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm4 286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrq $1, %xmm0, %rax 287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm0 288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rcx 290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm5 292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rax, %rcx 293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %rcx 294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm6 296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %ecx 297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %ecx 298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %cx, %ecx 299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm7 300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: cwtl 301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm1 302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm8, %xmm8 303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm9, %xmm9 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm10, %xmm10 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm11, %xmm11 306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm12, %xmm12 307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm13, %xmm13 308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm14, %xmm14 309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm15, %xmm15 310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm2, %xmm2 311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm3, %xmm3 312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm4, %xmm4 313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm0 314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm5, %xmm5 315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm6, %xmm6 316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm7, %xmm7 317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm1, %xmm1 318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[2,3] 319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3] 320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0] 321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[2,3] 322*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm3[0],xmm0[3] 323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[0] 324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm15[0],xmm14[0],xmm15[2,3] 326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3] 327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0] 328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm11[0],xmm10[0],xmm11[2,3] 329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3] 330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0] 331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 333*9880d681SAndroid Build Coastguard Worker; 334*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_16i16_to_16f32: 335*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 336*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4 337*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm4, %rax 338*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 339*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rcx 340*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 341*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm8 342*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 343*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %rcx 344*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 345*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm9 346*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %ax, %ecx 347*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 348*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %eax 349*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: cwtl 350*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm10 351*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrq $1, %xmm4, %rax 352*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm11 353*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 354*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rcx 355*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 356*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm12 357*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 358*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %rcx 359*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 360*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm13 361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %ax, %ecx 362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 363*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %eax 364*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: cwtl 365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm14 366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm0, %rax 367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm15 368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rcx 370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm2 372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %rcx 374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm3 376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %ax, %ecx 377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %eax 379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: cwtl 380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm4 381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrq $1, %xmm0, %rax 382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm0 383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rcx 385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm5 387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rax, %rcx 388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %rcx 389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm6 391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %ecx 392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %ecx 393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %cx, %ecx 394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm7 395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: cwtl 396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm1 397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm8, %xmm8 398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm9, %xmm9 399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm10, %xmm10 400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm11, %xmm11 401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm12, %xmm12 402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm13, %xmm13 403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm14, %xmm14 404*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm15, %xmm15 405*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm2, %xmm2 406*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm3, %xmm3 407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm4, %xmm4 408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0 409*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm5, %xmm5 410*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm6, %xmm6 411*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm7, %xmm7 412*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1 413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[2,3] 414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3] 415*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0] 416*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[2,3] 417*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm3[0],xmm0[3] 418*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[0] 419*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 420*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm15[0],xmm14[0],xmm15[2,3] 421*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3] 422*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0] 423*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm11[0],xmm10[0],xmm11[2,3] 424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3] 425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0] 426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 428*9880d681SAndroid Build Coastguard Worker; 429*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_16i16_to_16f32: 430*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 431*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm10 432*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %xmm0, %rax 433*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 434*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rcx 435*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm8 437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %rcx 439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm9 441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %ax, %ecx 442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %eax 444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: cwtl 445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm11 446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpextrq $1, %xmm0, %rax 447*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm12 448*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 449*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rcx 450*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 451*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm13 452*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 453*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %rcx 454*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 455*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm14 456*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %ax, %ecx 457*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 458*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %eax 459*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: cwtl 460*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm15 461*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %xmm10, %rax 462*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm2 463*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 464*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rcx 465*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 466*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm3 467*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 468*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %rcx 469*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 470*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm1 471*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %ax, %ecx 472*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 473*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %eax 474*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: cwtl 475*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm4 476*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpextrq $1, %xmm10, %rax 477*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm10 478*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 479*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rcx 480*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 481*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm5 482*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rax, %rcx 483*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %rcx 484*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 485*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm6 486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %ecx 487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %ecx 488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %cx, %ecx 489*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm7 490*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: cwtl 491*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 492*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm8, %xmm8 493*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm9, %xmm9 494*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm11, %xmm11 495*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm12, %xmm12 496*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm13, %xmm13 497*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm14, %xmm14 498*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm15, %xmm15 499*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2 500*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3 501*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1 502*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4 503*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm10, %xmm10 504*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5 505*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6 506*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7 507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0 508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[2,3] 509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm6[0],xmm0[3] 510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm5[0] 511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm4 = xmm10[0],xmm4[0],xmm10[2,3] 512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm4[0,1],xmm1[0],xmm4[3] 513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm3[0] 514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm15[0],xmm2[2,3] 516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm14[0],xmm1[3] 517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm13[0] 518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm12[0],xmm11[0],xmm12[2,3] 519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3] 520*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0] 521*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm1 522*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0 523*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 524*9880d681SAndroid Build Coastguard Worker %1 = bitcast <16 x i16> %a0 to <16 x half> 525*9880d681SAndroid Build Coastguard Worker %2 = fpext <16 x half> %1 to <16 x float> 526*9880d681SAndroid Build Coastguard Worker ret <16 x float> %2 527*9880d681SAndroid Build Coastguard Worker} 528*9880d681SAndroid Build Coastguard Worker 529*9880d681SAndroid Build Coastguard Worker; 530*9880d681SAndroid Build Coastguard Worker; Half to Float (Load) 531*9880d681SAndroid Build Coastguard Worker; 532*9880d681SAndroid Build Coastguard Worker 533*9880d681SAndroid Build Coastguard Workerdefine float @load_cvt_i16_to_f32(i16* %a0) { 534*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_i16_to_f32: 535*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 536*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl (%rdi), %eax 537*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 538*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 539*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 540*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %a0 541*9880d681SAndroid Build Coastguard Worker %2 = bitcast i16 %1 to half 542*9880d681SAndroid Build Coastguard Worker %3 = fpext half %2 to float 543*9880d681SAndroid Build Coastguard Worker ret float %3 544*9880d681SAndroid Build Coastguard Worker} 545*9880d681SAndroid Build Coastguard Worker 546*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @load_cvt_4i16_to_4f32(<4 x i16>* %a0) { 547*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_4i16_to_4f32: 548*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 549*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 6(%rdi), %eax 550*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 551*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 552*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 4(%rdi), %eax 553*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm1 554*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 555*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl (%rdi), %eax 556*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm2 557*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 558*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 2(%rdi), %eax 559*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm3 560*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 561*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3] 562*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 563*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 564*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 565*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i16>, <4 x i16>* %a0 566*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i16> %1 to <4 x half> 567*9880d681SAndroid Build Coastguard Worker %3 = fpext <4 x half> %2 to <4 x float> 568*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 569*9880d681SAndroid Build Coastguard Worker} 570*9880d681SAndroid Build Coastguard Worker 571*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @load_cvt_8i16_to_4f32(<8 x i16>* %a0) { 572*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_8i16_to_4f32: 573*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 574*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq (%rdi), %rax 575*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rcx 576*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rdx 577*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %esi 578*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: # kill: %EAX<def> %EAX<kill> %RAX<kill> 579*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %eax 580*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $32, %rcx 581*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $48, %rdx 582*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %dx, %edx 583*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edx, %xmm0 584*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 585*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %cx, %ecx 586*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm1 587*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 588*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 589*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm2 590*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 591*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %esi, %xmm3 592*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 593*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3] 594*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 595*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 596*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 597*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 598*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 599*9880d681SAndroid Build Coastguard Worker %3 = bitcast <4 x i16> %2 to <4 x half> 600*9880d681SAndroid Build Coastguard Worker %4 = fpext <4 x half> %3 to <4 x float> 601*9880d681SAndroid Build Coastguard Worker ret <4 x float> %4 602*9880d681SAndroid Build Coastguard Worker} 603*9880d681SAndroid Build Coastguard Worker 604*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @load_cvt_8i16_to_8f32(<8 x i16>* %a0) { 605*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: load_cvt_8i16_to_8f32: 606*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 6(%rdi), %eax 608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm0 610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 4(%rdi), %eax 611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm1 612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm1, %xmm1 613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl (%rdi), %eax 614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm2 615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm2, %xmm2 616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 2(%rdi), %eax 617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm3 618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm3, %xmm3 619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 14(%rdi), %eax 620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm4 621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm4, %xmm4 622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 12(%rdi), %eax 623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm5 624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm5, %xmm5 625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 8(%rdi), %eax 626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm6 627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm6, %xmm6 628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 10(%rdi), %eax 629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm7 630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm7, %xmm7 631*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3] 632*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 633*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 634*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3] 635*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 636*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 639*9880d681SAndroid Build Coastguard Worker; 640*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: load_cvt_8i16_to_8f32: 641*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 6(%rdi), %eax 643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0 645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 4(%rdi), %eax 646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm1 647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1 648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl (%rdi), %eax 649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm2 650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm2, %xmm2 651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 2(%rdi), %eax 652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm3 653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm3, %xmm3 654*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 14(%rdi), %eax 655*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm4 656*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm4, %xmm4 657*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 12(%rdi), %eax 658*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm5 659*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm5, %xmm5 660*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 8(%rdi), %eax 661*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm6 662*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm6, %xmm6 663*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 10(%rdi), %eax 664*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm7 665*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm7, %xmm7 666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3] 667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 668*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 669*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3] 670*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 673*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 674*9880d681SAndroid Build Coastguard Worker; 675*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: load_cvt_8i16_to_8f32: 676*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 677*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 6(%rdi), %eax 678*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 679*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0 680*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 4(%rdi), %eax 681*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm1 682*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1 683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl (%rdi), %eax 684*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm2 685*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2 686*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 2(%rdi), %eax 687*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm3 688*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3 689*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 14(%rdi), %eax 690*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm4 691*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4 692*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 12(%rdi), %eax 693*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm5 694*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5 695*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 8(%rdi), %eax 696*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm6 697*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6 698*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 10(%rdi), %eax 699*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm7 700*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7 701*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3] 702*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 703*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 704*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3] 705*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 706*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 707*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm0, %ymm0 708*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 709*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 710*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i16> %1 to <8 x half> 711*9880d681SAndroid Build Coastguard Worker %3 = fpext <8 x half> %2 to <8 x float> 712*9880d681SAndroid Build Coastguard Worker ret <8 x float> %3 713*9880d681SAndroid Build Coastguard Worker} 714*9880d681SAndroid Build Coastguard Worker 715*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @load_cvt_16i16_to_16f32(<16 x i16>* %a0) { 716*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: load_cvt_16i16_to_16f32: 717*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 22(%rdi), %eax 719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm8 721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 20(%rdi), %eax 722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm9 724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 16(%rdi), %eax 725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm10 727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 18(%rdi), %eax 728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm11 730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 30(%rdi), %eax 731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm12 733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 28(%rdi), %eax 734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm13 736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 24(%rdi), %eax 737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm14 739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 26(%rdi), %eax 740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm15 742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 6(%rdi), %eax 743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm0 745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 4(%rdi), %eax 746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm2 747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm2, %xmm2 748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl (%rdi), %eax 749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm3 750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm3, %xmm3 751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 2(%rdi), %eax 752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm4 753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm4, %xmm4 754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 14(%rdi), %eax 755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm5 756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm5, %xmm5 757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 12(%rdi), %eax 758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm6 759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm6, %xmm6 760*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 8(%rdi), %eax 761*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm7 762*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm7, %xmm7 763*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 10(%rdi), %eax 764*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm1 765*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm1, %xmm1 766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm7[0],xmm1[0],xmm7[2,3] 767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3] 768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0] 769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[2,3] 770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0,1],xmm2[0],xmm3[3] 771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0] 772*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 773*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm14[0],xmm15[0],xmm14[2,3] 774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3] 775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0] 776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm10[0],xmm11[0],xmm10[2,3] 777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3] 778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0] 779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 781*9880d681SAndroid Build Coastguard Worker; 782*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: load_cvt_16i16_to_16f32: 783*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 22(%rdi), %eax 785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm8 787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 20(%rdi), %eax 788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm9 790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 16(%rdi), %eax 791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm10 793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 18(%rdi), %eax 794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm11 796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 30(%rdi), %eax 797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm12 799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 28(%rdi), %eax 800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm13 802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 24(%rdi), %eax 803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm14 805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 26(%rdi), %eax 806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm15 808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 6(%rdi), %eax 809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0 811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 4(%rdi), %eax 812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm2 813*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm2, %xmm2 814*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl (%rdi), %eax 815*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm3 816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm3, %xmm3 817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 2(%rdi), %eax 818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm4 819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm4, %xmm4 820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 14(%rdi), %eax 821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm5 822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm5, %xmm5 823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 12(%rdi), %eax 824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm6 825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm6, %xmm6 826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 8(%rdi), %eax 827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm7 828*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm7, %xmm7 829*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 10(%rdi), %eax 830*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm1 831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1 832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm7[0],xmm1[0],xmm7[2,3] 833*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3] 834*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0] 835*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[2,3] 836*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0,1],xmm2[0],xmm3[3] 837*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0] 838*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 839*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm14[0],xmm15[0],xmm14[2,3] 840*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3] 841*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0] 842*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm10[0],xmm11[0],xmm10[2,3] 843*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3] 844*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0] 845*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 846*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 847*9880d681SAndroid Build Coastguard Worker; 848*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: load_cvt_16i16_to_16f32: 849*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 850*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 6(%rdi), %eax 851*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 852*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm8 853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 4(%rdi), %eax 854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm9 856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl (%rdi), %eax 857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm10 859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 2(%rdi), %eax 860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 861*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm11 862*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 14(%rdi), %eax 863*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 864*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm12 865*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 12(%rdi), %eax 866*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 867*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm13 868*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 8(%rdi), %eax 869*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 870*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm14 871*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 10(%rdi), %eax 872*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 873*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm15 874*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 22(%rdi), %eax 875*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 876*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0 877*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 20(%rdi), %eax 878*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm1 879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1 880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 16(%rdi), %eax 881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm2 882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2 883*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 18(%rdi), %eax 884*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm3 885*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3 886*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 30(%rdi), %eax 887*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm4 888*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4 889*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 28(%rdi), %eax 890*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm5 891*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5 892*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 24(%rdi), %eax 893*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm6 894*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6 895*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 26(%rdi), %eax 896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm7 897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7 898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3] 899*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3] 900*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0] 901*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3] 902*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 903*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 904*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm0, %ymm0 905*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm14[0],xmm15[0],xmm14[2,3] 906*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3] 907*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0] 908*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm10[0],xmm11[0],xmm10[2,3] 909*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3] 910*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0] 911*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm1 912*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0 913*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 914*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i16>, <16 x i16>* %a0 915*9880d681SAndroid Build Coastguard Worker %2 = bitcast <16 x i16> %1 to <16 x half> 916*9880d681SAndroid Build Coastguard Worker %3 = fpext <16 x half> %2 to <16 x float> 917*9880d681SAndroid Build Coastguard Worker ret <16 x float> %3 918*9880d681SAndroid Build Coastguard Worker} 919*9880d681SAndroid Build Coastguard Worker 920*9880d681SAndroid Build Coastguard Worker; 921*9880d681SAndroid Build Coastguard Worker; Half to Double 922*9880d681SAndroid Build Coastguard Worker; 923*9880d681SAndroid Build Coastguard Worker 924*9880d681SAndroid Build Coastguard Workerdefine double @cvt_i16_to_f64(i16 %a0) { 925*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_i16_to_f64: 926*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 927*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %di, %eax 928*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 929*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 930*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 931*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 932*9880d681SAndroid Build Coastguard Worker %1 = bitcast i16 %a0 to half 933*9880d681SAndroid Build Coastguard Worker %2 = fpext half %1 to double 934*9880d681SAndroid Build Coastguard Worker ret double %2 935*9880d681SAndroid Build Coastguard Worker} 936*9880d681SAndroid Build Coastguard Worker 937*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @cvt_2i16_to_2f64(<2 x i16> %a0) { 938*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_2i16_to_2f64: 939*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 940*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 941*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7] 942*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %eax 943*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %ecx 944*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %eax 945*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 946*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 947*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 948*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm1 949*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 950*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 951*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 952*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 953*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 954*9880d681SAndroid Build Coastguard Worker %1 = bitcast <2 x i16> %a0 to <2 x half> 955*9880d681SAndroid Build Coastguard Worker %2 = fpext <2 x half> %1 to <2 x double> 956*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 957*9880d681SAndroid Build Coastguard Worker} 958*9880d681SAndroid Build Coastguard Worker 959*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @cvt_4i16_to_4f64(<4 x i16> %a0) { 960*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4i16_to_4f64: 961*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 962*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 963*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %xmm0, %rax 964*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rcx 965*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movl %eax, %edx 966*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %esi 967*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $48, %rax 968*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $32, %rcx 969*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %edx 970*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %dx, %edx 971*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edx, %xmm0 972*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 973*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %esi, %xmm1 974*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 975*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %cx, %ecx 976*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm2 977*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 978*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 979*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm3 980*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 981*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 982*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 983*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 984*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 985*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 986*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 987*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 988*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 989*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i16> %a0 to <4 x half> 990*9880d681SAndroid Build Coastguard Worker %2 = fpext <4 x half> %1 to <4 x double> 991*9880d681SAndroid Build Coastguard Worker ret <4 x double> %2 992*9880d681SAndroid Build Coastguard Worker} 993*9880d681SAndroid Build Coastguard Worker 994*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @cvt_8i16_to_2f64(<8 x i16> %a0) { 995*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_8i16_to_2f64: 996*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 997*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %eax 998*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %ecx 999*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %eax 1000*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 1001*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 1002*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 1003*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm1 1004*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 1005*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1006*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1007*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1008*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1009*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <2 x i32> <i32 0, i32 1> 1010*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %1 to <2 x half> 1011*9880d681SAndroid Build Coastguard Worker %3 = fpext <2 x half> %2 to <2 x double> 1012*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 1013*9880d681SAndroid Build Coastguard Worker} 1014*9880d681SAndroid Build Coastguard Worker 1015*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @cvt_8i16_to_4f64(<8 x i16> %a0) { 1016*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_8i16_to_4f64: 1017*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1018*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %xmm0, %rax 1019*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rcx 1020*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movl %eax, %edx 1021*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %esi 1022*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $48, %rax 1023*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $32, %rcx 1024*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %edx 1025*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %dx, %edx 1026*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edx, %xmm0 1027*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 1028*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %esi, %xmm1 1029*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 1030*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %cx, %ecx 1031*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm2 1032*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 1033*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 1034*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm3 1035*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 1036*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1037*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1038*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 1039*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1040*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1041*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1042*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1043*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1044*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 1045*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i16> %1 to <4 x half> 1046*9880d681SAndroid Build Coastguard Worker %3 = fpext <4 x half> %2 to <4 x double> 1047*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 1048*9880d681SAndroid Build Coastguard Worker} 1049*9880d681SAndroid Build Coastguard Worker 1050*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @cvt_8i16_to_8f64(<8 x i16> %a0) { 1051*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8i16_to_8f64: 1052*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm0, %rdx 1054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdx, %r9 1055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %edx, %r10d 1056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %dx, %r8d 1057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rdx 1058*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %r9 1059*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %r10d 1060*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrq $1, %xmm0, %rdi 1061*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %rsi 1062*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %edi, %eax 1063*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %di, %ecx 1064*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $48, %rdi 1065*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrq $32, %rsi 1066*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shrl $16, %eax 1067*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: cwtl 1068*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1069*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm1 1070*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %ecx, %xmm0 1071*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm2 1072*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %si, %eax 1073*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1074*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm3 1075*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %di, %eax 1076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm4 1078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %r10w, %eax 1079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm0 1081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %r8d, %xmm5 1082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm5, %xmm5 1083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %r9w, %eax 1084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm6 1085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm6, %xmm6 1086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl %dx, %eax 1087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm7 1088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm7, %xmm7 1089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm7, %xmm7, %xmm7 1090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm6, %xmm6, %xmm6 1091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0] 1092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm5, %xmm5, %xmm5 1093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1094*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm5[0],xmm0[0] 1095*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm0, %ymm0 1096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm4, %xmm4, %xmm4 1097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0] 1099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] 1102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1104*9880d681SAndroid Build Coastguard Worker; 1105*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8i16_to_8f64: 1106*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm0, %rdx 1108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdx, %r9 1109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %edx, %r10d 1110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %dx, %r8d 1111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rdx 1112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %r9 1113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %r10d 1114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrq $1, %xmm0, %rdi 1115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %rsi 1116*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %edi, %eax 1117*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %di, %ecx 1118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $48, %rdi 1119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrq $32, %rsi 1120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shrl $16, %eax 1121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: cwtl 1122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm1 1124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %ecx, %xmm0 1125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm2 1126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %si, %eax 1127*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1128*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm3 1129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %di, %eax 1130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm4 1132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %r10w, %eax 1133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0 1135*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %r8d, %xmm5 1136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm5, %xmm5 1137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %r9w, %eax 1138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm6 1139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm6, %xmm6 1140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl %dx, %eax 1141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm7 1142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm7, %xmm7 1143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm7, %xmm7, %xmm7 1144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm6, %xmm6, %xmm6 1145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0] 1146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm5, %xmm5, %xmm5 1147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm5[0],xmm0[0] 1149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm6, %ymm0, %ymm0 1150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm4, %xmm4, %xmm4 1151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0] 1153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] 1156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1158*9880d681SAndroid Build Coastguard Worker; 1159*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8i16_to_8f64: 1160*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1161*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpextrq $1, %xmm0, %rdx 1162*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdx, %r8 1163*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %edx, %r10d 1164*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %dx, %r9d 1165*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rdx 1166*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %r8 1167*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %r10d 1168*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %xmm0, %rdi 1169*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %rax 1170*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %edi, %esi 1171*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %di, %ecx 1172*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $48, %rdi 1173*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrq $32, %rax 1174*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shrl $16, %esi 1175*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %si, %esi 1176*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %esi, %xmm0 1177*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0 1178*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %ecx, %xmm1 1179*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1 1180*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: cwtl 1181*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm2 1182*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2 1183*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %di, %eax 1184*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm3 1185*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3 1186*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %r10w, %eax 1187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm4 1188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4 1189*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %r9d, %xmm5 1190*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5 1191*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %r8w, %eax 1192*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm6 1193*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6 1194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl %dx, %eax 1195*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm7 1196*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7 1197*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm7, %xmm7, %xmm7 1198*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm6, %xmm6, %xmm6 1199*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0] 1200*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm5, %xmm5, %xmm5 1201*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm4, %xmm4, %xmm4 1202*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm4 = xmm5[0],xmm4[0] 1203*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf128 $1, %xmm6, %ymm4, %ymm4 1204*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1205*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1206*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 1207*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1208*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1209*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1210*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1211*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf64x4 $1, %ymm4, %zmm0, %zmm0 1212*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1213*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i16> %a0 to <8 x half> 1214*9880d681SAndroid Build Coastguard Worker %2 = fpext <8 x half> %1 to <8 x double> 1215*9880d681SAndroid Build Coastguard Worker ret <8 x double> %2 1216*9880d681SAndroid Build Coastguard Worker} 1217*9880d681SAndroid Build Coastguard Worker 1218*9880d681SAndroid Build Coastguard Worker; 1219*9880d681SAndroid Build Coastguard Worker; Half to Double (Load) 1220*9880d681SAndroid Build Coastguard Worker; 1221*9880d681SAndroid Build Coastguard Worker 1222*9880d681SAndroid Build Coastguard Workerdefine double @load_cvt_i16_to_f64(i16* %a0) { 1223*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_i16_to_f64: 1224*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1225*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl (%rdi), %eax 1226*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 1227*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 1228*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1229*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1230*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %a0 1231*9880d681SAndroid Build Coastguard Worker %2 = bitcast i16 %1 to half 1232*9880d681SAndroid Build Coastguard Worker %3 = fpext half %2 to double 1233*9880d681SAndroid Build Coastguard Worker ret double %3 1234*9880d681SAndroid Build Coastguard Worker} 1235*9880d681SAndroid Build Coastguard Worker 1236*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @load_cvt_2i16_to_2f64(<2 x i16>* %a0) { 1237*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_2i16_to_2f64: 1238*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1239*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl (%rdi), %eax 1240*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 1241*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 1242*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 2(%rdi), %eax 1243*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm1 1244*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 1245*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1246*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1247*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1248*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1249*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i16>, <2 x i16>* %a0 1250*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %1 to <2 x half> 1251*9880d681SAndroid Build Coastguard Worker %3 = fpext <2 x half> %2 to <2 x double> 1252*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 1253*9880d681SAndroid Build Coastguard Worker} 1254*9880d681SAndroid Build Coastguard Worker 1255*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @load_cvt_4i16_to_4f64(<4 x i16>* %a0) { 1256*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_4i16_to_4f64: 1257*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1258*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl (%rdi), %eax 1259*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 1260*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 1261*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 2(%rdi), %eax 1262*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm1 1263*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 1264*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 4(%rdi), %eax 1265*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm2 1266*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 1267*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl 6(%rdi), %eax 1268*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm3 1269*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 1270*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1271*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1272*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 1273*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1274*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1275*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1276*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1277*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1278*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i16>, <4 x i16>* %a0 1279*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i16> %1 to <4 x half> 1280*9880d681SAndroid Build Coastguard Worker %3 = fpext <4 x half> %2 to <4 x double> 1281*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 1282*9880d681SAndroid Build Coastguard Worker} 1283*9880d681SAndroid Build Coastguard Worker 1284*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @load_cvt_8i16_to_4f64(<8 x i16>* %a0) { 1285*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_8i16_to_4f64: 1286*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1287*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq (%rdi), %rax 1288*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rax, %rcx 1289*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movl %eax, %edx 1290*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %ax, %esi 1291*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $48, %rax 1292*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrq $32, %rcx 1293*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shrl $16, %edx 1294*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %dx, %edx 1295*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edx, %xmm0 1296*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm0, %xmm0 1297*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %esi, %xmm1 1298*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm1, %xmm1 1299*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movswl %cx, %ecx 1300*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %ecx, %xmm2 1301*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm2, %xmm2 1302*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: cwtl 1303*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm3 1304*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtph2ps %xmm3, %xmm3 1305*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1306*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1307*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 1308*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1309*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1310*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1311*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1312*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1313*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 1314*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 1315*9880d681SAndroid Build Coastguard Worker %3 = bitcast <4 x i16> %2 to <4 x half> 1316*9880d681SAndroid Build Coastguard Worker %4 = fpext <4 x half> %3 to <4 x double> 1317*9880d681SAndroid Build Coastguard Worker ret <4 x double> %4 1318*9880d681SAndroid Build Coastguard Worker} 1319*9880d681SAndroid Build Coastguard Worker 1320*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @load_cvt_8i16_to_8f64(<8 x i16>* %a0) { 1321*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: load_cvt_8i16_to_8f64: 1322*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 8(%rdi), %eax 1324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm1 1326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 10(%rdi), %eax 1327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm2 1329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 12(%rdi), %eax 1330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm3 1332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 14(%rdi), %eax 1333*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1334*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm4 1335*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl (%rdi), %eax 1336*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm0 1337*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm0, %xmm0 1338*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 2(%rdi), %eax 1339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm5 1340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm5, %xmm5 1341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 4(%rdi), %eax 1342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm6 1343*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm6, %xmm6 1344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movswl 6(%rdi), %eax 1345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm7 1346*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtph2ps %xmm7, %xmm7 1347*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm7, %xmm7, %xmm7 1348*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm6, %xmm6, %xmm6 1349*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0] 1350*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm5, %xmm5, %xmm5 1351*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1352*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm5[0] 1353*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm0, %ymm0 1354*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm4, %xmm4, %xmm4 1355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0] 1357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0] 1360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1362*9880d681SAndroid Build Coastguard Worker; 1363*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: load_cvt_8i16_to_8f64: 1364*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 8(%rdi), %eax 1366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm1 1368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 10(%rdi), %eax 1369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm2 1371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 12(%rdi), %eax 1372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm3 1374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 14(%rdi), %eax 1375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm4 1377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl (%rdi), %eax 1378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm0 1379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0 1380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 2(%rdi), %eax 1381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm5 1382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm5, %xmm5 1383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 4(%rdi), %eax 1384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm6 1385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm6, %xmm6 1386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movswl 6(%rdi), %eax 1387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm7 1388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtph2ps %xmm7, %xmm7 1389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm7, %xmm7, %xmm7 1390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm6, %xmm6, %xmm6 1391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0] 1392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm5, %xmm5, %xmm5 1393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm5[0] 1395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm6, %ymm0, %ymm0 1396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm4, %xmm4, %xmm4 1397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0] 1399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0] 1402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1404*9880d681SAndroid Build Coastguard Worker; 1405*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: load_cvt_8i16_to_8f64: 1406*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1407*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl (%rdi), %eax 1408*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm0 1409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0 1410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 2(%rdi), %eax 1411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm1 1412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1 1413*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 4(%rdi), %eax 1414*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm2 1415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2 1416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 6(%rdi), %eax 1417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm3 1418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3 1419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 8(%rdi), %eax 1420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm4 1421*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4 1422*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 10(%rdi), %eax 1423*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm5 1424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5 1425*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 12(%rdi), %eax 1426*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm6 1427*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6 1428*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movswl 14(%rdi), %eax 1429*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm7 1430*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7 1431*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm7, %xmm7, %xmm7 1432*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm6, %xmm6, %xmm6 1433*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0] 1434*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm5, %xmm5, %xmm5 1435*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm4, %xmm4, %xmm4 1436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm4 = xmm4[0],xmm5[0] 1437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf128 $1, %xmm6, %ymm4, %ymm4 1438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3 1439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 1440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 1441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 1442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 1443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinsertf64x4 $1, %ymm4, %zmm0, %zmm0 1446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1447*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 1448*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i16> %1 to <8 x half> 1449*9880d681SAndroid Build Coastguard Worker %3 = fpext <8 x half> %2 to <8 x double> 1450*9880d681SAndroid Build Coastguard Worker ret <8 x double> %3 1451*9880d681SAndroid Build Coastguard Worker} 1452*9880d681SAndroid Build Coastguard Worker 1453*9880d681SAndroid Build Coastguard Worker; 1454*9880d681SAndroid Build Coastguard Worker; Float to Half 1455*9880d681SAndroid Build Coastguard Worker; 1456*9880d681SAndroid Build Coastguard Worker 1457*9880d681SAndroid Build Coastguard Workerdefine i16 @cvt_f32_to_i16(float %a0) { 1458*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_f32_to_i16: 1459*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1460*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1461*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %eax 1462*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 1463*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1464*9880d681SAndroid Build Coastguard Worker %1 = fptrunc float %a0 to half 1465*9880d681SAndroid Build Coastguard Worker %2 = bitcast half %1 to i16 1466*9880d681SAndroid Build Coastguard Worker ret i16 %2 1467*9880d681SAndroid Build Coastguard Worker} 1468*9880d681SAndroid Build Coastguard Worker 1469*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @cvt_4f32_to_4i16(<4 x float> %a0) { 1470*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4f32_to_4i16: 1471*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1472*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1473*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1474*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1475*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1476*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1477*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %ecx 1478*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %cx, %ecx 1479*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %ecx 1480*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1481*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1482*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1483*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1484*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1485*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1486*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %edx 1487*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %dx, %edx 1488*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %edx 1489*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shlq $32, %rdx 1490*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orq %rcx, %rdx 1491*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdx, %xmm0 1492*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1493*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x float> %a0 to <4 x half> 1494*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 1495*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %2 1496*9880d681SAndroid Build Coastguard Worker} 1497*9880d681SAndroid Build Coastguard Worker 1498*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f32_to_8i16_undef(<4 x float> %a0) { 1499*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4f32_to_8i16_undef: 1500*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1501*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1502*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1503*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1504*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1505*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1506*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %ecx 1507*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %cx, %ecx 1508*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %ecx 1509*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1510*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1511*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1512*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1513*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1514*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1515*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %edx 1516*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %dx, %edx 1517*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %edx 1518*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shlq $32, %rdx 1519*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orq %rcx, %rdx 1520*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdx, %xmm0 1521*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 1522*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1523*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x float> %a0 to <4 x half> 1524*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 1525*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 1526*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %3 1527*9880d681SAndroid Build Coastguard Worker} 1528*9880d681SAndroid Build Coastguard Worker 1529*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f32_to_8i16_zero(<4 x float> %a0) { 1530*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4f32_to_8i16_zero: 1531*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1532*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1533*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1534*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1535*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1536*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1537*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %ecx 1538*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %cx, %ecx 1539*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %ecx 1540*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1541*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1542*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1543*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1544*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1545*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1546*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %edx 1547*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %dx, %edx 1548*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %edx 1549*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shlq $32, %rdx 1550*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orq %rcx, %rdx 1551*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdx, %xmm0 1552*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 1553*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1554*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x float> %a0 to <4 x half> 1555*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 1556*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 1557*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %3 1558*9880d681SAndroid Build Coastguard Worker} 1559*9880d681SAndroid Build Coastguard Worker 1560*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_8f32_to_8i16(<8 x float> %a0) { 1561*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8f32_to_8i16: 1562*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %eax 1567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %ecx 1569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %cx, %ecx 1570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %eax, %ecx 1571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1573*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %edx 1574*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %edx 1575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 1579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %edx, %eax 1580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 1581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %rcx, %rax 1582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %ecx 1586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ecx 1587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1588*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %edx 1589*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %dx, %edx 1590*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ecx, %edx 1591*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1592*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1593*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %ecx 1594*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ecx 1595*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1596*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1597*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %esi 1598*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %si, %esi 1599*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ecx, %esi 1600*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rsi 1601*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %rdx, %rsi 1602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rsi, %xmm0 1603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm1 1604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1607*9880d681SAndroid Build Coastguard Worker; 1608*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8f32_to_8i16: 1609*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1611*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1612*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1613*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %eax 1614*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1615*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %ecx 1616*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %cx, %ecx 1617*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %eax, %ecx 1618*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1619*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1620*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %edx 1621*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %edx 1622*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1623*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1624*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1625*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 1626*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %edx, %eax 1627*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 1628*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %rcx, %rax 1629*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 1630*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1632*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %ecx 1633*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ecx 1634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %edx 1636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %dx, %edx 1637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ecx, %edx 1638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %ecx 1641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ecx 1642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %esi 1645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %si, %esi 1646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ecx, %esi 1647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rsi 1648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %rdx, %rsi 1649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rsi, %xmm0 1650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm1 1651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1654*9880d681SAndroid Build Coastguard Worker; 1655*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8f32_to_8i16: 1656*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1660*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %eax 1661*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %ecx 1663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %cx, %ecx 1664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %eax, %ecx 1665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1666*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1667*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %edx 1668*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %edx 1669*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1670*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1671*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1672*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 1673*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %edx, %eax 1674*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 1675*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %rcx, %rax 1676*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 1677*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1678*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1679*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %ecx 1680*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ecx 1681*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1682*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %edx 1683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %dx, %edx 1684*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ecx, %edx 1685*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1686*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1687*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %ecx 1688*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ecx 1689*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1690*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1691*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %esi 1692*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %si, %esi 1693*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ecx, %esi 1694*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rsi 1695*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %rdx, %rsi 1696*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rsi, %xmm0 1697*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm1 1698*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1699*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1700*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <8 x float> %a0 to <8 x half> 1701*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x half> %1 to <8 x i16> 1702*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 1703*9880d681SAndroid Build Coastguard Worker} 1704*9880d681SAndroid Build Coastguard Worker 1705*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @cvt_16f32_to_16i16(<16 x float> %a0) { 1706*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_16f32_to_16i16: 1707*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm2 1709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %eax 1710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 1711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm3 1713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %eax 1714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm2 = xmm1[1,0] 1715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $1, %eax, %xmm3, %xmm3 1717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %eax 1718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3] 1720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3 1722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm1 1724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $3, %eax, %xmm3, %xmm3 1725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3] 1727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3 1729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm2[1,0] 1731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3 1733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3] 1736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $6, %eax, %xmm3, %xmm3 1738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %eax 1739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2 1740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm3 1744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $1, %eax, %xmm3, %xmm3 1748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3] 1751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3 1753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %eax 1754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm0 1755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $3, %eax, %xmm3, %xmm3 1756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %eax 1757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3] 1758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3 1760*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %eax 1761*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm1[3,1,2,3] 1762*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1763*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm1[1,0] 1764*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1765*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3 1766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 1767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $6, %eax, %xmm3, %xmm1 1768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %eax 1769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0 1770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1772*9880d681SAndroid Build Coastguard Worker; 1773*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_16f32_to_16i16: 1774*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1775*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm2 1776*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %eax 1777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 1778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm3 1780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %eax 1781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm2 = xmm1[1,0] 1782*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $1, %eax, %xmm3, %xmm3 1784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %eax 1785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm2 1786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3] 1787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3 1789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm1 1791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $3, %eax, %xmm3, %xmm3 1792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3] 1794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3 1796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm1 = xmm2[1,0] 1798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3 1800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3] 1803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $6, %eax, %xmm3, %xmm3 1805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %eax 1806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2 1807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm3 1811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1813*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1814*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $1, %eax, %xmm3, %xmm3 1815*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1 1817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3] 1818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3 1820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %eax 1821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm0 1822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $3, %eax, %xmm3, %xmm3 1823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %eax 1824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3] 1825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3 1827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %eax 1828*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm0 = xmm1[3,1,2,3] 1829*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1830*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm1 = xmm1[1,0] 1831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3 1833*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 1834*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $6, %eax, %xmm3, %xmm1 1835*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %eax 1836*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0 1837*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 1838*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1839*9880d681SAndroid Build Coastguard Worker; 1840*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_16f32_to_16i16: 1841*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1842*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm1 1843*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm2 1844*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 1845*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 1846*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1847*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm3 1848*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 1849*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm2 = xmm1[1,0] 1850*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1851*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $1, %eax, %xmm3, %xmm3 1852*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 1853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm1, %xmm2 1854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3] 1855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3 1857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm1 1859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $3, %eax, %xmm3, %xmm3 1860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1861*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3] 1862*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1863*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3 1864*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1865*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm1 = xmm2[1,0] 1866*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1867*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3 1868*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1869*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1870*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3] 1871*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 1872*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $6, %eax, %xmm3, %xmm3 1873*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 1874*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2 1875*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1876*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1877*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1878*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm3 1879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $1, %eax, %xmm3, %xmm3 1883*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 1884*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1 1885*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3] 1886*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1887*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3 1888*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %eax 1889*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm0 1890*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $3, %eax, %xmm3, %xmm3 1891*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %eax 1892*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3] 1893*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1894*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3 1895*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %eax 1896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm1[1,0] 1897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3 1899*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %eax 1900*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm0 = xmm1[3,1,2,3] 1901*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1902*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $6, %eax, %xmm3, %xmm1 1903*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %eax 1904*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0 1905*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 1906*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1907*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <16 x float> %a0 to <16 x half> 1908*9880d681SAndroid Build Coastguard Worker %2 = bitcast <16 x half> %1 to <16 x i16> 1909*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %2 1910*9880d681SAndroid Build Coastguard Worker} 1911*9880d681SAndroid Build Coastguard Worker 1912*9880d681SAndroid Build Coastguard Worker; 1913*9880d681SAndroid Build Coastguard Worker; Float to Half (Store) 1914*9880d681SAndroid Build Coastguard Worker; 1915*9880d681SAndroid Build Coastguard Worker 1916*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_f32_to_i16(float %a0, i16* %a1) { 1917*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_f32_to_i16: 1918*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1919*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1920*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %eax 1921*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %ax, (%rdi) 1922*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1923*9880d681SAndroid Build Coastguard Worker %1 = fptrunc float %a0 to half 1924*9880d681SAndroid Build Coastguard Worker %2 = bitcast half %1 to i16 1925*9880d681SAndroid Build Coastguard Worker store i16 %2, i16* %a1 1926*9880d681SAndroid Build Coastguard Worker ret void 1927*9880d681SAndroid Build Coastguard Worker} 1928*9880d681SAndroid Build Coastguard Worker 1929*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f32_to_4i16(<4 x float> %a0, <4 x i16>* %a1) { 1930*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_4f32_to_4i16: 1931*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1932*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1933*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1934*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1935*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 1936*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1937*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %ecx 1938*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1939*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1940*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %edx 1941*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1942*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %esi 1943*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %si, (%rdi) 1944*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %dx, 6(%rdi) 1945*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %cx, 4(%rdi) 1946*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %ax, 2(%rdi) 1947*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1948*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x float> %a0 to <4 x half> 1949*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 1950*9880d681SAndroid Build Coastguard Worker store <4 x i16> %2, <4 x i16>* %a1 1951*9880d681SAndroid Build Coastguard Worker ret void 1952*9880d681SAndroid Build Coastguard Worker} 1953*9880d681SAndroid Build Coastguard Worker 1954*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f32_to_8i16_undef(<4 x float> %a0, <8 x i16>* %a1) { 1955*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_4f32_to_8i16_undef: 1956*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1957*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1958*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1959*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1960*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1961*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1962*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %ecx 1963*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %cx, %ecx 1964*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %ecx 1965*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1966*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1967*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1968*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1969*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 1970*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 1971*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %edx 1972*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %dx, %edx 1973*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %edx 1974*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shlq $32, %rdx 1975*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orq %rcx, %rdx 1976*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdx, %xmm0 1977*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 1978*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovdqa %xmm0, (%rdi) 1979*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1980*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x float> %a0 to <4 x half> 1981*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 1982*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 1983*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %a1 1984*9880d681SAndroid Build Coastguard Worker ret void 1985*9880d681SAndroid Build Coastguard Worker} 1986*9880d681SAndroid Build Coastguard Worker 1987*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f32_to_8i16_zero(<4 x float> %a0, <8 x i16>* %a1) { 1988*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_4f32_to_8i16_zero: 1989*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1990*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 1991*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 1992*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 1993*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 1994*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm1 1995*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %ecx 1996*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %cx, %ecx 1997*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %ecx 1998*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 1999*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2000*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm1, %eax 2001*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %eax 2002*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2003*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2004*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %edx 2005*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %dx, %edx 2006*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %eax, %edx 2007*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shlq $32, %rdx 2008*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orq %rcx, %rdx 2009*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdx, %xmm0 2010*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 2011*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovdqa %xmm0, (%rdi) 2012*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 2013*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x float> %a0 to <4 x half> 2014*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 2015*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 2016*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %a1 2017*9880d681SAndroid Build Coastguard Worker ret void 2018*9880d681SAndroid Build Coastguard Worker} 2019*9880d681SAndroid Build Coastguard Worker 2020*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_8f32_to_8i16(<8 x float> %a0, <8 x i16>* %a1) { 2021*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_8f32_to_8i16: 2022*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 2024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %r8d 2026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 2027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %r9d 2029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 2030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %r10d 2032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 2033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 2034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2035*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %r11d 2036*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm2 = xmm1[1,0] 2037*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2038*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %eax 2039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3] 2040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %ecx 2042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %edx 2044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm0 2045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %esi 2046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %si, 8(%rdi) 2047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %dx, (%rdi) 2048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %cx, 14(%rdi) 2049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 12(%rdi) 2050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r11w, 10(%rdi) 2051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r10w, 6(%rdi) 2052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r9w, 4(%rdi) 2053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r8w, 2(%rdi) 2054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2056*9880d681SAndroid Build Coastguard Worker; 2057*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_8f32_to_8i16: 2058*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 2060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %r8d 2062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 2063*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2064*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %r9d 2065*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 2066*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %r10d 2068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1 2069*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 2070*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2071*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %r11d 2072*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm2 = xmm1[1,0] 2073*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2074*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %eax 2075*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3] 2076*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2077*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %ecx 2078*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2079*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %edx 2080*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm0 2081*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %esi 2082*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %si, 8(%rdi) 2083*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %dx, (%rdi) 2084*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %cx, 14(%rdi) 2085*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 12(%rdi) 2086*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r11w, 10(%rdi) 2087*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r10w, 6(%rdi) 2088*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r9w, 4(%rdi) 2089*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r8w, 2(%rdi) 2090*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2091*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2092*9880d681SAndroid Build Coastguard Worker; 2093*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_8f32_to_8i16: 2094*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2095*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 2096*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2097*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %r8d 2098*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 2099*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2100*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %r9d 2101*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 2102*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2103*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %r10d 2104*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1 2105*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 2106*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2107*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %r11d 2108*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm2 = xmm1[1,0] 2109*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2110*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 2111*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3] 2112*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2113*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %ecx 2114*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %edx 2116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm0 2117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %esi 2118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %si, 8(%rdi) 2119*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %dx, (%rdi) 2120*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %cx, 14(%rdi) 2121*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 12(%rdi) 2122*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r11w, 10(%rdi) 2123*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r10w, 6(%rdi) 2124*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r9w, 4(%rdi) 2125*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r8w, 2(%rdi) 2126*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2127*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <8 x float> %a0 to <8 x half> 2128*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x half> %1 to <8 x i16> 2129*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %a1 2130*9880d681SAndroid Build Coastguard Worker ret void 2131*9880d681SAndroid Build Coastguard Worker} 2132*9880d681SAndroid Build Coastguard Worker 2133*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_16f32_to_16i16(<16 x float> %a0, <16 x i16>* %a1) { 2134*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_16f32_to_16i16: 2135*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 2137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 2138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm3, %xmm4 2139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm4 2141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 24(%rdi) 2142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm4 2144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 16(%rdi) 2145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm4 2147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 8(%rdi) 2148*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm4 = xmm3[3,1,2,3] 2150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, (%rdi) 2152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm4 = xmm3[1,0] 2154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 30(%rdi) 2156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3] 2158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3] 2160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 28(%rdi) 2162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm3, %eax 2163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm3 = xmm1[3,1,2,3] 2164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 26(%rdi) 2166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm3, %eax 2167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm3 = xmm1[1,0] 2168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 22(%rdi) 2170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm3, %eax 2171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm3 = xmm0[1,0] 2172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3] 2174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3] 2176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 20(%rdi) 2178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 2179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm2[3,1,2,3] 2180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 18(%rdi) 2182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 2183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3] 2184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm2 = xmm2[1,0] 2186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 14(%rdi) 2188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm2, %eax 2189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 12(%rdi) 2190*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 2191*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 10(%rdi) 2192*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm0, %eax 2193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 6(%rdi) 2194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm3, %eax 2195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 4(%rdi) 2196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm4, %eax 2197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 2(%rdi) 2198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2200*9880d681SAndroid Build Coastguard Worker; 2201*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_16f32_to_16i16: 2202*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm2 2204*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm3 2205*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm3, %xmm4 2206*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm4 2208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 24(%rdi) 2209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm4 2211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 16(%rdi) 2212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm4 2214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 8(%rdi) 2215*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm4 = xmm3[3,1,2,3] 2217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2218*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, (%rdi) 2219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm4 = xmm3[1,0] 2221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 30(%rdi) 2223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3] 2225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3] 2227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 28(%rdi) 2229*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm3, %eax 2230*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm3 = xmm1[3,1,2,3] 2231*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 26(%rdi) 2233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm3, %eax 2234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm3 = xmm1[1,0] 2235*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2236*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 22(%rdi) 2237*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm3, %eax 2238*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm3 = xmm0[1,0] 2239*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3] 2241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3] 2243*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2244*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 20(%rdi) 2245*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 2246*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilps {{.*#+}} xmm1 = xmm2[3,1,2,3] 2247*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2248*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 18(%rdi) 2249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 2250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3] 2251*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2252*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm2 = xmm2[1,0] 2253*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 14(%rdi) 2255*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm2, %eax 2256*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 12(%rdi) 2257*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 2258*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 10(%rdi) 2259*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %eax 2260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 6(%rdi) 2261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm3, %eax 2262*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 4(%rdi) 2263*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm4, %eax 2264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 2(%rdi) 2265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2267*9880d681SAndroid Build Coastguard Worker; 2268*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_16f32_to_16i16: 2269*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2270*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1 2271*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm2 2272*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm2, %xmm3 2273*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm3, %xmm4 2274*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2275*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm4 2276*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 24(%rdi) 2277*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2278*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm4 2279*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 16(%rdi) 2280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm4 2282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 8(%rdi) 2283*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2284*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm4 = xmm3[3,1,2,3] 2285*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2286*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, (%rdi) 2287*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2288*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm4 = xmm3[1,0] 2289*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2290*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 30(%rdi) 2291*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2292*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3] 2293*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm4, %xmm4 2294*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3] 2295*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2296*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 28(%rdi) 2297*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm3, %eax 2298*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm3 = xmm2[3,1,2,3] 2299*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2300*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 26(%rdi) 2301*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm3, %eax 2302*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm3 = xmm2[1,0] 2303*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2304*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 22(%rdi) 2305*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm3, %eax 2306*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm3 = xmm0[1,0] 2307*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm3, %xmm3 2308*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3] 2309*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm0, %xmm0 2310*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm2 = xmm2[1,1,3,3] 2311*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2312*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 20(%rdi) 2313*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 2314*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3] 2315*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2316*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 18(%rdi) 2317*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 2318*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3] 2319*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm2, %xmm2 2320*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm1 = xmm1[1,0] 2321*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vcvtps2ph $4, %xmm1, %xmm1 2322*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 14(%rdi) 2323*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 2324*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 12(%rdi) 2325*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm2, %eax 2326*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 10(%rdi) 2327*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm0, %eax 2328*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 6(%rdi) 2329*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm3, %eax 2330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 4(%rdi) 2331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm4, %eax 2332*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 2(%rdi) 2333*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2334*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <16 x float> %a0 to <16 x half> 2335*9880d681SAndroid Build Coastguard Worker %2 = bitcast <16 x half> %1 to <16 x i16> 2336*9880d681SAndroid Build Coastguard Worker store <16 x i16> %2, <16 x i16>* %a1 2337*9880d681SAndroid Build Coastguard Worker ret void 2338*9880d681SAndroid Build Coastguard Worker} 2339*9880d681SAndroid Build Coastguard Worker 2340*9880d681SAndroid Build Coastguard Worker; 2341*9880d681SAndroid Build Coastguard Worker; Double to Half 2342*9880d681SAndroid Build Coastguard Worker; 2343*9880d681SAndroid Build Coastguard Worker 2344*9880d681SAndroid Build Coastguard Workerdefine i16 @cvt_f64_to_i16(double %a0) { 2345*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_f64_to_i16: 2346*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 2347*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: jmp __truncdfhf2 # TAILCALL 2348*9880d681SAndroid Build Coastguard Worker %1 = fptrunc double %a0 to half 2349*9880d681SAndroid Build Coastguard Worker %2 = bitcast half %1 to i16 2350*9880d681SAndroid Build Coastguard Worker ret i16 %2 2351*9880d681SAndroid Build Coastguard Worker} 2352*9880d681SAndroid Build Coastguard Worker 2353*9880d681SAndroid Build Coastguard Workerdefine <2 x i16> @cvt_2f64_to_2i16(<2 x double> %a0) { 2354*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_2f64_to_2i16: 2355*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 2356*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: pushq %rbx 2357*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp0: 2358*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_def_cfa_offset 16 2359*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: subq $16, %rsp 2360*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp1: 2361*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_def_cfa_offset 32 2362*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp2: 2363*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_offset %rbx, -16 2364*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2365*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2366*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: callq __truncdfhf2 2367*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %ax, %bx 2368*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: shll $16, %ebx 2369*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2370*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: callq __truncdfhf2 2371*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movzwl %ax, %eax 2372*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: orl %ebx, %eax 2373*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %eax, %xmm0 2374*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: addq $16, %rsp 2375*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: popq %rbx 2376*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 2377*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <2 x double> %a0 to <2 x half> 2378*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x half> %1 to <2 x i16> 2379*9880d681SAndroid Build Coastguard Worker ret <2 x i16> %2 2380*9880d681SAndroid Build Coastguard Worker} 2381*9880d681SAndroid Build Coastguard Worker 2382*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @cvt_4f64_to_4i16(<4 x double> %a0) { 2383*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_4f64_to_4i16: 2384*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 2386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp3: 2387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 2388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 2389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp4: 2390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 2391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $40, %rsp 2392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp5: 2393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 64 2394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp6: 2395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -24 2396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp7: 2397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -16 2398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2404*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2405*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2406*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2407*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2408*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %r14d 2409*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %r14d 2410*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2411*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2412*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2413*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2414*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2415*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 2421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %eax 2422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 2423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %r14, %rax 2424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm0 2425*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $40, %rsp 2426*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 2427*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 2428*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2429*9880d681SAndroid Build Coastguard Worker; 2430*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_4f64_to_4i16: 2431*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 2433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp3: 2434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 2435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 2436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp4: 2437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 2438*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $40, %rsp 2439*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp5: 2440*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 64 2441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp6: 2442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -24 2443*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp7: 2444*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -16 2445*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2446*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2447*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2448*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2449*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2450*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2451*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2452*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2453*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2454*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2455*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %r14d 2456*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %r14d 2457*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2458*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 2459*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2460*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2461*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2462*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2463*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2464*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2465*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2466*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2467*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 2468*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %eax 2469*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 2470*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %r14, %rax 2471*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm0 2472*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $40, %rsp 2473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 2474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 2475*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2476*9880d681SAndroid Build Coastguard Worker; 2477*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_4f64_to_4i16: 2478*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2479*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 2480*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp3: 2481*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 2482*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 2483*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp4: 2484*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 2485*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $40, %rsp 2486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp5: 2487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 64 2488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp6: 2489*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -24 2490*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp7: 2491*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -16 2492*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2493*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2494*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2495*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 2496*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 2497*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2498*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2499*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2500*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %r14d 2501*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %r14d 2502*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2503*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 2504*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2505*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2506*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 2508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 2509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 2512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %eax 2513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 2514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %r14, %rax 2515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm0 2516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $40, %rsp 2517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 2518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 2519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2520*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x double> %a0 to <4 x half> 2521*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 2522*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %2 2523*9880d681SAndroid Build Coastguard Worker} 2524*9880d681SAndroid Build Coastguard Worker 2525*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f64_to_8i16_undef(<4 x double> %a0) { 2526*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_4f64_to_8i16_undef: 2527*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 2529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp8: 2530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 2531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 2532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp9: 2533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 2534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $40, %rsp 2535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp10: 2536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 64 2537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp11: 2538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -24 2539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp12: 2540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -16 2541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2545*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2546*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2547*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2548*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2549*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2550*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2551*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %r14d 2552*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %r14d 2553*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2554*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2555*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2559*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 2564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %eax 2565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 2566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %r14, %rax 2567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm0 2568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 2569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $40, %rsp 2570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 2571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 2572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2573*9880d681SAndroid Build Coastguard Worker; 2574*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_4f64_to_8i16_undef: 2575*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 2577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp8: 2578*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 2579*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 2580*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp9: 2581*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 2582*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $40, %rsp 2583*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp10: 2584*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 64 2585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp11: 2586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -24 2587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp12: 2588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -16 2589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2595*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2598*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2599*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %r14d 2600*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %r14d 2601*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2602*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 2603*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2604*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2605*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2606*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2607*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2608*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2609*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2611*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 2612*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %eax 2613*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 2614*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %r14, %rax 2615*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm0 2616*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 2617*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $40, %rsp 2618*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 2619*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 2620*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2621*9880d681SAndroid Build Coastguard Worker; 2622*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_4f64_to_8i16_undef: 2623*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2624*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 2625*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp8: 2626*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 2627*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 2628*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp9: 2629*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 2630*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $40, %rsp 2631*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp10: 2632*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 64 2633*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp11: 2634*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -24 2635*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp12: 2636*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -16 2637*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2638*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2639*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2640*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 2641*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 2642*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2643*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2644*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2645*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %r14d 2646*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %r14d 2647*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2648*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 2649*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2650*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2651*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2652*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 2653*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 2654*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2655*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 2657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %eax 2658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 2659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %r14, %rax 2660*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm0 2661*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 2662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $40, %rsp 2663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 2664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 2665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2666*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x double> %a0 to <4 x half> 2667*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 2668*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 2669*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %3 2670*9880d681SAndroid Build Coastguard Worker} 2671*9880d681SAndroid Build Coastguard Worker 2672*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f64_to_8i16_zero(<4 x double> %a0) { 2673*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_4f64_to_8i16_zero: 2674*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 2676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp13: 2677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 2678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 2679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp14: 2680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 2681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $40, %rsp 2682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp15: 2683*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 64 2684*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp16: 2685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -24 2686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp17: 2687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -16 2688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %r14d 2699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %r14d 2700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 2711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %eax 2712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 2713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %r14, %rax 2714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm0 2715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 2716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $40, %rsp 2717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 2718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 2719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2720*9880d681SAndroid Build Coastguard Worker; 2721*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_4f64_to_8i16_zero: 2722*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 2724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp13: 2725*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 2726*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 2727*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp14: 2728*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 2729*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $40, %rsp 2730*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp15: 2731*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 64 2732*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp16: 2733*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -24 2734*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp17: 2735*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -16 2736*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2737*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2738*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %r14d 2747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %r14d 2748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2749*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 2750*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2751*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2752*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2753*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2754*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2755*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2756*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2757*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2758*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 2759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %eax 2760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 2761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %r14, %rax 2762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm0 2763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 2764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $40, %rsp 2765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 2766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 2767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2768*9880d681SAndroid Build Coastguard Worker; 2769*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_4f64_to_8i16_zero: 2770*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2771*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 2772*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp13: 2773*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 2774*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 2775*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp14: 2776*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 2777*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $40, %rsp 2778*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp15: 2779*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 64 2780*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp16: 2781*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -24 2782*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp17: 2783*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -16 2784*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 2785*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2786*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2787*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 2788*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 2789*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2790*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2791*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2792*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %r14d 2793*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %r14d 2794*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2795*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 2796*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2797*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2798*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2799*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 2800*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 2801*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2802*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 2803*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 2804*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %eax 2805*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 2806*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %r14, %rax 2807*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm0 2808*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 2809*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $40, %rsp 2810*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 2811*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 2812*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2813*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x double> %a0 to <4 x half> 2814*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 2815*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 2816*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %3 2817*9880d681SAndroid Build Coastguard Worker} 2818*9880d681SAndroid Build Coastguard Worker 2819*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_8f64_to_8i16(<8 x double> %a0) { 2820*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8f64_to_8i16: 2821*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2822*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r15 2823*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp18: 2824*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 2825*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 2826*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp19: 2827*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 2828*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 2829*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp20: 2830*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 32 2831*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $64, %rsp 2832*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp21: 2833*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 96 2834*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp22: 2835*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -32 2836*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp23: 2837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -24 2838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp24: 2839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r15, -16 2840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups %ymm1, (%rsp) # 32-byte Spill 2841*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 2842*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2843*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2844*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2845*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2846*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2847*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 2848*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2849*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2850*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2851*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %r15d 2852*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %r15d 2853*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 2854*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2855*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 2856*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 2862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %r14d 2864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %r14d 2865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %r14 2866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %r15, %r14 2867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2877*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %r15d 2878*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %r15d 2879*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2880*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2881*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2882*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2883*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2884*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2885*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bx 2886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebx 2887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2888*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 2889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 2890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebx, %eax 2891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 2892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %r15, %rax 2893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm0 2894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %r14, %xmm1 2895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 2896*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $64, %rsp 2897*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 2898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 2899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r15 2900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2901*9880d681SAndroid Build Coastguard Worker; 2902*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8f64_to_8i16: 2903*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r15 2905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp18: 2906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 2907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 2908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp19: 2909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 2910*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 2911*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp20: 2912*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 32 2913*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $64, %rsp 2914*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp21: 2915*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 96 2916*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp22: 2917*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -32 2918*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp23: 2919*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -24 2920*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp24: 2921*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r15, -16 2922*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups %ymm1, (%rsp) # 32-byte Spill 2923*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 2924*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2925*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2926*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2927*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2928*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2929*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 2930*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2931*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2932*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2933*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %r15d 2934*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %r15d 2935*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 2936*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 2937*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 2938*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2939*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2940*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2941*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2942*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2943*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 2944*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2945*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %r14d 2946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %r14d 2947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %r14 2948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %r15, %r14 2949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2951*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2952*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2953*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2954*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2955*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 2956*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2957*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2958*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2959*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %r15d 2960*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %r15d 2961*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 2962*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 2963*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 2964*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 2965*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2966*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2967*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bx 2968*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebx 2969*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 2970*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 2971*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 2972*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebx, %eax 2973*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 2974*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %r15, %rax 2975*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm0 2976*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %r14, %xmm1 2977*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 2978*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $64, %rsp 2979*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 2980*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 2981*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r15 2982*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2983*9880d681SAndroid Build Coastguard Worker; 2984*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8f64_to_8i16: 2985*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2986*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r15 2987*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp18: 2988*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 2989*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 2990*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp19: 2991*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 2992*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 2993*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp20: 2994*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 32 2995*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $96, %rsp 2996*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp21: 2997*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 128 2998*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp22: 2999*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -32 3000*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp23: 3001*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -24 3002*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp24: 3003*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r15, -16 3004*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups %zmm0, (%rsp) # 64-byte Spill 3005*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3006*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3007*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 3008*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 3009*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %zmm0 # 64-byte Reload 3010*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 3011*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3012*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %r15d 3013*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %r15d 3014*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %zmm0 # 64-byte Reload 3015*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3016*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3017*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3018*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3019*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 3020*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 3021*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3022*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3023*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %r14d 3024*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %r14d 3025*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %r14 3026*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %r15, %r14 3027*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %zmm0 # 64-byte Reload 3028*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm0 3029*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3030*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3031*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3032*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 3033*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 3034*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3035*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3036*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3037*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %r15d 3038*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %r15d 3039*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3040*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3041*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3042*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3043*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3044*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bx 3045*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebx 3046*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3047*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3048*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 3049*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebx, %eax 3050*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 3051*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %r15, %rax 3052*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm0 3053*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %r14, %xmm1 3054*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 3055*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $96, %rsp 3056*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 3057*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 3058*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r15 3059*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3060*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <8 x double> %a0 to <8 x half> 3061*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x half> %1 to <8 x i16> 3062*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3063*9880d681SAndroid Build Coastguard Worker} 3064*9880d681SAndroid Build Coastguard Worker 3065*9880d681SAndroid Build Coastguard Worker; 3066*9880d681SAndroid Build Coastguard Worker; Double to Half (Store) 3067*9880d681SAndroid Build Coastguard Worker; 3068*9880d681SAndroid Build Coastguard Worker 3069*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_f64_to_i16(double %a0, i16* %a1) { 3070*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_f64_to_i16: 3071*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 3072*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: pushq %rbx 3073*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp25: 3074*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_def_cfa_offset 16 3075*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp26: 3076*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_offset %rbx, -16 3077*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rdi, %rbx 3078*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: callq __truncdfhf2 3079*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %ax, (%rbx) 3080*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: popq %rbx 3081*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 3082*9880d681SAndroid Build Coastguard Worker %1 = fptrunc double %a0 to half 3083*9880d681SAndroid Build Coastguard Worker %2 = bitcast half %1 to i16 3084*9880d681SAndroid Build Coastguard Worker store i16 %2, i16* %a1 3085*9880d681SAndroid Build Coastguard Worker ret void 3086*9880d681SAndroid Build Coastguard Worker} 3087*9880d681SAndroid Build Coastguard Worker 3088*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_2f64_to_2i16(<2 x double> %a0, <2 x i16>* %a1) { 3089*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_2f64_to_2i16: 3090*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 3091*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: pushq %rbp 3092*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp27: 3093*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_def_cfa_offset 16 3094*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: pushq %rbx 3095*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp28: 3096*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_def_cfa_offset 24 3097*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: subq $24, %rsp 3098*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp29: 3099*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_def_cfa_offset 48 3100*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp30: 3101*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_offset %rbx, -24 3102*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .Ltmp31: 3103*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: .cfi_offset %rbp, -16 3104*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movq %rdi, %rbx 3105*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3106*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3107*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: callq __truncdfhf2 3108*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movl %eax, %ebp 3109*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3110*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: callq __truncdfhf2 3111*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %ax, (%rbx) 3112*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: movw %bp, 2(%rbx) 3113*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: addq $24, %rsp 3114*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: popq %rbx 3115*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: popq %rbp 3116*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 3117*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <2 x double> %a0 to <2 x half> 3118*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x half> %1 to <2 x i16> 3119*9880d681SAndroid Build Coastguard Worker store <2 x i16> %2, <2 x i16>* %a1 3120*9880d681SAndroid Build Coastguard Worker ret void 3121*9880d681SAndroid Build Coastguard Worker} 3122*9880d681SAndroid Build Coastguard Worker 3123*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f64_to_4i16(<4 x double> %a0, <4 x i16>* %a1) { 3124*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_4f64_to_4i16: 3125*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbp 3127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp32: 3128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 3129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r15 3130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp33: 3131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 3132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 3133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp34: 3134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 32 3135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 3136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp35: 3137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 40 3138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $88, %rsp 3139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp36: 3140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 128 3141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp37: 3142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -40 3143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp38: 3144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -32 3145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp39: 3146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r15, -24 3147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp40: 3148*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbp, -16 3149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %rbx 3150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 3151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %r14d 3155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %r15d 3162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %ebp 3167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 4(%rbx) 3170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %bp, (%rbx) 3171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r15w, 6(%rbx) 3172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r14w, 2(%rbx) 3173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $88, %rsp 3174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 3175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 3176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r15 3177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbp 3178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3179*9880d681SAndroid Build Coastguard Worker; 3180*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_4f64_to_4i16: 3181*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbp 3183*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp32: 3184*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 3185*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r15 3186*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp33: 3187*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 3188*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 3189*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp34: 3190*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 32 3191*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 3192*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp35: 3193*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 40 3194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $88, %rsp 3195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp36: 3196*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 128 3197*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp37: 3198*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -40 3199*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp38: 3200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -32 3201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp39: 3202*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r15, -24 3203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp40: 3204*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbp, -16 3205*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %rbx 3206*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 3207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %r14d 3211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 3213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3215*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %r15d 3218*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %ebp 3223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 4(%rbx) 3226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %bp, (%rbx) 3227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r15w, 6(%rbx) 3228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r14w, 2(%rbx) 3229*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $88, %rsp 3230*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 3231*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 3232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r15 3233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbp 3234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3235*9880d681SAndroid Build Coastguard Worker; 3236*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_4f64_to_4i16: 3237*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3238*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbp 3239*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp32: 3240*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 3241*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r15 3242*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp33: 3243*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 3244*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 3245*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp34: 3246*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 32 3247*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 3248*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp35: 3249*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 40 3250*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $88, %rsp 3251*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp36: 3252*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 128 3253*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp37: 3254*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -40 3255*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp38: 3256*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -32 3257*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp39: 3258*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r15, -24 3259*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp40: 3260*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbp, -16 3261*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %rbx 3262*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 3263*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3264*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3265*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %r14d 3266*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3267*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3268*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3269*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3270*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3271*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %r15d 3272*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3273*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3274*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3275*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %ebp 3276*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3277*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3278*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 4(%rbx) 3279*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %bp, (%rbx) 3280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r15w, 6(%rbx) 3281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r14w, 2(%rbx) 3282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $88, %rsp 3283*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 3284*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 3285*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r15 3286*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbp 3287*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3288*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x double> %a0 to <4 x half> 3289*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 3290*9880d681SAndroid Build Coastguard Worker store <4 x i16> %2, <4 x i16>* %a1 3291*9880d681SAndroid Build Coastguard Worker ret void 3292*9880d681SAndroid Build Coastguard Worker} 3293*9880d681SAndroid Build Coastguard Worker 3294*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f64_to_8i16_undef(<4 x double> %a0, <8 x i16>* %a1) { 3295*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_4f64_to_8i16_undef: 3296*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbp 3298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp41: 3299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 3300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 3301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp42: 3302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 3303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 3304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp43: 3305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 32 3306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $32, %rsp 3307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp44: 3308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 64 3309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp45: 3310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -32 3311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp46: 3312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -24 3313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp47: 3314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbp, -16 3315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %r14 3316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bp 3321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebp 3322*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %ebx 3327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebp, %ebx 3328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3333*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3334*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bp 3335*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebp 3336*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3337*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3338*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 3339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebp, %eax 3340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 3341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %rbx, %rax 3342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm0 3343*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 3344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa %xmm0, (%r14) 3345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $32, %rsp 3346*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 3347*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 3348*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbp 3349*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3350*9880d681SAndroid Build Coastguard Worker; 3351*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_4f64_to_8i16_undef: 3352*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3353*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbp 3354*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp41: 3355*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 3356*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 3357*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp42: 3358*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 3359*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 3360*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp43: 3361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 32 3362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $32, %rsp 3363*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp44: 3364*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 64 3365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp45: 3366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -32 3367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp46: 3368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -24 3369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp47: 3370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbp, -16 3371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %r14 3372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bp 3377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebp 3378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %ebx 3383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebp, %ebx 3384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 3386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bp 3391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebp 3392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 3395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebp, %eax 3396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 3397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %rbx, %rax 3398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm0 3399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 3400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa %xmm0, (%r14) 3401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $32, %rsp 3402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 3403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 3404*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbp 3405*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3406*9880d681SAndroid Build Coastguard Worker; 3407*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_4f64_to_8i16_undef: 3408*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbp 3410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp41: 3411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 3412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 3413*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp42: 3414*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 3415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 3416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp43: 3417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 32 3418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $32, %rsp 3419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp44: 3420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 64 3421*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp45: 3422*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -32 3423*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp46: 3424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -24 3425*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp47: 3426*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbp, -16 3427*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %r14 3428*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3429*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3430*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3431*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bp 3432*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebp 3433*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3434*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3435*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %ebx 3437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebp, %ebx 3438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bp 3444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebp 3445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3447*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 3448*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebp, %eax 3449*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 3450*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %rbx, %rax 3451*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm0 3452*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 3453*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa %xmm0, (%r14) 3454*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $32, %rsp 3455*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 3456*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 3457*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbp 3458*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3459*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x double> %a0 to <4 x half> 3460*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 3461*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 3462*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %a1 3463*9880d681SAndroid Build Coastguard Worker ret void 3464*9880d681SAndroid Build Coastguard Worker} 3465*9880d681SAndroid Build Coastguard Worker 3466*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f64_to_8i16_zero(<4 x double> %a0, <8 x i16>* %a1) { 3467*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_4f64_to_8i16_zero: 3468*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbp 3470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp48: 3471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 3472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 3473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp49: 3474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 3475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 3476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp50: 3477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 32 3478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $32, %rsp 3479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp51: 3480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 64 3481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp52: 3482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -32 3483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp53: 3484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -24 3485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp54: 3486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbp, -16 3487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %r14 3488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bp 3493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebp 3494*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3495*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3496*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3497*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3498*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %ebx 3499*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebp, %ebx 3500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3501*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3502*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3503*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3504*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3505*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3506*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, %bp 3507*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shll $16, %ebp 3508*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3509*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3510*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 3511*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orl %ebp, %eax 3512*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: shlq $32, %rax 3513*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: orq %rbx, %rax 3514*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm0 3515*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 3516*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa %xmm0, (%r14) 3517*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $32, %rsp 3518*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 3519*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 3520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbp 3521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3522*9880d681SAndroid Build Coastguard Worker; 3523*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_4f64_to_8i16_zero: 3524*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3525*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbp 3526*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp48: 3527*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 3528*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 3529*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp49: 3530*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 3531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 3532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp50: 3533*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 32 3534*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $32, %rsp 3535*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp51: 3536*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 64 3537*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp52: 3538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -32 3539*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp53: 3540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -24 3541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp54: 3542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbp, -16 3543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %r14 3544*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3545*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bp 3549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebp 3550*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3551*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3552*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3553*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3554*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %ebx 3555*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebp, %ebx 3556*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3557*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 3558*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3559*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3560*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3561*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3562*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, %bp 3563*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shll $16, %ebp 3564*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3565*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3566*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 3567*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orl %ebp, %eax 3568*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: shlq $32, %rax 3569*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: orq %rbx, %rax 3570*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rax, %xmm0 3571*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 3572*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa %xmm0, (%r14) 3573*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $32, %rsp 3574*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 3575*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 3576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbp 3577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3578*9880d681SAndroid Build Coastguard Worker; 3579*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_4f64_to_8i16_zero: 3580*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3581*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbp 3582*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp48: 3583*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 3584*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 3585*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp49: 3586*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 3587*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 3588*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp50: 3589*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 32 3590*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $32, %rsp 3591*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp51: 3592*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 64 3593*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp52: 3594*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -32 3595*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp53: 3596*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -24 3597*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp54: 3598*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbp, -16 3599*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %r14 3600*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill 3601*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3602*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3603*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bp 3604*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebp 3605*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload 3606*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3607*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3608*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %ebx 3609*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebp, %ebx 3610*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload 3611*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3612*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill 3613*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3614*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3615*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, %bp 3616*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shll $16, %ebp 3617*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload 3618*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3619*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 3620*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orl %ebp, %eax 3621*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: shlq $32, %rax 3622*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: orq %rbx, %rax 3623*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovq %rax, %xmm0 3624*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero 3625*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa %xmm0, (%r14) 3626*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $32, %rsp 3627*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 3628*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 3629*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbp 3630*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3631*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <4 x double> %a0 to <4 x half> 3632*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x half> %1 to <4 x i16> 3633*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 3634*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %a1 3635*9880d681SAndroid Build Coastguard Worker ret void 3636*9880d681SAndroid Build Coastguard Worker} 3637*9880d681SAndroid Build Coastguard Worker 3638*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_8f64_to_8i16(<8 x double> %a0, <8 x i16>* %a1) { 3639*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_8f64_to_8i16: 3640*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3641*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbp 3642*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp55: 3643*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 16 3644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r15 3645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp56: 3646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 24 3647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r14 3648*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp57: 3649*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 32 3650*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r13 3651*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp58: 3652*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 40 3653*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %r12 3654*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp59: 3655*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 48 3656*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbx 3657*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp60: 3658*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 56 3659*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $136, %rsp 3660*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp61: 3661*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_def_cfa_offset 192 3662*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp62: 3663*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbx, -56 3664*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp63: 3665*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r12, -48 3666*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp64: 3667*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r13, -40 3668*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp65: 3669*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r14, -32 3670*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp66: 3671*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %r15, -24 3672*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .Ltmp67: 3673*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: .cfi_offset %rbp, -16 3674*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rdi, %rbx 3675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups %ymm1, {{[0-9]+}}(%rsp) # 32-byte Spill 3676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 3677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill 3681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3683*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3684*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill 3688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %r12d 3693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 3695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %r13d 3700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %ebp 3705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %r14d 3708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl %eax, %r15d 3713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: callq __truncdfhf2 3715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 12(%rbx) 3716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r15w, 8(%rbx) 3717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r14w, 4(%rbx) 3718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %bp, (%rbx) 3719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r13w, 14(%rbx) 3720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %r12w, 10(%rbx) 3721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload 3722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 6(%rbx) 3723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload 3724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movw %ax, 2(%rbx) 3725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: addq $136, %rsp 3726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbx 3727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r12 3728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r13 3729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r14 3730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %r15 3731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbp 3732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3733*9880d681SAndroid Build Coastguard Worker; 3734*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_8f64_to_8i16: 3735*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3736*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbp 3737*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp55: 3738*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 16 3739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r15 3740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp56: 3741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 24 3742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r14 3743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp57: 3744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 32 3745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r13 3746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp58: 3747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 40 3748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %r12 3749*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp59: 3750*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 48 3751*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: pushq %rbx 3752*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp60: 3753*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 56 3754*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: subq $136, %rsp 3755*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp61: 3756*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_def_cfa_offset 192 3757*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp62: 3758*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbx, -56 3759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp63: 3760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r12, -48 3761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp64: 3762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r13, -40 3763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp65: 3764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r14, -32 3765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp66: 3766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %r15, -24 3767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .Ltmp67: 3768*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: .cfi_offset %rbp, -16 3769*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movq %rdi, %rbx 3770*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups %ymm1, {{[0-9]+}}(%rsp) # 32-byte Spill 3771*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 3772*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3773*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3774*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3775*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill 3776*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 3778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3782*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill 3783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %r12d 3788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 3790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %r13d 3795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %ebp 3800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %r14d 3803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movl %eax, %r15d 3808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: callq __truncdfhf2 3810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 12(%rbx) 3811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r15w, 8(%rbx) 3812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r14w, 4(%rbx) 3813*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %bp, (%rbx) 3814*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r13w, 14(%rbx) 3815*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %r12w, 10(%rbx) 3816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload 3817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 6(%rbx) 3818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload 3819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movw %ax, 2(%rbx) 3820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: addq $136, %rsp 3821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbx 3822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r12 3823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r13 3824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r14 3825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %r15 3826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: popq %rbp 3827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3828*9880d681SAndroid Build Coastguard Worker; 3829*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_8f64_to_8i16: 3830*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3831*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbp 3832*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp55: 3833*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 16 3834*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r15 3835*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp56: 3836*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 24 3837*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r14 3838*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp57: 3839*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 32 3840*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r13 3841*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp58: 3842*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 40 3843*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %r12 3844*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp59: 3845*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 48 3846*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: pushq %rbx 3847*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp60: 3848*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 56 3849*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: subq $200, %rsp 3850*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp61: 3851*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_def_cfa_offset 256 3852*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp62: 3853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbx, -56 3854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp63: 3855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r12, -48 3856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp64: 3857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r13, -40 3858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp65: 3859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r14, -32 3860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp66: 3861*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %r15, -24 3862*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .Ltmp67: 3863*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: .cfi_offset %rbp, -16 3864*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movq %rdi, %rbx 3865*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups %zmm0, {{[0-9]+}}(%rsp) # 64-byte Spill 3866*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3867*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3868*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill 3869*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups {{[0-9]+}}(%rsp), %zmm0 # 64-byte Reload 3870*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3871*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3872*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3873*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3874*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill 3875*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups {{[0-9]+}}(%rsp), %zmm0 # 64-byte Reload 3876*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm0 3877*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill 3878*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %r12d 3881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0 3883*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill 3884*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 3885*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3886*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %r13d 3887*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups {{[0-9]+}}(%rsp), %zmm0 # 64-byte Reload 3888*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 3889*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3890*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %ebp 3891*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3892*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3893*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %r14d 3894*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload 3895*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movl %eax, %r15d 3898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload 3899*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: callq __truncdfhf2 3900*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 12(%rbx) 3901*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r15w, 8(%rbx) 3902*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r14w, 4(%rbx) 3903*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %bp, (%rbx) 3904*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r13w, 14(%rbx) 3905*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %r12w, 10(%rbx) 3906*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload 3907*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 6(%rbx) 3908*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload 3909*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movw %ax, 2(%rbx) 3910*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: addq $200, %rsp 3911*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbx 3912*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r12 3913*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r13 3914*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r14 3915*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %r15 3916*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: popq %rbp 3917*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3918*9880d681SAndroid Build Coastguard Worker %1 = fptrunc <8 x double> %a0 to <8 x half> 3919*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x half> %1 to <8 x i16> 3920*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %a1 3921*9880d681SAndroid Build Coastguard Worker ret void 3922*9880d681SAndroid Build Coastguard Worker} 3923