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 |