| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 #include "lithium.h" | 33 #include "lithium.h" |
| 34 #include "safepoint-table.h" | 34 #include "safepoint-table.h" |
| 35 #include "utils.h" | 35 #include "utils.h" |
| 36 | 36 |
| 37 namespace v8 { | 37 namespace v8 { |
| 38 namespace internal { | 38 namespace internal { |
| 39 | 39 |
| 40 // Forward declarations. | 40 // Forward declarations. |
| 41 class LCodeGen; | 41 class LCodeGen; |
| 42 | 42 |
| 43 #define LITHIUM_ALL_INSTRUCTION_LIST(V) \ | |
| 44 V(ControlInstruction) \ | |
| 45 V(Call) \ | |
| 46 LITHIUM_CONCRETE_INSTRUCTION_LIST(V) | |
| 47 | |
| 48 | |
| 49 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ | 43 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ |
| 50 V(AccessArgumentsAt) \ | 44 V(AccessArgumentsAt) \ |
| 51 V(AddI) \ | 45 V(AddI) \ |
| 46 V(AddS) \ |
| 52 V(Allocate) \ | 47 V(Allocate) \ |
| 53 V(ApplyArguments) \ | 48 V(ApplyArguments) \ |
| 54 V(ArgumentsElements) \ | 49 V(ArgumentsElements) \ |
| 55 V(ArgumentsLength) \ | 50 V(ArgumentsLength) \ |
| 56 V(ArithmeticD) \ | 51 V(ArithmeticD) \ |
| 57 V(ArithmeticT) \ | 52 V(ArithmeticT) \ |
| 58 V(BitI) \ | 53 V(BitI) \ |
| 54 V(BitS) \ |
| 59 V(BitNotI) \ | 55 V(BitNotI) \ |
| 60 V(BoundsCheck) \ | 56 V(BoundsCheck) \ |
| 61 V(Branch) \ | 57 V(Branch) \ |
| 62 V(CallConstantFunction) \ | 58 V(CallConstantFunction) \ |
| 63 V(CallFunction) \ | 59 V(CallFunction) \ |
| 64 V(CallGlobal) \ | 60 V(CallGlobal) \ |
| 65 V(CallKeyed) \ | 61 V(CallKeyed) \ |
| 66 V(CallKnownGlobal) \ | 62 V(CallKnownGlobal) \ |
| 67 V(CallNamed) \ | 63 V(CallNamed) \ |
| 68 V(CallNew) \ | 64 V(CallNew) \ |
| 69 V(CallNewArray) \ | 65 V(CallNewArray) \ |
| 70 V(CallRuntime) \ | 66 V(CallRuntime) \ |
| 71 V(CallStub) \ | 67 V(CallStub) \ |
| 72 V(CheckFunction) \ | 68 V(CheckFunction) \ |
| 73 V(CheckInstanceType) \ | 69 V(CheckInstanceType) \ |
| 70 V(CheckMaps) \ |
| 71 V(CheckMapValue) \ |
| 74 V(CheckNonSmi) \ | 72 V(CheckNonSmi) \ |
| 75 V(CheckMaps) \ | |
| 76 V(CheckPrototypeMaps) \ | 73 V(CheckPrototypeMaps) \ |
| 77 V(CheckSmi) \ | 74 V(CheckSmi) \ |
| 78 V(ClampDToUint8) \ | 75 V(ClampDToUint8) \ |
| 79 V(ClampIToUint8) \ | 76 V(ClampIToUint8) \ |
| 80 V(ClampTToUint8) \ | 77 V(ClampTToUint8) \ |
| 81 V(ClassOfTestAndBranch) \ | 78 V(ClassOfTestAndBranch) \ |
| 82 V(CompareNumericAndBranch) \ | |
| 83 V(CmpMapAndBranch) \ | 79 V(CmpMapAndBranch) \ |
| 84 V(CmpObjectEqAndBranch) \ | 80 V(CmpObjectEqAndBranch) \ |
| 85 V(CmpT) \ | 81 V(CmpT) \ |
| 82 V(CompareNumericAndBranch) \ |
| 86 V(ConstantD) \ | 83 V(ConstantD) \ |
| 87 V(ConstantI) \ | 84 V(ConstantI) \ |
| 88 V(ConstantS) \ | 85 V(ConstantS) \ |
| 89 V(ConstantT) \ | 86 V(ConstantT) \ |
| 90 V(Context) \ | 87 V(Context) \ |
| 91 V(DateField) \ | 88 V(DateField) \ |
| 92 V(DebugBreak) \ | 89 V(DebugBreak) \ |
| 93 V(DeclareGlobals) \ | 90 V(DeclareGlobals) \ |
| 94 V(Deoptimize) \ | 91 V(Deoptimize) \ |
| 95 V(DivI) \ | 92 V(DivI) \ |
| (...skipping 14 matching lines...) Expand all Loading... |
| 110 V(InstanceOf) \ | 107 V(InstanceOf) \ |
| 111 V(InstanceOfKnownGlobal) \ | 108 V(InstanceOfKnownGlobal) \ |
| 112 V(InstanceSize) \ | 109 V(InstanceSize) \ |
| 113 V(InstructionGap) \ | 110 V(InstructionGap) \ |
| 114 V(Integer32ToDouble) \ | 111 V(Integer32ToDouble) \ |
| 115 V(Integer32ToSmi) \ | 112 V(Integer32ToSmi) \ |
| 116 V(InvokeFunction) \ | 113 V(InvokeFunction) \ |
| 117 V(IsConstructCallAndBranch) \ | 114 V(IsConstructCallAndBranch) \ |
| 118 V(IsNumberAndBranch) \ | 115 V(IsNumberAndBranch) \ |
| 119 V(IsObjectAndBranch) \ | 116 V(IsObjectAndBranch) \ |
| 117 V(IsSmiAndBranch) \ |
| 120 V(IsStringAndBranch) \ | 118 V(IsStringAndBranch) \ |
| 121 V(IsSmiAndBranch) \ | |
| 122 V(IsUndetectableAndBranch) \ | 119 V(IsUndetectableAndBranch) \ |
| 123 V(Label) \ | 120 V(Label) \ |
| 124 V(LazyBailout) \ | 121 V(LazyBailout) \ |
| 125 V(LinkObjectInList) \ | 122 V(LinkObjectInList) \ |
| 126 V(LoadContextSlot) \ | 123 V(LoadContextSlot) \ |
| 127 V(LoadExternalArrayPointer) \ | 124 V(LoadExternalArrayPointer) \ |
| 125 V(LoadFieldByIndex) \ |
| 128 V(LoadFunctionPrototype) \ | 126 V(LoadFunctionPrototype) \ |
| 129 V(LoadGlobalCell) \ | 127 V(LoadGlobalCell) \ |
| 130 V(LoadGlobalGeneric) \ | 128 V(LoadGlobalGeneric) \ |
| 131 V(LoadKeyedExternal) \ | 129 V(LoadKeyedExternal) \ |
| 132 V(LoadKeyedFixed) \ | 130 V(LoadKeyedFixed) \ |
| 133 V(LoadKeyedFixedDouble) \ | 131 V(LoadKeyedFixedDouble) \ |
| 134 V(LoadKeyedGeneric) \ | 132 V(LoadKeyedGeneric) \ |
| 135 V(LoadNamedField) \ | 133 V(LoadNamedField) \ |
| 136 V(LoadNamedFieldPolymorphic) \ | 134 V(LoadNamedFieldPolymorphic) \ |
| 137 V(LoadNamedGeneric) \ | 135 V(LoadNamedGeneric) \ |
| 138 V(MapEnumLength) \ | 136 V(MapEnumLength) \ |
| 139 V(MathAbs) \ | 137 V(MathAbs) \ |
| 138 V(MathAbsTagged) \ |
| 140 V(MathCos) \ | 139 V(MathCos) \ |
| 141 V(MathAbsTagged) \ | |
| 142 V(MathExp) \ | 140 V(MathExp) \ |
| 143 V(MathFloor) \ | 141 V(MathFloor) \ |
| 144 V(MathFloorOfDiv) \ | 142 V(MathFloorOfDiv) \ |
| 145 V(MathLog) \ | 143 V(MathLog) \ |
| 146 V(MathMinMax) \ | 144 V(MathMinMax) \ |
| 147 V(MathPowHalf) \ | 145 V(MathPowHalf) \ |
| 148 V(MathRound) \ | 146 V(MathRound) \ |
| 149 V(MathSin) \ | 147 V(MathSin) \ |
| 150 V(MathSqrt) \ | 148 V(MathSqrt) \ |
| 151 V(MathTan) \ | 149 V(MathTan) \ |
| 152 V(ModI) \ | 150 V(ModI) \ |
| 153 V(MulConstI) \ | 151 V(MulConstI) \ |
| 154 V(MulI) \ | 152 V(MulI) \ |
| 153 V(MulS) \ |
| 155 V(NumberTagD) \ | 154 V(NumberTagD) \ |
| 156 V(NumberTagU) \ | 155 V(NumberTagU) \ |
| 157 V(NumberUntagD) \ | 156 V(NumberUntagD) \ |
| 158 V(OsrEntry) \ | 157 V(OsrEntry) \ |
| 159 V(OuterContext) \ | 158 V(OuterContext) \ |
| 160 V(Parameter) \ | 159 V(Parameter) \ |
| 161 V(Power) \ | 160 V(Power) \ |
| 162 V(PushArgument) \ | 161 V(PushArgument) \ |
| 163 V(Random) \ | 162 V(Random) \ |
| 164 V(RegExpLiteral) \ | 163 V(RegExpLiteral) \ |
| (...skipping 23 matching lines...) Expand all Loading... |
| 188 V(Throw) \ | 187 V(Throw) \ |
| 189 V(ToFastProperties) \ | 188 V(ToFastProperties) \ |
| 190 V(TransitionElementsKind) \ | 189 V(TransitionElementsKind) \ |
| 191 V(TrapAllocationMemento) \ | 190 V(TrapAllocationMemento) \ |
| 192 V(TruncateDoubleToIntOrSmi) \ | 191 V(TruncateDoubleToIntOrSmi) \ |
| 193 V(Typeof) \ | 192 V(Typeof) \ |
| 194 V(TypeofIsAndBranch) \ | 193 V(TypeofIsAndBranch) \ |
| 195 V(Uint32ToDouble) \ | 194 V(Uint32ToDouble) \ |
| 196 V(UnknownOSRValue) \ | 195 V(UnknownOSRValue) \ |
| 197 V(ValueOf) \ | 196 V(ValueOf) \ |
| 198 V(CheckMapValue) \ | |
| 199 V(LoadFieldByIndex) \ | |
| 200 V(WrapReceiver) | 197 V(WrapReceiver) |
| 201 | 198 |
| 202 | 199 |
| 203 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ | 200 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ |
| 204 virtual Opcode opcode() const { return LInstruction::k##type; } \ | 201 virtual Opcode opcode() const { return LInstruction::k##type; } \ |
| 205 virtual void CompileToNative(LCodeGen* generator); \ | 202 virtual void CompileToNative(LCodeGen* generator); \ |
| 206 virtual const char* Mnemonic() const { return mnemonic; } \ | 203 virtual const char* Mnemonic() const { return mnemonic; } \ |
| 207 static L##type* cast(LInstruction* instr) { \ | 204 static L##type* cast(LInstruction* instr) { \ |
| 208 ASSERT(instr->Is##type()); \ | 205 ASSERT(instr->Is##type()); \ |
| 209 return reinterpret_cast<L##type*>(instr); \ | 206 return reinterpret_cast<L##type*>(instr); \ |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 } | 574 } |
| 578 | 575 |
| 579 LOperand* left() { return inputs_[0]; } | 576 LOperand* left() { return inputs_[0]; } |
| 580 LOperand* right() { return inputs_[1]; } | 577 LOperand* right() { return inputs_[1]; } |
| 581 | 578 |
| 582 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") | 579 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") |
| 583 DECLARE_HYDROGEN_ACCESSOR(Add) | 580 DECLARE_HYDROGEN_ACCESSOR(Add) |
| 584 }; | 581 }; |
| 585 | 582 |
| 586 | 583 |
| 584 class LAddS: public LTemplateInstruction<1, 2, 0> { |
| 585 public: |
| 586 LAddS(LOperand* left, LOperand* right) { |
| 587 inputs_[0] = left; |
| 588 inputs_[1] = right; |
| 589 } |
| 590 |
| 591 LOperand* left() { return inputs_[0]; } |
| 592 LOperand* right() { return inputs_[1]; } |
| 593 |
| 594 DECLARE_CONCRETE_INSTRUCTION(AddS, "add-s") |
| 595 DECLARE_HYDROGEN_ACCESSOR(Add) |
| 596 }; |
| 597 |
| 598 |
| 587 class LAllocate: public LTemplateInstruction<1, 1, 2> { | 599 class LAllocate: public LTemplateInstruction<1, 1, 2> { |
| 588 public: | 600 public: |
| 589 // TODO(jbramley): On ia32, this takes a context, and it is used by the | 601 // TODO(jbramley): On ia32, this takes a context, and it is used by the |
| 590 // deferred code. On ARM, an LOperand is allocated for another input, but it | 602 // deferred code. On ARM, an LOperand is allocated for another input, but it |
| 591 // is never used, and the deferred code doesn't need the context. Why? | 603 // is never used, and the deferred code doesn't need the context. Why? |
| 592 LAllocate(LOperand* size, LOperand* temp1, LOperand* temp2) { | 604 LAllocate(LOperand* size, LOperand* temp1, LOperand* temp2) { |
| 593 inputs_[0] = size; | 605 inputs_[0] = size; |
| 594 temps_[0] = temp1; | 606 temps_[0] = temp1; |
| 595 temps_[1] = temp2; | 607 temps_[1] = temp2; |
| 596 } | 608 } |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 LOperand* left() { return inputs_[0]; } | 729 LOperand* left() { return inputs_[0]; } |
| 718 LOperand* right() { return inputs_[1]; } | 730 LOperand* right() { return inputs_[1]; } |
| 719 | 731 |
| 720 Token::Value op() const { return hydrogen()->op(); } | 732 Token::Value op() const { return hydrogen()->op(); } |
| 721 | 733 |
| 722 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") | 734 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") |
| 723 DECLARE_HYDROGEN_ACCESSOR(Bitwise) | 735 DECLARE_HYDROGEN_ACCESSOR(Bitwise) |
| 724 }; | 736 }; |
| 725 | 737 |
| 726 | 738 |
| 739 class LBitS: public LTemplateInstruction<1, 2, 0> { |
| 740 public: |
| 741 LBitS(LOperand* left, LOperand* right) { |
| 742 inputs_[0] = left; |
| 743 inputs_[1] = right; |
| 744 } |
| 745 |
| 746 LOperand* left() { return inputs_[0]; } |
| 747 LOperand* right() { return inputs_[1]; } |
| 748 |
| 749 Token::Value op() const { return hydrogen()->op(); } |
| 750 |
| 751 DECLARE_CONCRETE_INSTRUCTION(BitS, "bit-s") |
| 752 DECLARE_HYDROGEN_ACCESSOR(Bitwise) |
| 753 }; |
| 754 |
| 755 |
| 727 class LBitNotI: public LTemplateInstruction<1, 1, 0> { | 756 class LBitNotI: public LTemplateInstruction<1, 1, 0> { |
| 728 public: | 757 public: |
| 729 explicit LBitNotI(LOperand* value) { | 758 explicit LBitNotI(LOperand* value) { |
| 730 inputs_[0] = value; | 759 inputs_[0] = value; |
| 731 } | 760 } |
| 732 | 761 |
| 733 LOperand* value() { return inputs_[0]; } | 762 LOperand* value() { return inputs_[0]; } |
| 734 | 763 |
| 735 DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") | 764 DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") |
| 736 }; | 765 }; |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 914 LOperand* value() { return inputs_[0]; } | 943 LOperand* value() { return inputs_[0]; } |
| 915 LOperand* temp() { return temps_[0]; } | 944 LOperand* temp() { return temps_[0]; } |
| 916 | 945 |
| 917 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") | 946 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") |
| 918 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) | 947 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) |
| 919 }; | 948 }; |
| 920 | 949 |
| 921 | 950 |
| 922 class LCheckMaps: public LTemplateInstruction<0, 1, 1> { | 951 class LCheckMaps: public LTemplateInstruction<0, 1, 1> { |
| 923 public: | 952 public: |
| 924 explicit LCheckMaps(LOperand* value, LOperand* temp) { | 953 explicit LCheckMaps(LOperand* value, LOperand* temp = NULL) { |
| 925 inputs_[0] = value; | 954 inputs_[0] = value; |
| 926 temps_[0] = temp; | 955 temps_[0] = temp; |
| 927 } | 956 } |
| 928 | 957 |
| 929 LOperand* value() { return inputs_[0]; } | 958 LOperand* value() { return inputs_[0]; } |
| 930 LOperand* temp() { return temps_[0]; } | 959 LOperand* temp() { return temps_[0]; } |
| 931 | 960 |
| 932 DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") | 961 DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps") |
| 933 DECLARE_HYDROGEN_ACCESSOR(CheckMaps) | 962 DECLARE_HYDROGEN_ACCESSOR(CheckMaps) |
| 934 }; | 963 }; |
| 935 | 964 |
| 936 | 965 |
| 937 class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> { | 966 class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> { |
| 938 public: | 967 public: |
| 939 explicit LCheckNonSmi(LOperand* value) { | 968 explicit LCheckNonSmi(LOperand* value) { |
| 940 inputs_[0] = value; | 969 inputs_[0] = value; |
| 941 } | 970 } |
| 942 | 971 |
| 943 LOperand* value() { return inputs_[0]; } | 972 LOperand* value() { return inputs_[0]; } |
| 944 | 973 |
| 945 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") | 974 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") |
| 946 DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) | 975 DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject) |
| 947 }; | 976 }; |
| 948 | 977 |
| 949 | 978 |
| 950 class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 2> { | 979 class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 2> { |
| 951 public: | 980 public: |
| 952 explicit LCheckPrototypeMaps(LOperand* temp1, LOperand* temp2) { | 981 LCheckPrototypeMaps(LOperand* temp1 = NULL, LOperand* temp2 = NULL) { |
| 953 temps_[0] = temp1; | 982 temps_[0] = temp1; |
| 954 temps_[1] = temp2; | 983 temps_[1] = temp2; |
| 955 } | 984 } |
| 956 | 985 |
| 957 LOperand* temp1() { return temps_[0]; } | 986 LOperand* temp1() { return temps_[0]; } |
| 958 LOperand* temp2() { return temps_[1]; } | 987 LOperand* temp2() { return temps_[1]; } |
| 959 | 988 |
| 960 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps"); | 989 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps"); |
| 961 DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps) | 990 DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps) |
| 962 | 991 |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1181 class LDeclareGlobals: public LTemplateInstruction<0, 0, 0> { | 1210 class LDeclareGlobals: public LTemplateInstruction<0, 0, 0> { |
| 1182 public: | 1211 public: |
| 1183 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") | 1212 DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals") |
| 1184 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) | 1213 DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals) |
| 1185 }; | 1214 }; |
| 1186 | 1215 |
| 1187 | 1216 |
| 1188 class LDeoptimize: public LTemplateInstruction<0, 0, 0> { | 1217 class LDeoptimize: public LTemplateInstruction<0, 0, 0> { |
| 1189 public: | 1218 public: |
| 1190 DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") | 1219 DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") |
| 1220 DECLARE_HYDROGEN_ACCESSOR(Deoptimize) |
| 1191 }; | 1221 }; |
| 1192 | 1222 |
| 1193 | 1223 |
| 1194 class LDivI: public LTemplateInstruction<1, 2, 1> { | 1224 class LDivI: public LTemplateInstruction<1, 2, 1> { |
| 1195 public: | 1225 public: |
| 1196 LDivI(LOperand* left, LOperand* right, LOperand* temp) { | 1226 LDivI(LOperand* left, LOperand* right, LOperand* temp) { |
| 1197 inputs_[0] = left; | 1227 inputs_[0] = left; |
| 1198 inputs_[1] = right; | 1228 inputs_[1] = right; |
| 1199 temps_[0] = temp; | 1229 temps_[0] = temp; |
| 1200 } | 1230 } |
| (...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1964 } | 1994 } |
| 1965 | 1995 |
| 1966 LOperand* left() { return inputs_[0]; } | 1996 LOperand* left() { return inputs_[0]; } |
| 1967 LOperand* right() { return inputs_[1]; } | 1997 LOperand* right() { return inputs_[1]; } |
| 1968 | 1998 |
| 1969 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") | 1999 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") |
| 1970 DECLARE_HYDROGEN_ACCESSOR(Mul) | 2000 DECLARE_HYDROGEN_ACCESSOR(Mul) |
| 1971 }; | 2001 }; |
| 1972 | 2002 |
| 1973 | 2003 |
| 2004 class LMulS: public LTemplateInstruction<1, 2, 0> { |
| 2005 public: |
| 2006 LMulS(LOperand* left, LOperand* right) { |
| 2007 inputs_[0] = left; |
| 2008 inputs_[1] = right; |
| 2009 } |
| 2010 |
| 2011 LOperand* left() { return inputs_[0]; } |
| 2012 LOperand* right() { return inputs_[1]; } |
| 2013 |
| 2014 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-s") |
| 2015 DECLARE_HYDROGEN_ACCESSOR(Mul) |
| 2016 }; |
| 2017 |
| 2018 |
| 1974 class LNumberTagD: public LTemplateInstruction<1, 1, 2> { | 2019 class LNumberTagD: public LTemplateInstruction<1, 1, 2> { |
| 1975 public: | 2020 public: |
| 1976 LNumberTagD(LOperand* value, LOperand* temp1, LOperand* temp2) { | 2021 LNumberTagD(LOperand* value, LOperand* temp1, LOperand* temp2) { |
| 1977 inputs_[0] = value; | 2022 inputs_[0] = value; |
| 1978 temps_[0] = temp1; | 2023 temps_[0] = temp1; |
| 1979 temps_[1] = temp2; | 2024 temps_[1] = temp2; |
| 1980 } | 2025 } |
| 1981 | 2026 |
| 1982 LOperand* value() { return inputs_[0]; } | 2027 LOperand* value() { return inputs_[0]; } |
| 1983 LOperand* temp1() { return temps_[0]; } | 2028 LOperand* temp1() { return temps_[0]; } |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2540 | 2585 |
| 2541 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") | 2586 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") |
| 2542 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) | 2587 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) |
| 2543 }; | 2588 }; |
| 2544 | 2589 |
| 2545 | 2590 |
| 2546 class LTransitionElementsKind: public LTemplateInstruction<0, 1, 2> { | 2591 class LTransitionElementsKind: public LTemplateInstruction<0, 1, 2> { |
| 2547 public: | 2592 public: |
| 2548 LTransitionElementsKind(LOperand* object, | 2593 LTransitionElementsKind(LOperand* object, |
| 2549 LOperand* temp1, | 2594 LOperand* temp1, |
| 2550 LOperand* temp2) { | 2595 LOperand* temp2 = NULL) { |
| 2551 inputs_[0] = object; | 2596 inputs_[0] = object; |
| 2552 temps_[0] = temp1; | 2597 temps_[0] = temp1; |
| 2553 temps_[1] = temp2; | 2598 temps_[1] = temp2; |
| 2554 } | 2599 } |
| 2555 | 2600 |
| 2556 LOperand* object() { return inputs_[0]; } | 2601 LOperand* object() { return inputs_[0]; } |
| 2557 LOperand* temp1() { return temps_[0]; } | 2602 LOperand* temp1() { return temps_[0]; } |
| 2558 LOperand* temp2() { return temps_[1]; } | 2603 LOperand* temp2() { return temps_[1]; } |
| 2559 | 2604 |
| 2560 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, | 2605 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind, |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2882 | 2927 |
| 2883 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 2928 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
| 2884 }; | 2929 }; |
| 2885 | 2930 |
| 2886 #undef DECLARE_HYDROGEN_ACCESSOR | 2931 #undef DECLARE_HYDROGEN_ACCESSOR |
| 2887 #undef DECLARE_CONCRETE_INSTRUCTION | 2932 #undef DECLARE_CONCRETE_INSTRUCTION |
| 2888 | 2933 |
| 2889 } } // namespace v8::internal | 2934 } } // namespace v8::internal |
| 2890 | 2935 |
| 2891 #endif // V8_A64_LITHIUM_A64_H_ | 2936 #endif // V8_A64_LITHIUM_A64_H_ |
| OLD | NEW |