Modified: trunk/Source/_javascript_Core/b3/air/AirOpcode.opcodes (194914 => 194915)
--- trunk/Source/_javascript_Core/b3/air/AirOpcode.opcodes 2016-01-12 19:31:40 UTC (rev 194914)
+++ trunk/Source/_javascript_Core/b3/air/AirOpcode.opcodes 2016-01-12 20:05:52 UTC (rev 194915)
@@ -517,15 +517,15 @@
x86: RelCond, Tmp, Imm, Tmp
64: Compare64 U:G:32, U:G:64, U:G:64, ZD:G:32
- RelCond, Tmp, Imm, Tmp
RelCond, Tmp, Tmp, Tmp
+ x86: RelCond, Tmp, Imm, Tmp
Test32 U:G:32, U:G:32, U:G:32, ZD:G:32
x86: ResCond, Addr, Imm, Tmp
ResCond, Tmp, Tmp, Tmp
64: Test64 U:G:32, U:G:64, U:G:64, ZD:G:32
- ResCond, Tmp, Imm, Tmp
+ x86: ResCond, Tmp, Imm, Tmp
ResCond, Tmp, Tmp, Tmp
CompareDouble U:G:32, U:F:64, U:F:64, ZD:G:32
Modified: trunk/Source/_javascript_Core/b3/testb3.cpp (194914 => 194915)
--- trunk/Source/_javascript_Core/b3/testb3.cpp 2016-01-12 19:31:40 UTC (rev 194914)
+++ trunk/Source/_javascript_Core/b3/testb3.cpp 2016-01-12 20:05:52 UTC (rev 194915)
@@ -7436,10 +7436,10 @@
CHECK(invoke<int>(*code) == 42);
}
-template<typename LeftFunctor, typename RightFunctor>
+template<typename LeftFunctor, typename RightFunctor, typename InputType>
void genericTestCompare(
B3::Opcode opcode, const LeftFunctor& leftFunctor, const RightFunctor& rightFunctor,
- int left, int right, int result)
+ InputType left, InputType right, int result)
{
// Using a compare.
{
@@ -7448,13 +7448,14 @@
Value* leftValue = leftFunctor(root, proc);
Value* rightValue = rightFunctor(root, proc);
+ Value* comparisonResult = root->appendNew<Value>(proc, opcode, Origin(), leftValue, rightValue);
root->appendNew<ControlValue>(
proc, Return, Origin(),
root->appendNew<Value>(
proc, NotEqual, Origin(),
- root->appendNew<Value>(proc, opcode, Origin(), leftValue, rightValue),
- root->appendNew<Const32Value>(proc, Origin(), 0)));
+ comparisonResult,
+ root->appendIntConstant(proc, Origin(), comparisonResult->type(), 0)));
CHECK(compileAndRun<int>(proc, left, right) == result);
}
@@ -7608,7 +7609,7 @@
left, left, modelCompare(opcode, modelLoad<T>(left), modelLoad<T>(left)));
}
-void testCompareImpl(B3::Opcode opcode, int left, int right)
+void testCompareImpl(B3::Opcode opcode, int64_t left, int64_t right)
{
int result = modelCompare(opcode, left, right);
@@ -7616,6 +7617,15 @@
genericTestCompare(
opcode,
[&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0);
+ },
+ [&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR1);
+ },
+ left, right, result);
+ genericTestCompare(
+ opcode,
+ [&] (BasicBlock* block, Procedure& proc) {
return block->appendNew<Value>(
proc, Trunc, Origin(),
block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0));
@@ -7631,6 +7641,15 @@
genericTestCompare(
opcode,
[&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<Const64Value>(proc, Origin(), left);
+ },
+ [&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR1);
+ },
+ left, right, result);
+ genericTestCompare(
+ opcode,
+ [&] (BasicBlock* block, Procedure& proc) {
return block->appendNew<Const32Value>(proc, Origin(), left);
},
[&] (BasicBlock* block, Procedure& proc) {
@@ -7644,6 +7663,15 @@
genericTestCompare(
opcode,
[&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0);
+ },
+ [&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<Const64Value>(proc, Origin(), right);
+ },
+ left, right, result);
+ genericTestCompare(
+ opcode,
+ [&] (BasicBlock* block, Procedure& proc) {
return block->appendNew<Value>(
proc, Trunc, Origin(),
block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0));
@@ -7657,6 +7685,15 @@
genericTestCompare(
opcode,
[&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<Const64Value>(proc, Origin(), left);
+ },
+ [&] (BasicBlock* block, Procedure& proc) {
+ return block->appendNew<Const64Value>(proc, Origin(), right);
+ },
+ left, right, result);
+ genericTestCompare(
+ opcode,
+ [&] (BasicBlock* block, Procedure& proc) {
return block->appendNew<Const32Value>(proc, Origin(), left);
},
[&] (BasicBlock* block, Procedure& proc) {