Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: src/arm64/lithium-arm64.h

Issue 330053002: ARM, ARM64: Optimize array copy (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/arm64/lithium-arm64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/arm64/lithium-arm64.h
diff --git a/src/arm64/lithium-arm64.h b/src/arm64/lithium-arm64.h
index 18dd927d815d5a6e5cab8f13b3caf2ab08110d26..6eafb7777ba5c33d685356c89a86764fe0123034 100644
--- a/src/arm64/lithium-arm64.h
+++ b/src/arm64/lithium-arm64.h
@@ -64,6 +64,7 @@ class LCodeGen;
V(ConstantT) \
V(ConstructDouble) \
V(Context) \
+ V(CopyElements) \
V(DateField) \
V(DebugBreak) \
V(DeclareGlobals) \
@@ -76,6 +77,7 @@ class LCodeGen;
V(Drop) \
V(Dummy) \
V(DummyUse) \
+ V(FillElements) \
V(FlooringDivByConstI) \
V(FlooringDivByPowerOf2I) \
V(FlooringDivI) \
@@ -2427,6 +2429,48 @@ class LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> {
};
+class LFillElements V8_FINAL : public LTemplateInstruction<0, 4, 0> {
+ public:
+ LFillElements(LOperand* object, LOperand* from, LOperand* to,
+ LOperand* value) {
+ inputs_[0] = object;
+ inputs_[1] = from;
+ inputs_[2] = to;
+ inputs_[3] = value;
+ }
+ LOperand* elements() { return inputs_[0]; }
+ LOperand* from() { return inputs_[1]; }
+ LOperand* to() { return inputs_[2]; }
+ LOperand* value() { return inputs_[3]; }
+
+ DECLARE_CONCRETE_INSTRUCTION(FillElements, "fill-elements")
+ DECLARE_HYDROGEN_ACCESSOR(FillElements)
+
+ virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
+
+ // Max size for unroll (choosen to generate the smallest code size).
+ static const int32_t kMaxUnrolledSize = 8;
+};
+
+
+class LCopyElements V8_FINAL : public LTemplateInstruction<0, 3, 0> {
+ public:
+ LCopyElements(LOperand* src, LOperand* dst, LOperand* length) {
+ inputs_[0] = src;
+ inputs_[1] = dst;
+ inputs_[2] = length;
+ }
+ LOperand* src() { return inputs_[0]; }
+ LOperand* dst() { return inputs_[1]; }
+ LOperand* length() { return inputs_[2]; }
+
+ DECLARE_CONCRETE_INSTRUCTION(CopyElements, "copy-elements")
+ DECLARE_HYDROGEN_ACCESSOR(CopyElements)
+
+ virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
+};
+
+
template<int T>
class LStoreKeyed : public LTemplateInstruction<0, 3, T> {
public:
@@ -3141,6 +3185,7 @@ class LChunkBuilder V8_FINAL : public LChunkBuilderBase {
// An input operand in a register or a constant operand.
MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value);
+ MUST_USE_RESULT LOperand* UseRegisterAndClobberOrConstant(HValue* value);
MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value);
// A constant operand.
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/arm64/lithium-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698