Revision: 7243
Author: [email protected]
Date: Thu Mar 17 08:46:42 2011
Log: Emit slightly more compact code in untag double.

Review URL: http://codereview.chromium.org/6677111
http://code.google.com/p/v8/source/detail?r=7243

Modified:
 /branches/bleeding_edge/src/assembler.cc
 /branches/bleeding_edge/src/assembler.h
 /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc

=======================================
--- /branches/bleeding_edge/src/assembler.cc    Wed Mar  2 06:40:38 2011
+++ /branches/bleeding_edge/src/assembler.cc    Thu Mar 17 08:46:42 2011
@@ -67,6 +67,7 @@
 const double DoubleConstant::min_int = kMinInt;
 const double DoubleConstant::one_half = 0.5;
 const double DoubleConstant::minus_zero = -0.0;
+const double DoubleConstant::nan = OS::nan_value();
 const double DoubleConstant::negative_infinity = -V8_INFINITY;
 const char* RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING";

@@ -743,6 +744,12 @@
   return ExternalReference(reinterpret_cast<void*>(
       const_cast<double*>(&DoubleConstant::negative_infinity)));
 }
+
+
+ExternalReference ExternalReference::address_of_nan() {
+  return ExternalReference(reinterpret_cast<void*>(
+      const_cast<double*>(&DoubleConstant::nan)));
+}


 #ifndef V8_INTERPRETED_REGEXP
=======================================
--- /branches/bleeding_edge/src/assembler.h     Wed Mar  2 06:40:38 2011
+++ /branches/bleeding_edge/src/assembler.h     Thu Mar 17 08:46:42 2011
@@ -53,6 +53,7 @@
   static const double one_half;
   static const double minus_zero;
   static const double negative_infinity;
+  static const double nan;
 };


@@ -590,6 +591,7 @@
   static ExternalReference address_of_one_half();
   static ExternalReference address_of_minus_zero();
   static ExternalReference address_of_negative_infinity();
+  static ExternalReference address_of_nan();

   static ExternalReference math_sin_double_function();
   static ExternalReference math_cos_double_function();
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Thu Mar 17 07:30:48 2011 +++ /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Thu Mar 17 08:46:42 2011
@@ -3276,10 +3276,8 @@
   DeoptimizeIf(not_equal, env);

   // Convert undefined to NaN.
-  __ push(input_reg);
-  __ mov(input_reg, Factory::nan_value());
-  __ movdbl(result_reg, FieldOperand(input_reg, HeapNumber::kValueOffset));
-  __ pop(input_reg);
+  ExternalReference nan = ExternalReference::address_of_nan();
+  __ movdbl(result_reg, Operand::StaticVariable(nan));
   __ jmp(&done);

   // Heap number to XMM conversion.

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to