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.