Title: [134634] trunk/Source/_javascript_Core
- Revision
- 134634
- Author
- bfulg...@webkit.org
- Date
- 2012-11-14 11:26:04 -0800 (Wed, 14 Nov 2012)
Log Message
Replace (typeof(x) != <"object", "undefined", ...>) with
!(typeof(x) == <"object",..>). Later is_object, is_<...> bytecode operation
will be used.
https://bugs.webkit.org/show_bug.cgi?id=98893
Patch by Valery Ignatyev <valery.ignat...@ispras.ru> on 2012-11-14
Reviewed by Filip Pizlo.
This eliminates expensive typeof implementation and
allows to use DFG optimizations, which doesn't support 'typeof'.
* bytecompiler/NodesCodegen.cpp:
(JSC::BinaryOpNode::emitBytecode):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (134633 => 134634)
--- trunk/Source/_javascript_Core/ChangeLog 2012-11-14 19:24:57 UTC (rev 134633)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-11-14 19:26:04 UTC (rev 134634)
@@ -1,3 +1,19 @@
+2012-11-14 Valery Ignatyev <valery.ignat...@ispras.ru>
+
+ Replace (typeof(x) != <"object", "undefined", ...>) with
+ !(typeof(x) == <"object",..>). Later is_object, is_<...> bytecode operation
+ will be used.
+
+ https://bugs.webkit.org/show_bug.cgi?id=98893
+
+ Reviewed by Filip Pizlo.
+
+ This eliminates expensive typeof implementation and
+ allows to use DFG optimizations, which doesn't support 'typeof'.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BinaryOpNode::emitBytecode):
+
2012-11-14 Peter Gal <galpe...@inf.u-szeged.hu>
[Qt][ARM]REGRESSION(r133985): It broke the build
Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (134633 => 134634)
--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp 2012-11-14 19:24:57 UTC (rev 134633)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp 2012-11-14 19:26:04 UTC (rev 134634)
@@ -1035,6 +1035,16 @@
RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator));
RegisterID* src2 = generator.emitNode(m_expr2);
+ if (generator.m_lastOpcodeID == op_typeof && (opcodeID == op_neq || opcodeID == op_nstricteq)) {
+ RefPtr<RegisterID> tmp = generator.tempDestination(dst);
+ if (opcodeID == op_neq)
+ generator.emitEqualityOp(op_eq, generator.finalDestination(tmp.get(), src1.get()), src1.get(), src2);
+ else if (opcodeID == op_nstricteq)
+ generator.emitEqualityOp(op_stricteq, generator.finalDestination(tmp.get(), src1.get()), src1.get(), src2);
+ else
+ ASSERT_NOT_REACHED();
+ return generator.emitUnaryOp(op_not, generator.finalDestination(dst, tmp.get()), tmp.get());
+ }
return generator.emitBinaryOp(opcodeID, generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor()));
}
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes