From a5898dffdebab1240e7e32054dcfb49171fd1b1d Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 10 Oct 2009 12:00:47 -0500 Subject: [PATCH] don't use MOVSLDUP/MOVSHDUP to do specialized shuffles unless sse3 is available --- basis/cpu/x86/x86.factor | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/basis/cpu/x86/x86.factor b/basis/cpu/x86/x86.factor index dab7d9d52b..c1acf92246 100644 --- a/basis/cpu/x86/x86.factor +++ b/basis/cpu/x86/x86.factor @@ -673,11 +673,9 @@ M: x86 %gather-vector-2-reps [ dupd SHUFPD ] } case ; -: float-4-shuffle ( dst shuffle -- ) +: sse1-float-4-shuffle ( dst shuffle -- ) { { { 0 1 2 3 } [ drop ] } - { { 0 0 2 2 } [ dup MOVSLDUP ] } - { { 1 1 3 3 } [ dup MOVSHDUP ] } { { 0 1 0 1 } [ dup MOVLHPS ] } { { 2 3 2 3 } [ dup MOVHLPS ] } { { 0 0 1 1 } [ dup UNPCKLPS ] } @@ -685,6 +683,15 @@ M: x86 %gather-vector-2-reps [ dupd SHUFPS ] } case ; +: float-4-shuffle ( dst shuffle -- ) + sse3? [ + { + { { 0 0 2 2 } [ dup MOVSLDUP ] } + { { 1 1 3 3 } [ dup MOVSHDUP ] } + [ sse1-float-4-shuffle ] + } case + ] [ sse1-float-4-shuffle ] if ; + : int-4-shuffle ( dst shuffle -- ) { { { 0 1 2 3 } [ drop ] }