OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_PPC | 5 #if V8_TARGET_ARCH_PPC |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/debug/debug.h" | 10 #include "src/debug/debug.h" |
(...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 __ CallRuntime(function_id, 2); | 1419 __ CallRuntime(function_id, 2); |
1420 __ bind(&done); | 1420 __ bind(&done); |
1421 context()->Plug(r3); | 1421 context()->Plug(r3); |
1422 } | 1422 } |
1423 } | 1423 } |
1424 } | 1424 } |
1425 | 1425 |
1426 | 1426 |
1427 void FullCodeGenerator::VisitRegExpLiteral(RegExpLiteral* expr) { | 1427 void FullCodeGenerator::VisitRegExpLiteral(RegExpLiteral* expr) { |
1428 Comment cmnt(masm_, "[ RegExpLiteral"); | 1428 Comment cmnt(masm_, "[ RegExpLiteral"); |
1429 Label materialized; | 1429 __ LoadP(r6, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
1430 // Registers will be used as follows: | 1430 __ LoadSmiLiteral(r5, Smi::FromInt(expr->literal_index())); |
1431 // r8 = materialized value (RegExp literal) | 1431 __ mov(r4, Operand(expr->pattern())); |
1432 // r7 = JS function, literals array | 1432 __ mov(r3, Operand(expr->flags())); |
1433 // r6 = literal index | 1433 FastCloneRegExpStub stub(isolate()); |
1434 // r5 = RegExp pattern | 1434 __ CallStub(&stub); |
1435 // r4 = RegExp flags | |
1436 // r3 = RegExp literal clone | |
1437 __ LoadP(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | |
1438 __ LoadP(r7, FieldMemOperand(r3, JSFunction::kLiteralsOffset)); | |
1439 int literal_offset = LiteralsArray::OffsetOfLiteralAt(expr->literal_index()); | |
1440 __ LoadP(r8, FieldMemOperand(r7, literal_offset), r0); | |
1441 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); | |
1442 __ cmp(r8, ip); | |
1443 __ bne(&materialized); | |
1444 | |
1445 // Create regexp literal using runtime function. | |
1446 // Result will be in r3. | |
1447 __ LoadSmiLiteral(r6, Smi::FromInt(expr->literal_index())); | |
1448 __ mov(r5, Operand(expr->pattern())); | |
1449 __ mov(r4, Operand(expr->flags())); | |
1450 __ Push(r7, r6, r5, r4); | |
1451 __ CallRuntime(Runtime::kMaterializeRegExpLiteral, 4); | |
1452 __ mr(r8, r3); | |
1453 | |
1454 __ bind(&materialized); | |
1455 int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize; | |
1456 Label allocated, runtime_allocate; | |
1457 __ Allocate(size, r3, r5, r6, &runtime_allocate, TAG_OBJECT); | |
1458 __ b(&allocated); | |
1459 | |
1460 __ bind(&runtime_allocate); | |
1461 __ LoadSmiLiteral(r3, Smi::FromInt(size)); | |
1462 __ Push(r8, r3); | |
1463 __ CallRuntime(Runtime::kAllocateInNewSpace, 1); | |
1464 __ pop(r8); | |
1465 | |
1466 __ bind(&allocated); | |
1467 // After this, registers are used as follows: | |
1468 // r3: Newly allocated regexp. | |
1469 // r8: Materialized regexp. | |
1470 // r5: temp. | |
1471 __ CopyFields(r3, r8, r5.bit(), size / kPointerSize); | |
1472 context()->Plug(r3); | 1435 context()->Plug(r3); |
1473 } | 1436 } |
1474 | 1437 |
1475 | 1438 |
1476 void FullCodeGenerator::EmitAccessor(ObjectLiteralProperty* property) { | 1439 void FullCodeGenerator::EmitAccessor(ObjectLiteralProperty* property) { |
1477 Expression* expression = (property == NULL) ? NULL : property->value(); | 1440 Expression* expression = (property == NULL) ? NULL : property->value(); |
1478 if (expression == NULL) { | 1441 if (expression == NULL) { |
1479 __ LoadRoot(r4, Heap::kNullValueRootIndex); | 1442 __ LoadRoot(r4, Heap::kNullValueRootIndex); |
1480 __ push(r4); | 1443 __ push(r4); |
1481 } else { | 1444 } else { |
(...skipping 3515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4997 return ON_STACK_REPLACEMENT; | 4960 return ON_STACK_REPLACEMENT; |
4998 } | 4961 } |
4999 | 4962 |
5000 DCHECK(interrupt_address == | 4963 DCHECK(interrupt_address == |
5001 isolate->builtins()->OsrAfterStackCheck()->entry()); | 4964 isolate->builtins()->OsrAfterStackCheck()->entry()); |
5002 return OSR_AFTER_STACK_CHECK; | 4965 return OSR_AFTER_STACK_CHECK; |
5003 } | 4966 } |
5004 } // namespace internal | 4967 } // namespace internal |
5005 } // namespace v8 | 4968 } // namespace v8 |
5006 #endif // V8_TARGET_ARCH_PPC | 4969 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |