Skip to content

insertelement of undef generates horrible code (e.g. _mm_sll_epi16) #1658

@isanbard

Description

@isanbard
Bugzilla Link 1286
Resolution FIXED
Resolved on Feb 22, 2010 12:48
Version trunk
OS MacOS X

Extended Description

This:

#include <xmmintrin.h>

void foo(__m128i *A, __m128i *B) {
*A = _mm_sll_epi16 (*A, *B);
}

generates this code:

_foo:
movl 8(%esp), %eax
movdqa (%eax), %xmm0
#IMPLICIT_DEF %eax
pinsrw $2, %eax, %xmm0
xorl %ecx, %ecx
pinsrw $3, %ecx, %xmm0
pinsrw $4, %eax, %xmm0
pinsrw $5, %ecx, %xmm0
pinsrw $6, %eax, %xmm0
pinsrw $7, %ecx, %xmm0
movl 4(%esp), %eax
movdqa (%eax), %xmm1
psllw %xmm0, %xmm1
movdqa %xmm1, (%eax)
ret

This is obviously bad! We should be as good GCC at least.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions