mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-19 17:33:29 +00:00
a348c56fde
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35266 91177308-0d34-0410-b5e6-96231b3b80d8
60 lines
1.0 KiB
Plaintext
60 lines
1.0 KiB
Plaintext
//===---------------------------------------------------------------------===//
|
|
// Random ideas for the X86 backend: MMX-specific stuff.
|
|
//===---------------------------------------------------------------------===//
|
|
|
|
//===---------------------------------------------------------------------===//
|
|
|
|
We should compile
|
|
|
|
#include <mmintrin.h>
|
|
|
|
extern __m64 C;
|
|
|
|
void baz(__v2si *A, __v2si *B)
|
|
{
|
|
*A = __builtin_ia32_psllq(*B, C);
|
|
_mm_empty();
|
|
}
|
|
|
|
to:
|
|
|
|
.globl _baz
|
|
_baz:
|
|
call L3
|
|
"L00000000001$pb":
|
|
L3:
|
|
popl %ecx
|
|
subl $12, %esp
|
|
movl 20(%esp), %eax
|
|
movq (%eax), %mm0
|
|
movl L_C$non_lazy_ptr-"L00000000001$pb"(%ecx), %eax
|
|
movq (%eax), %mm1
|
|
movl 16(%esp), %eax
|
|
psllq %mm1, %mm0
|
|
movq %mm0, (%eax)
|
|
emms
|
|
addl $12, %esp
|
|
ret
|
|
|
|
not:
|
|
|
|
_baz:
|
|
subl $12, %esp
|
|
call "L1$pb"
|
|
"L1$pb":
|
|
popl %eax
|
|
movl L_C$non_lazy_ptr-"L1$pb"(%eax), %eax
|
|
movl (%eax), %ecx
|
|
movl %ecx, (%esp)
|
|
movl 4(%eax), %eax
|
|
movl %eax, 4(%esp)
|
|
movl 20(%esp), %eax
|
|
movq (%eax), %mm0
|
|
movq (%esp), %mm1
|
|
psllq %mm1, %mm0
|
|
movl 16(%esp), %eax
|
|
movq %mm0, (%eax)
|
|
emms
|
|
addl $12, %esp
|
|
ret
|