| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #if V8_TARGET_ARCH_S390 | 5 #if V8_TARGET_ARCH_S390 |
| 6 | 6 |
| 7 #include "src/full-codegen/full-codegen.h" | |
| 8 #include "src/ast/compile-time-value.h" | 7 #include "src/ast/compile-time-value.h" |
| 9 #include "src/ast/scopes.h" | 8 #include "src/ast/scopes.h" |
| 9 #include "src/builtins/builtins-constructor.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| 11 #include "src/code-stubs.h" | 11 #include "src/code-stubs.h" |
| 12 #include "src/codegen.h" | 12 #include "src/codegen.h" |
| 13 #include "src/compilation-info.h" | 13 #include "src/compilation-info.h" |
| 14 #include "src/compiler.h" | 14 #include "src/compiler.h" |
| 15 #include "src/debug/debug.h" | 15 #include "src/debug/debug.h" |
| 16 #include "src/full-codegen/full-codegen.h" |
| 16 #include "src/ic/ic.h" | 17 #include "src/ic/ic.h" |
| 17 | 18 |
| 18 #include "src/s390/code-stubs-s390.h" | 19 #include "src/s390/code-stubs-s390.h" |
| 19 #include "src/s390/macro-assembler-s390.h" | 20 #include "src/s390/macro-assembler-s390.h" |
| 20 | 21 |
| 21 namespace v8 { | 22 namespace v8 { |
| 22 namespace internal { | 23 namespace internal { |
| 23 | 24 |
| 24 #define __ ACCESS_MASM(masm()) | 25 #define __ ACCESS_MASM(masm()) |
| 25 | 26 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 __ Push(info->scope()->scope_info()); | 204 __ Push(info->scope()->scope_info()); |
| 204 __ CallRuntime(Runtime::kNewScriptContext); | 205 __ CallRuntime(Runtime::kNewScriptContext); |
| 205 PrepareForBailoutForId(BailoutId::ScriptContext(), | 206 PrepareForBailoutForId(BailoutId::ScriptContext(), |
| 206 BailoutState::TOS_REGISTER); | 207 BailoutState::TOS_REGISTER); |
| 207 // The new target value is not used, clobbering is safe. | 208 // The new target value is not used, clobbering is safe. |
| 208 DCHECK_NULL(info->scope()->new_target_var()); | 209 DCHECK_NULL(info->scope()->new_target_var()); |
| 209 } else { | 210 } else { |
| 210 if (info->scope()->new_target_var() != nullptr) { | 211 if (info->scope()->new_target_var() != nullptr) { |
| 211 __ push(r5); // Preserve new target. | 212 __ push(r5); // Preserve new target. |
| 212 } | 213 } |
| 213 if (slots <= FastNewFunctionContextStub::MaximumSlots()) { | 214 if (slots <= |
| 214 FastNewFunctionContextStub stub(isolate(), info->scope()->scope_type()); | 215 ConstructorBuiltinsAssembler::MaximumFunctionContextSlots()) { |
| 216 Callable callable = CodeFactory::FastNewFunctionContext( |
| 217 isolate(), info->scope()->scope_type()); |
| 215 __ mov(FastNewFunctionContextDescriptor::SlotsRegister(), | 218 __ mov(FastNewFunctionContextDescriptor::SlotsRegister(), |
| 216 Operand(slots)); | 219 Operand(slots)); |
| 217 __ CallStub(&stub); | 220 __ Call(callable.code(), RelocInfo::CODE_TARGET); |
| 218 // Result of FastNewFunctionContextStub is always in new space. | 221 // Result of the FastNewFunctionContext builtin is always in new space. |
| 219 need_write_barrier = false; | 222 need_write_barrier = false; |
| 220 } else { | 223 } else { |
| 221 __ push(r3); | 224 __ push(r3); |
| 222 __ Push(Smi::FromInt(info->scope()->scope_type())); | 225 __ Push(Smi::FromInt(info->scope()->scope_type())); |
| 223 __ CallRuntime(Runtime::kNewFunctionContext); | 226 __ CallRuntime(Runtime::kNewFunctionContext); |
| 224 } | 227 } |
| 225 if (info->scope()->new_target_var() != nullptr) { | 228 if (info->scope()->new_target_var() != nullptr) { |
| 226 __ pop(r5); // Preserve new target. | 229 __ pop(r5); // Preserve new target. |
| 227 } | 230 } |
| 228 } | 231 } |
| (...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 Handle<FixedArray> constant_properties = expr->constant_properties(); | 1145 Handle<FixedArray> constant_properties = expr->constant_properties(); |
| 1143 __ LoadP(r5, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 1146 __ LoadP(r5, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 1144 __ LoadSmiLiteral(r4, Smi::FromInt(expr->literal_index())); | 1147 __ LoadSmiLiteral(r4, Smi::FromInt(expr->literal_index())); |
| 1145 __ mov(r3, Operand(constant_properties)); | 1148 __ mov(r3, Operand(constant_properties)); |
| 1146 int flags = expr->ComputeFlags(); | 1149 int flags = expr->ComputeFlags(); |
| 1147 __ LoadSmiLiteral(r2, Smi::FromInt(flags)); | 1150 __ LoadSmiLiteral(r2, Smi::FromInt(flags)); |
| 1148 if (MustCreateObjectLiteralWithRuntime(expr)) { | 1151 if (MustCreateObjectLiteralWithRuntime(expr)) { |
| 1149 __ Push(r5, r4, r3, r2); | 1152 __ Push(r5, r4, r3, r2); |
| 1150 __ CallRuntime(Runtime::kCreateObjectLiteral); | 1153 __ CallRuntime(Runtime::kCreateObjectLiteral); |
| 1151 } else { | 1154 } else { |
| 1152 FastCloneShallowObjectStub stub(isolate(), expr->properties_count()); | 1155 Callable callable = CodeFactory::FastCloneShallowObject( |
| 1153 __ CallStub(&stub); | 1156 isolate(), expr->properties_count()); |
| 1157 __ Call(callable.code(), RelocInfo::CODE_TARGET); |
| 1154 RestoreContext(); | 1158 RestoreContext(); |
| 1155 } | 1159 } |
| 1156 PrepareForBailoutForId(expr->CreateLiteralId(), BailoutState::TOS_REGISTER); | 1160 PrepareForBailoutForId(expr->CreateLiteralId(), BailoutState::TOS_REGISTER); |
| 1157 | 1161 |
| 1158 // If result_saved is true the result is on top of the stack. If | 1162 // If result_saved is true the result is on top of the stack. If |
| 1159 // result_saved is false the result is in r2. | 1163 // result_saved is false the result is in r2. |
| 1160 bool result_saved = false; | 1164 bool result_saved = false; |
| 1161 | 1165 |
| 1162 AccessorTable accessor_table(zone()); | 1166 AccessorTable accessor_table(zone()); |
| 1163 for (int i = 0; i < expr->properties()->length(); i++) { | 1167 for (int i = 0; i < expr->properties()->length(); i++) { |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1277 } | 1281 } |
| 1278 | 1282 |
| 1279 __ LoadP(r5, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 1283 __ LoadP(r5, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 1280 __ LoadSmiLiteral(r4, Smi::FromInt(expr->literal_index())); | 1284 __ LoadSmiLiteral(r4, Smi::FromInt(expr->literal_index())); |
| 1281 __ mov(r3, Operand(constant_elements)); | 1285 __ mov(r3, Operand(constant_elements)); |
| 1282 if (MustCreateArrayLiteralWithRuntime(expr)) { | 1286 if (MustCreateArrayLiteralWithRuntime(expr)) { |
| 1283 __ LoadSmiLiteral(r2, Smi::FromInt(expr->ComputeFlags())); | 1287 __ LoadSmiLiteral(r2, Smi::FromInt(expr->ComputeFlags())); |
| 1284 __ Push(r5, r4, r3, r2); | 1288 __ Push(r5, r4, r3, r2); |
| 1285 __ CallRuntime(Runtime::kCreateArrayLiteral); | 1289 __ CallRuntime(Runtime::kCreateArrayLiteral); |
| 1286 } else { | 1290 } else { |
| 1287 FastCloneShallowArrayStub stub(isolate(), allocation_site_mode); | 1291 Callable callable = |
| 1288 __ CallStub(&stub); | 1292 CodeFactory::FastCloneShallowArray(isolate(), allocation_site_mode); |
| 1293 __ Call(callable.code(), RelocInfo::CODE_TARGET); |
| 1289 RestoreContext(); | 1294 RestoreContext(); |
| 1290 } | 1295 } |
| 1291 PrepareForBailoutForId(expr->CreateLiteralId(), BailoutState::TOS_REGISTER); | 1296 PrepareForBailoutForId(expr->CreateLiteralId(), BailoutState::TOS_REGISTER); |
| 1292 | 1297 |
| 1293 bool result_saved = false; // Is the result saved to the stack? | 1298 bool result_saved = false; // Is the result saved to the stack? |
| 1294 ZoneList<Expression*>* subexprs = expr->values(); | 1299 ZoneList<Expression*>* subexprs = expr->values(); |
| 1295 int length = subexprs->length(); | 1300 int length = subexprs->length(); |
| 1296 | 1301 |
| 1297 // Emit code to evaluate all the non-constant subexpressions and to store | 1302 // Emit code to evaluate all the non-constant subexpressions and to store |
| 1298 // them into the newly cloned array. | 1303 // them into the newly cloned array. |
| (...skipping 1495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2794 DCHECK(kOSRBranchInstruction == br_instr); | 2799 DCHECK(kOSRBranchInstruction == br_instr); |
| 2795 | 2800 |
| 2796 DCHECK(interrupt_address == | 2801 DCHECK(interrupt_address == |
| 2797 isolate->builtins()->OnStackReplacement()->entry()); | 2802 isolate->builtins()->OnStackReplacement()->entry()); |
| 2798 return ON_STACK_REPLACEMENT; | 2803 return ON_STACK_REPLACEMENT; |
| 2799 } | 2804 } |
| 2800 | 2805 |
| 2801 } // namespace internal | 2806 } // namespace internal |
| 2802 } // namespace v8 | 2807 } // namespace v8 |
| 2803 #endif // V8_TARGET_ARCH_S390 | 2808 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |