Bad dp checks.
This commit is contained in:
@@ -1736,7 +1736,7 @@ table->AddSequence(OPCODE_LOG2, [](X64Emitter& e, Instr*& i) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
table->AddSequence(OPCODE_DOT_PRODUCT_3, [](X64Emitter& e, Instr*& i) {
|
table->AddSequence(OPCODE_DOT_PRODUCT_3, [](X64Emitter& e, Instr*& i) {
|
||||||
if (IsVecType(i->dest->type)) {
|
if (IsVecType(i->src1.value->type)) {
|
||||||
XmmBinaryOp(e, i, i->flags, [](X64Emitter& e, Instr& i, const Xmm& dest_src, const Xmm& src) {
|
XmmBinaryOp(e, i, i->flags, [](X64Emitter& e, Instr& i, const Xmm& dest_src, const Xmm& src) {
|
||||||
// http://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx
|
// http://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx
|
||||||
// TODO(benvanik): verify ordering
|
// TODO(benvanik): verify ordering
|
||||||
@@ -1751,7 +1751,7 @@ table->AddSequence(OPCODE_DOT_PRODUCT_3, [](X64Emitter& e, Instr*& i) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
table->AddSequence(OPCODE_DOT_PRODUCT_4, [](X64Emitter& e, Instr*& i) {
|
table->AddSequence(OPCODE_DOT_PRODUCT_4, [](X64Emitter& e, Instr*& i) {
|
||||||
if (IsVecType(i->dest->type)) {
|
if (IsVecType(i->src1.value->type)) {
|
||||||
XmmBinaryOp(e, i, i->flags, [](X64Emitter& e, Instr& i, const Xmm& dest_src, const Xmm& src) {
|
XmmBinaryOp(e, i, i->flags, [](X64Emitter& e, Instr& i, const Xmm& dest_src, const Xmm& src) {
|
||||||
// http://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx
|
// http://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx
|
||||||
// TODO(benvanik): verify ordering
|
// TODO(benvanik): verify ordering
|
||||||
|
|||||||
@@ -869,7 +869,6 @@ void XmmBinaryOpCV(X64Emitter& e, Instr*& i, xmm_vv_fn vv_fn,
|
|||||||
}
|
}
|
||||||
void XmmBinaryOp(X64Emitter& e, Instr*& i, uint32_t flags, xmm_vv_fn vv_fn) {
|
void XmmBinaryOp(X64Emitter& e, Instr*& i, uint32_t flags, xmm_vv_fn vv_fn) {
|
||||||
// TODO(benvanik): table lookup. This linear scan is slow.
|
// TODO(benvanik): table lookup. This linear scan is slow.
|
||||||
XEASSERT(i->dest->type == i->src1.value->type);
|
|
||||||
if (i->Match(SIG_TYPE_IGNORE, SIG_TYPE_F32, SIG_TYPE_F32) ||
|
if (i->Match(SIG_TYPE_IGNORE, SIG_TYPE_F32, SIG_TYPE_F32) ||
|
||||||
i->Match(SIG_TYPE_IGNORE, SIG_TYPE_F64, SIG_TYPE_F64) ||
|
i->Match(SIG_TYPE_IGNORE, SIG_TYPE_F64, SIG_TYPE_F64) ||
|
||||||
i->Match(SIG_TYPE_IGNORE, SIG_TYPE_V128, SIG_TYPE_V128)) {
|
i->Match(SIG_TYPE_IGNORE, SIG_TYPE_V128, SIG_TYPE_V128)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user