compiler.cfg.intrinsics.simd: intrinsic support for double-2>float-4 conversion
parent
2ba7c8c639
commit
7fe04fa8ee
|
@ -345,6 +345,11 @@ def: dst
|
|||
use: src1 src2
|
||||
literal: rep ;
|
||||
|
||||
PURE-INSN: ##float-pack-vector
|
||||
def: dst
|
||||
use: src
|
||||
literal: rep ;
|
||||
|
||||
PURE-INSN: ##signed-pack-vector
|
||||
def: dst
|
||||
use: src1 src2
|
||||
|
|
|
@ -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: ##merge-vector-head 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: ##unsigned-pack-vector insn-available? rep>> %unsigned-pack-vector-reps member? ;
|
||||
M: ##unpack-vector-head insn-available? rep>> %unpack-vector-head-reps member? ;
|
||||
|
|
|
@ -570,7 +570,12 @@ PREDICATE: fixnum-vector-rep < int-vector-rep
|
|||
|
||||
: 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-simd-vpack-unsigned ( node -- )
|
||||
|
|
|
@ -191,6 +191,7 @@ CODEGEN: ##shuffle-vector %shuffle-vector
|
|||
CODEGEN: ##tail>head-vector %tail>head-vector
|
||||
CODEGEN: ##merge-vector-head %merge-vector-head
|
||||
CODEGEN: ##merge-vector-tail %merge-vector-tail
|
||||
CODEGEN: ##float-pack-vector %float-pack-vector
|
||||
CODEGEN: ##signed-pack-vector %signed-pack-vector
|
||||
CODEGEN: ##unsigned-pack-vector %unsigned-pack-vector
|
||||
CODEGEN: ##unpack-vector-head %unpack-vector-head
|
||||
|
|
|
@ -314,6 +314,7 @@ HOOK: %shuffle-vector-halves-imm cpu ( dst src1 src2 shuffle rep -- )
|
|||
HOOK: %tail>head-vector cpu ( dst src rep -- )
|
||||
HOOK: %merge-vector-head 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: %unsigned-pack-vector cpu ( dst src1 src2 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-halves-imm-reps cpu ( -- reps )
|
||||
HOOK: %merge-vector-reps cpu ( -- reps )
|
||||
HOOK: %float-pack-vector-reps cpu ( -- reps )
|
||||
HOOK: %signed-pack-vector-reps cpu ( -- reps )
|
||||
HOOK: %unsigned-pack-vector-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-halves-imm-reps { } ;
|
||||
M: object %merge-vector-reps { } ;
|
||||
M: object %float-pack-vector-reps { } ;
|
||||
M: object %signed-pack-vector-reps { } ;
|
||||
M: object %unsigned-pack-vector-reps { } ;
|
||||
M: object %unpack-vector-head-reps { } ;
|
||||
|
|
|
@ -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 } }
|
||||
} 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
|
||||
[ two-operand ] keep
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue