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

Unified Diff: runtime/vm/intermediate_language.h

Issue 475563002: Inline Int32x4 constructor (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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
Index: runtime/vm/intermediate_language.h
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 1b3285f2bab84fb4315aaed0af4c387f135e49ef..21d24ebaed760df8839bdae08a8aee5ec08f6b10 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -139,6 +139,7 @@ class RangeBoundary;
V(_Float64x2, withY, Float64x2WithY, 1496958947) \
V(_Float64x2, min, Float64x2Min, 485240583) \
V(_Float64x2, max, Float64x2Max, 2146148204) \
+ V(Int32x4, Int32x4., Int32x4Constructor, 665986284) \
V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 87082660) \
V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits, \
372517418) \
@@ -774,6 +775,7 @@ class EmbeddedArray<T, 0> {
M(Float32x4With) \
M(Float32x4ToInt32x4) \
M(MaterializeObject) \
+ M(Int32x4Constructor) \
M(Int32x4BoolConstructor) \
M(Int32x4GetFlag) \
M(Int32x4Select) \
@@ -1100,6 +1102,7 @@ FOR_EACH_INSTRUCTION(INSTRUCTION_TYPE_CHECK)
friend class Float64x2ZeroInstr;
friend class Float64x2SplatInstr;
friend class Float64x2ConstructorInstr;
+ friend class Int32x4ConstructorInstr;
friend class Int32x4BoolConstructorInstr;
friend class Int32x4GetFlagInstr;
friend class Int32x4SetFlagInstr;
@@ -6389,10 +6392,60 @@ class Float64x2OneArgInstr : public TemplateDefinition<2> {
};
+class Int32x4ConstructorInstr : public TemplateDefinition<4> {
+ public:
+ Int32x4ConstructorInstr(Value* value0, Value* value1, Value* value2,
+ Value* value3, intptr_t deopt_id) {
+ SetInputAt(0, value0);
+ SetInputAt(1, value1);
+ SetInputAt(2, value2);
+ SetInputAt(3, value3);
+ deopt_id_ = deopt_id;
+ }
+
+ Value* value0() const { return inputs_[0]; }
+ Value* value1() const { return inputs_[1]; }
+ Value* value2() const { return inputs_[2]; }
+ Value* value3() const { return inputs_[3]; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+
+ virtual Representation representation() const {
+ return kUnboxedInt32x4;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT((idx >= 0) && (idx < 4));
+ return kUnboxedUint32;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instruction cannot deoptimize, and the deopt-id
+ // was inherited from another instruction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(Int32x4Constructor)
+ virtual CompileType ComputeType() const;
+
+ virtual bool AllowsCSE() const { return true; }
+ virtual EffectSet Effects() const { return EffectSet::None(); }
+ virtual EffectSet Dependencies() const { return EffectSet::None(); }
+ virtual bool AttributesEqual(Instruction* other) const { return true; }
+
+ virtual bool MayThrow() const { return false; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Int32x4ConstructorInstr);
+};
+
+
class Int32x4BoolConstructorInstr : public TemplateDefinition<4> {
public:
Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
- Value* value3, intptr_t deopt_id) {
+ Value* value3, intptr_t deopt_id) {
SetInputAt(0, value0);
SetInputAt(1, value1);
SetInputAt(2, value2);
@@ -6414,7 +6467,7 @@ class Int32x4BoolConstructorInstr : public TemplateDefinition<4> {
}
virtual Representation RequiredInputRepresentation(intptr_t idx) const {
- ASSERT(idx >= 0 && idx < 4);
+ ASSERT((idx >= 0) && (idx < 4));
return kTagged;
}

Powered by Google App Engine
This is Rietveld 408576698