compiler.cfg.intrinsics.simd: intrinsic support for double-2>float-4 conversion

db4
Joe Groff 2010-06-01 00:34:50 -07:00
parent 2ba7c8c639
commit 7fe04fa8ee
6 changed files with 24 additions and 1 deletions

View File

@ -345,6 +345,11 @@ def: dst
use: src1 src2 use: src1 src2
literal: rep ; literal: rep ;
PURE-INSN: ##float-pack-vector
def: dst
use: src
literal: rep ;
PURE-INSN: ##signed-pack-vector PURE-INSN: ##signed-pack-vector
def: dst def: dst
use: src1 src2 use: src1 src2

View File

@ -28,6 +28,7 @@ M: ##shuffle-vector-imm insn-available? rep>> %shuffle-vector-imm-reps member? ;
M: ##shuffle-vector-halves-imm insn-available? rep>> %shuffle-vector-halves-imm-reps member? ; M: ##shuffle-vector-halves-imm insn-available? rep>> %shuffle-vector-halves-imm-reps member? ;
M: ##merge-vector-head insn-available? rep>> %merge-vector-reps member? ; M: ##merge-vector-head insn-available? rep>> %merge-vector-reps member? ;
M: ##merge-vector-tail insn-available? rep>> %merge-vector-reps member? ; M: ##merge-vector-tail insn-available? rep>> %merge-vector-reps member? ;
M: ##float-pack-vector insn-available? rep>> %float-pack-vector-reps member? ;
M: ##signed-pack-vector insn-available? rep>> %signed-pack-vector-reps member? ; M: ##signed-pack-vector insn-available? rep>> %signed-pack-vector-reps member? ;
M: ##unsigned-pack-vector insn-available? rep>> %unsigned-pack-vector-reps member? ; M: ##unsigned-pack-vector insn-available? rep>> %unsigned-pack-vector-reps member? ;
M: ##unpack-vector-head insn-available? rep>> %unpack-vector-head-reps member? ; M: ##unpack-vector-head insn-available? rep>> %unpack-vector-head-reps member? ;

View File

@ -570,7 +570,12 @@ PREDICATE: fixnum-vector-rep < int-vector-rep
: emit-simd-vpack-signed ( node -- ) : emit-simd-vpack-signed ( node -- )
{ {
[ ^^signed-pack-vector ] { double-2-rep [| src1 src2 rep |
src1 double-2-rep ^^float-pack-vector :> dst-head
src2 double-2-rep ^^float-pack-vector :> dst-tail
dst-head dst-tail { 0 1 0 1 } float-4-rep ^^shuffle-vector-halves-imm
] }
{ int-vector-rep [ ^^signed-pack-vector ] }
} emit-vv-vector-op ; } emit-vv-vector-op ;
: emit-simd-vpack-unsigned ( node -- ) : emit-simd-vpack-unsigned ( node -- )

View File

@ -191,6 +191,7 @@ CODEGEN: ##shuffle-vector %shuffle-vector
CODEGEN: ##tail>head-vector %tail>head-vector CODEGEN: ##tail>head-vector %tail>head-vector
CODEGEN: ##merge-vector-head %merge-vector-head CODEGEN: ##merge-vector-head %merge-vector-head
CODEGEN: ##merge-vector-tail %merge-vector-tail CODEGEN: ##merge-vector-tail %merge-vector-tail
CODEGEN: ##float-pack-vector %float-pack-vector
CODEGEN: ##signed-pack-vector %signed-pack-vector CODEGEN: ##signed-pack-vector %signed-pack-vector
CODEGEN: ##unsigned-pack-vector %unsigned-pack-vector CODEGEN: ##unsigned-pack-vector %unsigned-pack-vector
CODEGEN: ##unpack-vector-head %unpack-vector-head CODEGEN: ##unpack-vector-head %unpack-vector-head

View File

@ -314,6 +314,7 @@ HOOK: %shuffle-vector-halves-imm cpu ( dst src1 src2 shuffle rep -- )
HOOK: %tail>head-vector cpu ( dst src rep -- ) HOOK: %tail>head-vector cpu ( dst src rep -- )
HOOK: %merge-vector-head cpu ( dst src1 src2 rep -- ) HOOK: %merge-vector-head cpu ( dst src1 src2 rep -- )
HOOK: %merge-vector-tail cpu ( dst src1 src2 rep -- ) HOOK: %merge-vector-tail cpu ( dst src1 src2 rep -- )
HOOK: %float-pack-vector cpu ( dst src rep -- )
HOOK: %signed-pack-vector cpu ( dst src1 src2 rep -- ) HOOK: %signed-pack-vector cpu ( dst src1 src2 rep -- )
HOOK: %unsigned-pack-vector cpu ( dst src1 src2 rep -- ) HOOK: %unsigned-pack-vector cpu ( dst src1 src2 rep -- )
HOOK: %unpack-vector-head cpu ( dst src rep -- ) HOOK: %unpack-vector-head cpu ( dst src rep -- )
@ -371,6 +372,7 @@ HOOK: %shuffle-vector-reps cpu ( -- reps )
HOOK: %shuffle-vector-imm-reps cpu ( -- reps ) HOOK: %shuffle-vector-imm-reps cpu ( -- reps )
HOOK: %shuffle-vector-halves-imm-reps cpu ( -- reps ) HOOK: %shuffle-vector-halves-imm-reps cpu ( -- reps )
HOOK: %merge-vector-reps cpu ( -- reps ) HOOK: %merge-vector-reps cpu ( -- reps )
HOOK: %float-pack-vector-reps cpu ( -- reps )
HOOK: %signed-pack-vector-reps cpu ( -- reps ) HOOK: %signed-pack-vector-reps cpu ( -- reps )
HOOK: %unsigned-pack-vector-reps cpu ( -- reps ) HOOK: %unsigned-pack-vector-reps cpu ( -- reps )
HOOK: %unpack-vector-head-reps cpu ( -- reps ) HOOK: %unpack-vector-head-reps cpu ( -- reps )
@ -423,6 +425,7 @@ M: object %shuffle-vector-reps { } ;
M: object %shuffle-vector-imm-reps { } ; M: object %shuffle-vector-imm-reps { } ;
M: object %shuffle-vector-halves-imm-reps { } ; M: object %shuffle-vector-halves-imm-reps { } ;
M: object %merge-vector-reps { } ; M: object %merge-vector-reps { } ;
M: object %float-pack-vector-reps { } ;
M: object %signed-pack-vector-reps { } ; M: object %signed-pack-vector-reps { } ;
M: object %unsigned-pack-vector-reps { } ; M: object %unsigned-pack-vector-reps { } ;
M: object %unpack-vector-head-reps { } ; M: object %unpack-vector-head-reps { } ;

View File

@ -298,6 +298,14 @@ M: x86 %merge-vector-reps
{ sse2? { double-2-rep char-16-rep uchar-16-rep short-8-rep ushort-8-rep int-4-rep uint-4-rep longlong-2-rep ulonglong-2-rep } } { sse2? { double-2-rep char-16-rep uchar-16-rep short-8-rep ushort-8-rep int-4-rep uint-4-rep longlong-2-rep ulonglong-2-rep } }
} available-reps ; } available-reps ;
M: x86 %float-pack-vector
drop CVTPD2PS ;
M: x86 %float-pack-vector-reps
{
{ sse2? { double-2-rep } }
} available-reps ;
M: x86 %signed-pack-vector M: x86 %signed-pack-vector
[ two-operand ] keep [ two-operand ] keep
{ {