| Index: src/a64/lithium-a64.h
|
| diff --git a/src/a64/lithium-a64.h b/src/a64/lithium-a64.h
|
| index a8846f48b7dfaac5c9b64ccf276e06f687b6ffbf..08bfe9e21eaf93c41e806df7434bd01329d65f30 100644
|
| --- a/src/a64/lithium-a64.h
|
| +++ b/src/a64/lithium-a64.h
|
| @@ -40,15 +40,10 @@ namespace internal {
|
| // Forward declarations.
|
| class LCodeGen;
|
|
|
| -#define LITHIUM_ALL_INSTRUCTION_LIST(V) \
|
| - V(ControlInstruction) \
|
| - V(Call) \
|
| - LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
|
| -
|
| -
|
| #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
|
| V(AccessArgumentsAt) \
|
| V(AddI) \
|
| + V(AddS) \
|
| V(Allocate) \
|
| V(ApplyArguments) \
|
| V(ArgumentsElements) \
|
| @@ -56,6 +51,7 @@ class LCodeGen;
|
| V(ArithmeticD) \
|
| V(ArithmeticT) \
|
| V(BitI) \
|
| + V(BitS) \
|
| V(BitNotI) \
|
| V(BoundsCheck) \
|
| V(Branch) \
|
| @@ -71,18 +67,19 @@ class LCodeGen;
|
| V(CallStub) \
|
| V(CheckFunction) \
|
| V(CheckInstanceType) \
|
| - V(CheckNonSmi) \
|
| V(CheckMaps) \
|
| + V(CheckMapValue) \
|
| + V(CheckNonSmi) \
|
| V(CheckPrototypeMaps) \
|
| V(CheckSmi) \
|
| V(ClampDToUint8) \
|
| V(ClampIToUint8) \
|
| V(ClampTToUint8) \
|
| V(ClassOfTestAndBranch) \
|
| - V(CompareNumericAndBranch) \
|
| V(CmpMapAndBranch) \
|
| V(CmpObjectEqAndBranch) \
|
| V(CmpT) \
|
| + V(CompareNumericAndBranch) \
|
| V(ConstantD) \
|
| V(ConstantI) \
|
| V(ConstantS) \
|
| @@ -117,14 +114,15 @@ class LCodeGen;
|
| V(IsConstructCallAndBranch) \
|
| V(IsNumberAndBranch) \
|
| V(IsObjectAndBranch) \
|
| - V(IsStringAndBranch) \
|
| V(IsSmiAndBranch) \
|
| + V(IsStringAndBranch) \
|
| V(IsUndetectableAndBranch) \
|
| V(Label) \
|
| V(LazyBailout) \
|
| V(LinkObjectInList) \
|
| V(LoadContextSlot) \
|
| V(LoadExternalArrayPointer) \
|
| + V(LoadFieldByIndex) \
|
| V(LoadFunctionPrototype) \
|
| V(LoadGlobalCell) \
|
| V(LoadGlobalGeneric) \
|
| @@ -137,8 +135,8 @@ class LCodeGen;
|
| V(LoadNamedGeneric) \
|
| V(MapEnumLength) \
|
| V(MathAbs) \
|
| - V(MathCos) \
|
| V(MathAbsTagged) \
|
| + V(MathCos) \
|
| V(MathExp) \
|
| V(MathFloor) \
|
| V(MathFloorOfDiv) \
|
| @@ -152,6 +150,7 @@ class LCodeGen;
|
| V(ModI) \
|
| V(MulConstI) \
|
| V(MulI) \
|
| + V(MulS) \
|
| V(NumberTagD) \
|
| V(NumberTagU) \
|
| V(NumberUntagD) \
|
| @@ -195,8 +194,6 @@ class LCodeGen;
|
| V(Uint32ToDouble) \
|
| V(UnknownOSRValue) \
|
| V(ValueOf) \
|
| - V(CheckMapValue) \
|
| - V(LoadFieldByIndex) \
|
| V(WrapReceiver)
|
|
|
|
|
| @@ -584,6 +581,21 @@ class LAddI: public LTemplateInstruction<1, 2, 0> {
|
| };
|
|
|
|
|
| +class LAddS: public LTemplateInstruction<1, 2, 0> {
|
| + public:
|
| + LAddS(LOperand* left, LOperand* right) {
|
| + inputs_[0] = left;
|
| + inputs_[1] = right;
|
| + }
|
| +
|
| + LOperand* left() { return inputs_[0]; }
|
| + LOperand* right() { return inputs_[1]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(AddS, "add-s")
|
| + DECLARE_HYDROGEN_ACCESSOR(Add)
|
| +};
|
| +
|
| +
|
| class LAllocate: public LTemplateInstruction<1, 1, 2> {
|
| public:
|
| // TODO(jbramley): On ia32, this takes a context, and it is used by the
|
| @@ -724,6 +736,23 @@ class LBitI: public LTemplateInstruction<1, 2, 0> {
|
| };
|
|
|
|
|
| +class LBitS: public LTemplateInstruction<1, 2, 0> {
|
| + public:
|
| + LBitS(LOperand* left, LOperand* right) {
|
| + inputs_[0] = left;
|
| + inputs_[1] = right;
|
| + }
|
| +
|
| + LOperand* left() { return inputs_[0]; }
|
| + LOperand* right() { return inputs_[1]; }
|
| +
|
| + Token::Value op() const { return hydrogen()->op(); }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(BitS, "bit-s")
|
| + DECLARE_HYDROGEN_ACCESSOR(Bitwise)
|
| +};
|
| +
|
| +
|
| class LBitNotI: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| explicit LBitNotI(LOperand* value) {
|
| @@ -921,7 +950,7 @@ class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> {
|
|
|
| class LCheckMaps: public LTemplateInstruction<0, 1, 1> {
|
| public:
|
| - explicit LCheckMaps(LOperand* value, LOperand* temp) {
|
| + explicit LCheckMaps(LOperand* value, LOperand* temp = NULL) {
|
| inputs_[0] = value;
|
| temps_[0] = temp;
|
| }
|
| @@ -949,7 +978,7 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
|
|
|
| class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 2> {
|
| public:
|
| - explicit LCheckPrototypeMaps(LOperand* temp1, LOperand* temp2) {
|
| + LCheckPrototypeMaps(LOperand* temp1 = NULL, LOperand* temp2 = NULL) {
|
| temps_[0] = temp1;
|
| temps_[1] = temp2;
|
| }
|
| @@ -1188,6 +1217,7 @@ class LDeclareGlobals: public LTemplateInstruction<0, 0, 0> {
|
| class LDeoptimize: public LTemplateInstruction<0, 0, 0> {
|
| public:
|
| DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
|
| + DECLARE_HYDROGEN_ACCESSOR(Deoptimize)
|
| };
|
|
|
|
|
| @@ -1971,6 +2001,21 @@ class LMulI: public LTemplateInstruction<1, 2, 0> {
|
| };
|
|
|
|
|
| +class LMulS: public LTemplateInstruction<1, 2, 0> {
|
| + public:
|
| + LMulS(LOperand* left, LOperand* right) {
|
| + inputs_[0] = left;
|
| + inputs_[1] = right;
|
| + }
|
| +
|
| + LOperand* left() { return inputs_[0]; }
|
| + LOperand* right() { return inputs_[1]; }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-s")
|
| + DECLARE_HYDROGEN_ACCESSOR(Mul)
|
| +};
|
| +
|
| +
|
| class LNumberTagD: public LTemplateInstruction<1, 1, 2> {
|
| public:
|
| LNumberTagD(LOperand* value, LOperand* temp1, LOperand* temp2) {
|
| @@ -2547,7 +2592,7 @@ class LTransitionElementsKind: public LTemplateInstruction<0, 1, 2> {
|
| public:
|
| LTransitionElementsKind(LOperand* object,
|
| LOperand* temp1,
|
| - LOperand* temp2) {
|
| + LOperand* temp2 = NULL) {
|
| inputs_[0] = object;
|
| temps_[0] = temp1;
|
| temps_[1] = temp2;
|
|
|