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
|
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
|
||||||
|
|
|
@ -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? ;
|
||||||
|
|
|
@ -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 -- )
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 { } ;
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue