diff options
author | Craig Topper <craig.topper@gmail.com> | 2012-05-07 05:36:19 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2012-05-07 05:36:19 +0000 |
commit | d4e1894ec1d90ee41419ba8cce138d8da8d83db3 (patch) | |
tree | e2358d72b740edf55bbed5938e79fc6fda78f967 /llvm | |
parent | 7201e1b4b990b241c0954eec6c4454ca63d99ef6 (diff) | |
download | bcm5719-llvm-d4e1894ec1d90ee41419ba8cce138d8da8d83db3.tar.gz bcm5719-llvm-d4e1894ec1d90ee41419ba8cce138d8da8d83db3.zip |
Add SSE4A MOVNTSS/MOVNTSD instructions.
llvm-svn: 156281
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/IntrinsicsX86.td | 10 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 14 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/sse4a.ll | 19 |
3 files changed, 43 insertions, 0 deletions
diff --git a/llvm/include/llvm/IntrinsicsX86.td b/llvm/include/llvm/IntrinsicsX86.td index cb7b3eadc87..1abeb9e5559 100644 --- a/llvm/include/llvm/IntrinsicsX86.td +++ b/llvm/include/llvm/IntrinsicsX86.td @@ -1005,6 +1005,16 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". } //===----------------------------------------------------------------------===// +// SSE4A + +let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". + def int_x86_sse4a_movnt_ss : GCCBuiltin<"__builtin_ia32_movntss">, + Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty], []>; + def int_x86_sse4a_movnt_sd : GCCBuiltin<"__builtin_ia32_movntsd">, + Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty], []>; +} + +//===----------------------------------------------------------------------===// // AVX // Arithmetic ops diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index aa3e08bd4dc..0a940552453 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -7271,6 +7271,20 @@ defm : pclmul_alias<"lqhq", 0x10>; defm : pclmul_alias<"lqlq", 0x00>; //===----------------------------------------------------------------------===// +// SSE4A Instructions +//===----------------------------------------------------------------------===// + +let Predicates = [HasSSE4A] in { +def MOVNTSS : I<0x2B, MRMDestMem, (outs), (ins f32mem:$dst, VR128:$src), + "movntss\t{$src, $dst|$dst, $src}", + [(int_x86_sse4a_movnt_ss addr:$dst, VR128:$src)]>, XS; + +def MOVNTSD : I<0x2B, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src), + "movntsd\t{$src, $dst|$dst, $src}", + [(int_x86_sse4a_movnt_sd addr:$dst, VR128:$src)]>, XD; +} + +//===----------------------------------------------------------------------===// // AVX Instructions //===----------------------------------------------------------------------===// diff --git a/llvm/test/CodeGen/X86/sse4a.ll b/llvm/test/CodeGen/X86/sse4a.ll new file mode 100644 index 00000000000..0732353fce4 --- /dev/null +++ b/llvm/test/CodeGen/X86/sse4a.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s -mtriple=i686-apple-darwin9 -mattr=sse4a | FileCheck %s + +define void @test1(float* %p, <4 x float> %a) nounwind optsize ssp { +; CHECK: movntss +entry: + tail call void @llvm.x86.sse4a.movnt.ss(float* %p, <4 x float> %a) nounwind + ret void +} + +declare void @llvm.x86.sse4a.movnt.ss(float*, <4 x float>) + +define void @test2(double* %p, <2 x double> %a) nounwind optsize ssp { +; CHECK: movntsd +entry: + tail call void @llvm.x86.sse4a.movnt.sd(double* %p, <2 x double> %a) nounwind + ret void +} + +declare void @llvm.x86.sse4a.movnt.sd(double*, <2 x double>) |