| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/crankshaft/mips64/lithium-mips64.h" | 5 #include "src/crankshaft/mips64/lithium-mips64.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_MIPS64 | 9 #if V8_TARGET_ARCH_MIPS64 |
| 10 | 10 |
| (...skipping 1946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1957 UNREACHABLE(); | 1957 UNREACHABLE(); |
| 1958 return NULL; | 1958 return NULL; |
| 1959 } | 1959 } |
| 1960 } | 1960 } |
| 1961 | 1961 |
| 1962 | 1962 |
| 1963 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { | 1963 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { |
| 1964 LOperand* context = UseFixed(instr->context(), cp); | 1964 LOperand* context = UseFixed(instr->context(), cp); |
| 1965 LOperand* global_object = | 1965 LOperand* global_object = |
| 1966 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); | 1966 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); |
| 1967 LOperand* vector = NULL; | 1967 LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |
| 1968 if (instr->HasVectorAndSlot()) { | |
| 1969 vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | |
| 1970 } | |
| 1971 LLoadGlobalGeneric* result = | 1968 LLoadGlobalGeneric* result = |
| 1972 new(zone()) LLoadGlobalGeneric(context, global_object, vector); | 1969 new(zone()) LLoadGlobalGeneric(context, global_object, vector); |
| 1973 return MarkAsCall(DefineFixed(result, v0), instr); | 1970 return MarkAsCall(DefineFixed(result, v0), instr); |
| 1974 } | 1971 } |
| 1975 | 1972 |
| 1976 | 1973 |
| 1977 LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { | 1974 LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { |
| 1978 LOperand* context = UseRegisterAtStart(instr->value()); | 1975 LOperand* context = UseRegisterAtStart(instr->value()); |
| 1979 LInstruction* result = | 1976 LInstruction* result = |
| 1980 DefineAsRegister(new(zone()) LLoadContextSlot(context)); | 1977 DefineAsRegister(new(zone()) LLoadContextSlot(context)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2006 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { | 2003 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { |
| 2007 LOperand* obj = UseRegisterAtStart(instr->object()); | 2004 LOperand* obj = UseRegisterAtStart(instr->object()); |
| 2008 return DefineAsRegister(new(zone()) LLoadNamedField(obj)); | 2005 return DefineAsRegister(new(zone()) LLoadNamedField(obj)); |
| 2009 } | 2006 } |
| 2010 | 2007 |
| 2011 | 2008 |
| 2012 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { | 2009 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { |
| 2013 LOperand* context = UseFixed(instr->context(), cp); | 2010 LOperand* context = UseFixed(instr->context(), cp); |
| 2014 LOperand* object = | 2011 LOperand* object = |
| 2015 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 2012 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
| 2016 LOperand* vector = NULL; | 2013 LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |
| 2017 if (instr->HasVectorAndSlot()) { | |
| 2018 vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | |
| 2019 } | |
| 2020 | 2014 |
| 2021 LInstruction* result = | 2015 LInstruction* result = |
| 2022 DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), v0); | 2016 DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), v0); |
| 2023 return MarkAsCall(result, instr); | 2017 return MarkAsCall(result, instr); |
| 2024 } | 2018 } |
| 2025 | 2019 |
| 2026 | 2020 |
| 2027 LInstruction* LChunkBuilder::DoLoadFunctionPrototype( | 2021 LInstruction* LChunkBuilder::DoLoadFunctionPrototype( |
| 2028 HLoadFunctionPrototype* instr) { | 2022 HLoadFunctionPrototype* instr) { |
| 2029 return AssignEnvironment(DefineAsRegister( | 2023 return AssignEnvironment(DefineAsRegister( |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2082 } | 2076 } |
| 2083 return result; | 2077 return result; |
| 2084 } | 2078 } |
| 2085 | 2079 |
| 2086 | 2080 |
| 2087 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 2081 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { |
| 2088 LOperand* context = UseFixed(instr->context(), cp); | 2082 LOperand* context = UseFixed(instr->context(), cp); |
| 2089 LOperand* object = | 2083 LOperand* object = |
| 2090 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 2084 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
| 2091 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); | 2085 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); |
| 2092 LOperand* vector = NULL; | 2086 LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |
| 2093 if (instr->HasVectorAndSlot()) { | |
| 2094 vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | |
| 2095 } | |
| 2096 | 2087 |
| 2097 LInstruction* result = | 2088 LInstruction* result = |
| 2098 DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), | 2089 DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), |
| 2099 v0); | 2090 v0); |
| 2100 return MarkAsCall(result, instr); | 2091 return MarkAsCall(result, instr); |
| 2101 } | 2092 } |
| 2102 | 2093 |
| 2103 | 2094 |
| 2104 LInstruction* LChunkBuilder::DoStoreKeyed(HStoreKeyed* instr) { | 2095 LInstruction* LChunkBuilder::DoStoreKeyed(HStoreKeyed* instr) { |
| 2105 if (!instr->is_fixed_typed_array()) { | 2096 if (!instr->is_fixed_typed_array()) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2148 LOperand* context = UseFixed(instr->context(), cp); | 2139 LOperand* context = UseFixed(instr->context(), cp); |
| 2149 LOperand* obj = | 2140 LOperand* obj = |
| 2150 UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 2141 UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); |
| 2151 LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); | 2142 LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); |
| 2152 LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 2143 LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); |
| 2153 | 2144 |
| 2154 DCHECK(instr->object()->representation().IsTagged()); | 2145 DCHECK(instr->object()->representation().IsTagged()); |
| 2155 DCHECK(instr->key()->representation().IsTagged()); | 2146 DCHECK(instr->key()->representation().IsTagged()); |
| 2156 DCHECK(instr->value()->representation().IsTagged()); | 2147 DCHECK(instr->value()->representation().IsTagged()); |
| 2157 | 2148 |
| 2158 LOperand* slot = NULL; | 2149 LOperand* slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); |
| 2159 LOperand* vector = NULL; | 2150 LOperand* vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); |
| 2160 if (instr->HasVectorAndSlot()) { | |
| 2161 slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); | |
| 2162 vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); | |
| 2163 } | |
| 2164 | 2151 |
| 2165 LStoreKeyedGeneric* result = | 2152 LStoreKeyedGeneric* result = |
| 2166 new (zone()) LStoreKeyedGeneric(context, obj, key, val, slot, vector); | 2153 new (zone()) LStoreKeyedGeneric(context, obj, key, val, slot, vector); |
| 2167 return MarkAsCall(result, instr); | 2154 return MarkAsCall(result, instr); |
| 2168 } | 2155 } |
| 2169 | 2156 |
| 2170 | 2157 |
| 2171 LInstruction* LChunkBuilder::DoTransitionElementsKind( | 2158 LInstruction* LChunkBuilder::DoTransitionElementsKind( |
| 2172 HTransitionElementsKind* instr) { | 2159 HTransitionElementsKind* instr) { |
| 2173 if (IsSimpleMapChangeTransition(instr->from_kind(), instr->to_kind())) { | 2160 if (IsSimpleMapChangeTransition(instr->from_kind(), instr->to_kind())) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2242 | 2229 |
| 2243 return new(zone()) LStoreNamedField(obj, val, temp); | 2230 return new(zone()) LStoreNamedField(obj, val, temp); |
| 2244 } | 2231 } |
| 2245 | 2232 |
| 2246 | 2233 |
| 2247 LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { | 2234 LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { |
| 2248 LOperand* context = UseFixed(instr->context(), cp); | 2235 LOperand* context = UseFixed(instr->context(), cp); |
| 2249 LOperand* obj = | 2236 LOperand* obj = |
| 2250 UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 2237 UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); |
| 2251 LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 2238 LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); |
| 2252 LOperand* slot = NULL; | 2239 LOperand* slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); |
| 2253 LOperand* vector = NULL; | 2240 LOperand* vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); |
| 2254 if (instr->HasVectorAndSlot()) { | |
| 2255 slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); | |
| 2256 vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); | |
| 2257 } | |
| 2258 | 2241 |
| 2259 LStoreNamedGeneric* result = | 2242 LStoreNamedGeneric* result = |
| 2260 new (zone()) LStoreNamedGeneric(context, obj, val, slot, vector); | 2243 new (zone()) LStoreNamedGeneric(context, obj, val, slot, vector); |
| 2261 return MarkAsCall(result, instr); | 2244 return MarkAsCall(result, instr); |
| 2262 } | 2245 } |
| 2263 | 2246 |
| 2264 | 2247 |
| 2265 LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) { | 2248 LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) { |
| 2266 LOperand* context = UseFixed(instr->context(), cp); | 2249 LOperand* context = UseFixed(instr->context(), cp); |
| 2267 LOperand* left = UseFixed(instr->left(), a1); | 2250 LOperand* left = UseFixed(instr->left(), a1); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2471 LOperand* index = UseTempRegister(instr->index()); | 2454 LOperand* index = UseTempRegister(instr->index()); |
| 2472 LLoadFieldByIndex* load = new(zone()) LLoadFieldByIndex(object, index); | 2455 LLoadFieldByIndex* load = new(zone()) LLoadFieldByIndex(object, index); |
| 2473 LInstruction* result = DefineSameAsFirst(load); | 2456 LInstruction* result = DefineSameAsFirst(load); |
| 2474 return AssignPointerMap(result); | 2457 return AssignPointerMap(result); |
| 2475 } | 2458 } |
| 2476 | 2459 |
| 2477 } // namespace internal | 2460 } // namespace internal |
| 2478 } // namespace v8 | 2461 } // namespace v8 |
| 2479 | 2462 |
| 2480 #endif // V8_TARGET_ARCH_MIPS64 | 2463 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |