https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102811
--- Comment #10 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Uroš Bizjak from comment #7) > compiles with unpatched gcc -O2 -mf16c to: > > vmovss %xmm0, %xmm0, %xmm2 # 27 [c=4 l=4] *movhf_internal/3 > pextrw $0, %xmm1, -4(%rsp) # 28 [c=4 l=6] *movhf_internal/5 > vpxor %xmm0, %xmm0, %xmm0 # 7 [c=4 l=4] movv8hf_internal/0 > vpxor %xmm1, %xmm1, %xmm1 # 11 [c=4 l=4] movv8hf_internal/0 > pextrw $0, %xmm2, -2(%rsp) # 30 [c=4 l=6] *movhf_internal/5 > vpinsrw $0, -4(%rsp), %xmm1, %xmm1 # 12 [c=4 l=8] > sse4_1_pinsrph/3 > vpinsrw $0, -2(%rsp), %xmm0, %xmm0 # 8 [c=4 l=8] > sse4_1_pinsrph/3 > vcvtph2ps %xmm1, %xmm1 # 13 [c=4 l=4] vcvtph2ps > vcvtph2ps %xmm0, %xmm0 # 9 [c=4 l=4] vcvtph2ps > vaddss %xmm1, %xmm0, %xmm0 # 15 [c=12 l=4] *fop_sf_comm/2 > vinsertps $0xe, %xmm0, %xmm0, %xmm0 # 17 [c=4 l=4] > vec_setv4sf_0/2 > vcvtps2ph $4, %xmm0, %xmm0 # 18 [c=4 l=4] *vcvtps2ph > ret # 35 [c=0 l=1] simple_return_internal Just noticed that for some reason two VPXORs are emitted. One should be enough for both VPINSRW insns.