Revision: 14850
Author:   [email protected]
Date:     Tue May 28 05:37:29 2013
Log:      Update the gap resolver to support Smi constants.

[email protected]

Review URL: https://chromiumcodereview.appspot.com/15664005
http://code.google.com/p/v8/source/detail?r=14850

Modified:
 /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc
 /branches/bleeding_edge/src/arm/lithium-codegen-arm.h
 /branches/bleeding_edge/src/arm/lithium-gap-resolver-arm.cc
 /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.h
 /branches/bleeding_edge/src/ia32/lithium-gap-resolver-ia32.cc
 /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
 /branches/bleeding_edge/src/x64/lithium-codegen-x64.h
 /branches/bleeding_edge/src/x64/lithium-gap-resolver-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Tue May 28 02:38:28 2013 +++ /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Tue May 28 05:37:29 2013
@@ -537,6 +537,12 @@
   HConstant* constant = chunk_->LookupConstant(op);
   return constant->Integer32Value();
 }
+
+
+Smi* LCodeGen::ToSmi(LConstantOperand* op) const {
+  HConstant* constant = chunk_->LookupConstant(op);
+  return Smi::FromInt(constant->Integer32Value());
+}


 double LCodeGen::ToDouble(LConstantOperand* op) const {
=======================================
--- /branches/bleeding_edge/src/arm/lithium-codegen-arm.h Thu May 23 02:19:18 2013 +++ /branches/bleeding_edge/src/arm/lithium-codegen-arm.h Tue May 28 05:37:29 2013
@@ -119,6 +119,7 @@
                                        SwVfpRegister flt_scratch,
                                        DwVfpRegister dbl_scratch);
   int ToInteger32(LConstantOperand* op) const;
+  Smi* ToSmi(LConstantOperand* op) const;
   double ToDouble(LConstantOperand* op) const;
   Operand ToOperand(LOperand* op);
   MemOperand ToMemOperand(LOperand* op) const;
=======================================
--- /branches/bleeding_edge/src/arm/lithium-gap-resolver-arm.cc Sat Apr 6 21:34:20 2013 +++ /branches/bleeding_edge/src/arm/lithium-gap-resolver-arm.cc Tue May 28 05:37:29 2013
@@ -248,7 +248,9 @@
     LConstantOperand* constant_source = LConstantOperand::cast(source);
     if (destination->IsRegister()) {
       Register dst = cgen_->ToRegister(destination);
-      if (cgen_->IsInteger32(constant_source)) {
+      if (cgen_->IsSmi(constant_source)) {
+        __ mov(dst, Operand(cgen_->ToSmi(constant_source)));
+      } else if (cgen_->IsInteger32(constant_source)) {
         __ mov(dst, Operand(cgen_->ToInteger32(constant_source)));
       } else {
         __ LoadObject(dst, cgen_->ToHandle(constant_source));
@@ -256,7 +258,9 @@
     } else {
       ASSERT(destination->IsStackSlot());
ASSERT(!in_cycle_); // Constant moves happen after all cycles are gone.
-      if (cgen_->IsInteger32(constant_source)) {
+      if (cgen_->IsSmi(constant_source)) {
+ __ mov(kSavedValueRegister, Operand(cgen_->ToSmi(constant_source)));
+      } else if (cgen_->IsInteger32(constant_source)) {
         __ mov(kSavedValueRegister,
                Operand(cgen_->ToInteger32(constant_source)));
       } else {
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.h Thu May 23 02:19:18 2013 +++ /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.h Tue May 28 05:37:29 2013
@@ -115,6 +115,9 @@
   Immediate ToInteger32Immediate(LOperand* op) const {
     return Immediate(ToInteger32(LConstantOperand::cast(op)));
   }
+  Immediate ToSmiImmediate(LOperand* op) const {
+ return Immediate(Smi::FromInt(ToInteger32(LConstantOperand::cast(op))));
+  }

   // Support for non-sse2 (x87) floating point stack handling.
   // These functions maintain the depth of the stack (either 0 or 1)
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-gap-resolver-ia32.cc Tue Apr 9 01:42:57 2013 +++ /branches/bleeding_edge/src/ia32/lithium-gap-resolver-ia32.cc Tue May 28 05:37:29 2013
@@ -306,7 +306,9 @@
     LConstantOperand* constant_source = LConstantOperand::cast(source);
     if (destination->IsRegister()) {
       Register dst = cgen_->ToRegister(destination);
-      if (cgen_->IsInteger32(constant_source)) {
+      if (cgen_->IsSmi(constant_source)) {
+        __ Set(dst, cgen_->ToSmiImmediate(constant_source));
+      } else if (cgen_->IsInteger32(constant_source)) {
         __ Set(dst, cgen_->ToInteger32Immediate(constant_source));
       } else {
         __ LoadObject(dst, cgen_->ToHandle(constant_source));
@@ -314,7 +316,9 @@
     } else {
       ASSERT(destination->IsStackSlot());
       Operand dst = cgen_->ToOperand(destination);
-      if (cgen_->IsInteger32(constant_source)) {
+      if (cgen_->IsSmi(constant_source)) {
+        __ Set(dst, cgen_->ToSmiImmediate(constant_source));
+      } else if (cgen_->IsInteger32(constant_source)) {
         __ Set(dst, cgen_->ToInteger32Immediate(constant_source));
       } else {
         Register tmp = EnsureTempRegister();
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Tue May 28 02:38:28 2013 +++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Tue May 28 05:37:29 2013
@@ -451,6 +451,12 @@
   HConstant* constant = chunk_->LookupConstant(op);
   return constant->Integer32Value();
 }
+
+
+Smi* LCodeGen::ToSmi(LConstantOperand* op) const {
+  HConstant* constant = chunk_->LookupConstant(op);
+  return Smi::FromInt(constant->Integer32Value());
+}


 double LCodeGen::ToDouble(LConstantOperand* op) const {
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.h Thu May 23 02:19:18 2013 +++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.h Tue May 28 05:37:29 2013
@@ -106,6 +106,7 @@
   bool IsInteger32Constant(LConstantOperand* op) const;
   bool IsSmiConstant(LConstantOperand* op) const;
   int ToInteger32(LConstantOperand* op) const;
+  Smi* ToSmi(LConstantOperand* op) const;
   double ToDouble(LConstantOperand* op) const;
   bool IsTaggedConstant(LConstantOperand* op) const;
   Handle<Object> ToHandle(LConstantOperand* op) const;
=======================================
--- /branches/bleeding_edge/src/x64/lithium-gap-resolver-x64.cc Mon Jun 11 05:42:31 2012 +++ /branches/bleeding_edge/src/x64/lithium-gap-resolver-x64.cc Tue May 28 05:37:29 2013
@@ -195,7 +195,9 @@
     LConstantOperand* constant_source = LConstantOperand::cast(source);
     if (destination->IsRegister()) {
       Register dst = cgen_->ToRegister(destination);
-      if (cgen_->IsInteger32Constant(constant_source)) {
+      if (cgen_->IsSmiConstant(constant_source)) {
+        __ Move(dst, cgen_->ToSmi(constant_source));
+      } else if (cgen_->IsInteger32Constant(constant_source)) {
         __ movl(dst, Immediate(cgen_->ToInteger32(constant_source)));
       } else {
         __ LoadObject(dst, cgen_->ToHandle(constant_source));
@@ -203,7 +205,9 @@
     } else {
       ASSERT(destination->IsStackSlot());
       Operand dst = cgen_->ToOperand(destination);
-      if (cgen_->IsInteger32Constant(constant_source)) {
+      if (cgen_->IsSmiConstant(constant_source)) {
+        __ Move(dst, cgen_->ToSmi(constant_source));
+      } else if (cgen_->IsInteger32Constant(constant_source)) {
// Zero top 32 bits of a 64 bit spill slot that holds a 32 bit untagged
         // value.
         __ movq(dst, Immediate(cgen_->ToInteger32(constant_source)));

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to