From 67ea40ade33a706020c1145e9ec1a00b71d7e466 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 16 May 2010 00:49:55 -0700 Subject: [PATCH] compiler.cfg.intrinsics.simd: use ^^select-vector for simd constant nth when available --- basis/compiler/cfg/intrinsics/simd/backend/backend.factor | 1 + basis/compiler/cfg/intrinsics/simd/simd.factor | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/basis/compiler/cfg/intrinsics/simd/backend/backend.factor b/basis/compiler/cfg/intrinsics/simd/backend/backend.factor index cb4ff536dc..f84e826f19 100644 --- a/basis/compiler/cfg/intrinsics/simd/backend/backend.factor +++ b/basis/compiler/cfg/intrinsics/simd/backend/backend.factor @@ -21,6 +21,7 @@ M: ##gather-vector-2 insn-available? rep>> %gather-vector-2-reps member? ; M: ##gather-vector-4 insn-available? rep>> %gather-vector-4-reps member? ; M: ##gather-int-vector-2 insn-available? rep>> %gather-int-vector-2-reps member? ; M: ##gather-int-vector-4 insn-available? rep>> %gather-int-vector-4-reps member? ; +M: ##select-vector insn-available? rep>> %select-vector-reps member? ; M: ##store-memory-imm insn-available? rep>> %alien-vector-reps member? ; M: ##shuffle-vector insn-available? rep>> %shuffle-vector-reps member? ; M: ##shuffle-vector-imm insn-available? rep>> %shuffle-vector-imm-reps member? ; diff --git a/basis/compiler/cfg/intrinsics/simd/simd.factor b/basis/compiler/cfg/intrinsics/simd/simd.factor index 0cb7a21940..fc2cede8bc 100644 --- a/basis/compiler/cfg/intrinsics/simd/simd.factor +++ b/basis/compiler/cfg/intrinsics/simd/simd.factor @@ -303,7 +303,10 @@ PREDICATE: fixnum-vector-rep < int-vector-rep [ ^^scalar>vector ] keep [ 0 ] dip ^broadcast-vector ; : ^select-vector ( src n rep -- dst ) - [ ^broadcast-vector ] keep ^^vector>scalar ; + { + [ ^^select-vector ] + [ [ ^broadcast-vector ] keep ^^vector>scalar ] + } vl-vector-op ; ! intrinsic emitters