Reviewers: Toon Verwaest,
Description:
HLoadNamedField for Smis optimized for x64
Please review this at https://codereview.chromium.org/108633003/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+14, -2 lines):
M src/hydrogen-instructions.h
M src/x64/lithium-codegen-x64.cc
Index: src/hydrogen-instructions.h
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
index
23dbbd289c6c5d5a9e07697368e9fba6ab05e22d..4dd24fd871552456a10bb77ab8f6a0e4b4b25138
100644
--- a/src/hydrogen-instructions.h
+++ b/src/hydrogen-instructions.h
@@ -6216,7 +6216,11 @@ class HLoadNamedField V8_FINAL : public
HTemplateInstruction<1> {
set_representation(Representation::Integer32());
} else if (representation.IsSmi()) {
set_type(HType::Smi());
- set_representation(representation);
+ if (SmiValuesAre32Bits()) {
+ set_representation(Representation::Integer32());
+ } else {
+ set_representation(representation);
+ }
} else if (representation.IsDouble() ||
representation.IsExternal() ||
representation.IsInteger32()) {
Index: src/x64/lithium-codegen-x64.cc
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
index
7c9949a1fad8da5b441e7ecd79d96ab41dbea073..f3a10266af293208b021e2a12f8c925779ff3470
100644
--- a/src/x64/lithium-codegen-x64.cc
+++ b/src/x64/lithium-codegen-x64.cc
@@ -2843,7 +2843,15 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField*
instr) {
__ movq(result, FieldOperand(object, JSObject::kPropertiesOffset));
object = result;
}
- __ Load(result, FieldOperand(object, offset), access.representation());
+
+ Representation representation = access.representation();
+ if (representation.IsSmi() &&
+ instr->hydrogen()->representation().IsInteger32()) {
+ // Read int value directly from upper half of the smi.
+ offset += kPointerSize / 2;
+ representation = Representation::Integer32();
+ }
+ __ Load(result, FieldOperand(object, offset), representation);
}
--
--
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.