mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 05:00:26 +00:00
a note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34670 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
84da80d10b
commit
dbec2d9dcf
@ -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