Canary can now run on sandy bridge/e and ivy bridge/e
Stubbed out OPCODE_AND_NOT, its fallback implementation if bmi1 was not supported was broken. it's difficult to tell where the actual issue is there.
This commit is contained in:
@@ -1872,7 +1872,12 @@ Value* HIRBuilder::AndNot(Value* value1, Value* value2) {
|
|||||||
ASSERT_NON_FLOAT_TYPE(value1);
|
ASSERT_NON_FLOAT_TYPE(value1);
|
||||||
ASSERT_NON_FLOAT_TYPE(value2);
|
ASSERT_NON_FLOAT_TYPE(value2);
|
||||||
ASSERT_TYPES_EQUAL(value1, value2);
|
ASSERT_TYPES_EQUAL(value1, value2);
|
||||||
|
// e.andn(i.dest.reg().cvt64(), i.src2.reg().cvt64(), temp.cvt64());
|
||||||
|
#if 1
|
||||||
|
|
||||||
|
return this->And(this->Not(value2), value1);
|
||||||
|
|
||||||
|
#else
|
||||||
if (value1 == value2) {
|
if (value1 == value2) {
|
||||||
return LoadZero(value1->type);
|
return LoadZero(value1->type);
|
||||||
} else if (value1->IsConstantZero()) {
|
} else if (value1->IsConstantZero()) {
|
||||||
@@ -1886,6 +1891,7 @@ Value* HIRBuilder::AndNot(Value* value1, Value* value2) {
|
|||||||
i->set_src2(value2);
|
i->set_src2(value2);
|
||||||
i->src3.value = NULL;
|
i->src3.value = NULL;
|
||||||
return i->dest;
|
return i->dest;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Value* HIRBuilder::Or(Value* value1, Value* value2) {
|
Value* HIRBuilder::Or(Value* value1, Value* value2) {
|
||||||
|
|||||||
Reference in New Issue
Block a user