mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
a note
llvm-svn: 34670
This commit is contained in:
parent
89791371ce
commit
da49dee51d
@ -530,3 +530,45 @@ to loads from constant pool.
|
||||
Floating point max / min are commutable when -enable-unsafe-fp-path is
|
||||
specified. We should turn int_x86_sse_max_ss and X86ISD::FMIN etc. into other
|
||||
nodes which are selected to max / min instructions that are marked commutable.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
We should compile this:
|
||||
#include <xmmintrin.h>
|
||||
typedef union {
|
||||
int i[4];
|
||||
float f[4];
|
||||
__m128 v;
|
||||
} vector4_t;
|
||||
void swizzle (const void *a, vector4_t * b, vector4_t * c) {
|
||||
b->v = _mm_loadl_pi (b->v, (__m64 *) a);
|
||||
c->v = _mm_loadl_pi (c->v, ((__m64 *) a) + 1);
|
||||
}
|
||||
|
||||
to:
|
||||
|
||||
_swizzle:
|
||||
movl 4(%esp), %eax
|
||||
movl 8(%esp), %edx
|
||||
movl 12(%esp), %ecx
|
||||
movlps (%eax), %xmm0
|
||||
movlps %xmm0, (%edx)
|
||||
movlps 8(%eax), %xmm0
|
||||
movlps %xmm0, (%ecx)
|
||||
ret
|
||||
|
||||
not:
|
||||
|
||||
swizzle:
|
||||
movl 8(%esp), %eax
|
||||
movaps (%eax), %xmm0
|
||||
movl 4(%esp), %ecx
|
||||
movlps (%ecx), %xmm0
|
||||
movaps %xmm0, (%eax)
|
||||
movl 12(%esp), %eax
|
||||
movaps (%eax), %xmm0
|
||||
movlps 8(%ecx), %xmm0
|
||||
movaps %xmm0, (%eax)
|
||||
ret
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user