Index: src/ppc/macro-assembler-ppc.cc |
diff --git a/src/ppc/macro-assembler-ppc.cc b/src/ppc/macro-assembler-ppc.cc |
index 8148818cd39f0b6d7387fe710c15f4a83dc9dcdd..8e1447b7f11d89d3651d11df65a6508ee5136201 100644 |
--- a/src/ppc/macro-assembler-ppc.cc |
+++ b/src/ppc/macro-assembler-ppc.cc |
@@ -1979,36 +1979,7 @@ void MacroAssembler::GetMapConstructor(Register result, Register map, |
void MacroAssembler::TryGetFunctionPrototype(Register function, Register result, |
- Register scratch, Label* miss, |
- bool miss_on_bound_function) { |
- Label non_instance; |
- if (miss_on_bound_function) { |
- // Check that the receiver isn't a smi. |
- JumpIfSmi(function, miss); |
- |
- // Check that the function really is a function. Load map into result reg. |
- CompareObjectType(function, result, scratch, JS_FUNCTION_TYPE); |
- bne(miss); |
- |
- LoadP(scratch, |
- FieldMemOperand(function, JSFunction::kSharedFunctionInfoOffset)); |
- lwz(scratch, |
- FieldMemOperand(scratch, SharedFunctionInfo::kCompilerHintsOffset)); |
- TestBit(scratch, |
-#if V8_TARGET_ARCH_PPC64 |
- SharedFunctionInfo::kBoundFunction, |
-#else |
- SharedFunctionInfo::kBoundFunction + kSmiTagSize, |
-#endif |
- r0); |
- bne(miss, cr0); |
- |
- // Make sure that the function has an instance prototype. |
- lbz(scratch, FieldMemOperand(result, Map::kBitFieldOffset)); |
- andi(r0, scratch, Operand(1 << Map::kHasNonInstancePrototype)); |
- bne(&non_instance, cr0); |
- } |
- |
+ Register scratch, Label* miss) { |
// Get the prototype or initial map from the function. |
LoadP(result, |
FieldMemOperand(function, JSFunction::kPrototypeOrInitialMapOffset)); |
@@ -2028,15 +1999,6 @@ void MacroAssembler::TryGetFunctionPrototype(Register function, Register result, |
// Get the prototype from the initial map. |
LoadP(result, FieldMemOperand(result, Map::kPrototypeOffset)); |
- if (miss_on_bound_function) { |
- b(&done); |
- |
- // Non-instance prototype: Fetch prototype from constructor field |
- // in initial map. |
- bind(&non_instance); |
- GetMapConstructor(result, result, scratch, ip); |
- } |
- |
// All done. |
bind(&done); |
} |
@@ -3243,175 +3205,6 @@ void MacroAssembler::DecodeConstantPoolOffset(Register result, |
} |
-void MacroAssembler::SetRelocatedValue(Register location, Register scratch, |
- Register new_value) { |
- lwz(scratch, MemOperand(location)); |
- |
- if (FLAG_enable_embedded_constant_pool) { |
- if (emit_debug_code()) { |
- // Check that the instruction sequence is a load from the constant pool |
- ExtractBitMask(scratch, scratch, 0x1f * B16); |
- cmpi(scratch, Operand(kConstantPoolRegister.code())); |
- Check(eq, kTheInstructionToPatchShouldBeALoadFromConstantPool); |
- // Scratch was clobbered. Restore it. |
- lwz(scratch, MemOperand(location)); |
- } |
- DecodeConstantPoolOffset(scratch, location); |
- StorePX(new_value, MemOperand(kConstantPoolRegister, scratch)); |
- return; |
- } |
- |
- // This code assumes a FIXED_SEQUENCE for lis/ori |
- |
- // At this point scratch is a lis instruction. |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask | (0x1f * B16))); |
- Cmpi(scratch, Operand(ADDIS), r0); |
- Check(eq, kTheInstructionToPatchShouldBeALis); |
- lwz(scratch, MemOperand(location)); |
- } |
- |
-// insert new high word into lis instruction |
-#if V8_TARGET_ARCH_PPC64 |
- srdi(ip, new_value, Operand(32)); |
- rlwimi(scratch, ip, 16, 16, 31); |
-#else |
- rlwimi(scratch, new_value, 16, 16, 31); |
-#endif |
- |
- stw(scratch, MemOperand(location)); |
- |
- lwz(scratch, MemOperand(location, kInstrSize)); |
- // scratch is now ori. |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask)); |
- Cmpi(scratch, Operand(ORI), r0); |
- Check(eq, kTheInstructionShouldBeAnOri); |
- lwz(scratch, MemOperand(location, kInstrSize)); |
- } |
- |
-// insert new low word into ori instruction |
-#if V8_TARGET_ARCH_PPC64 |
- rlwimi(scratch, ip, 0, 16, 31); |
-#else |
- rlwimi(scratch, new_value, 0, 16, 31); |
-#endif |
- stw(scratch, MemOperand(location, kInstrSize)); |
- |
-#if V8_TARGET_ARCH_PPC64 |
- if (emit_debug_code()) { |
- lwz(scratch, MemOperand(location, 2 * kInstrSize)); |
- // scratch is now sldi. |
- And(scratch, scratch, Operand(kOpcodeMask | kExt5OpcodeMask)); |
- Cmpi(scratch, Operand(EXT5 | RLDICR), r0); |
- Check(eq, kTheInstructionShouldBeASldi); |
- } |
- |
- lwz(scratch, MemOperand(location, 3 * kInstrSize)); |
- // scratch is now ori. |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask)); |
- Cmpi(scratch, Operand(ORIS), r0); |
- Check(eq, kTheInstructionShouldBeAnOris); |
- lwz(scratch, MemOperand(location, 3 * kInstrSize)); |
- } |
- |
- rlwimi(scratch, new_value, 16, 16, 31); |
- stw(scratch, MemOperand(location, 3 * kInstrSize)); |
- |
- lwz(scratch, MemOperand(location, 4 * kInstrSize)); |
- // scratch is now ori. |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask)); |
- Cmpi(scratch, Operand(ORI), r0); |
- Check(eq, kTheInstructionShouldBeAnOri); |
- lwz(scratch, MemOperand(location, 4 * kInstrSize)); |
- } |
- rlwimi(scratch, new_value, 0, 16, 31); |
- stw(scratch, MemOperand(location, 4 * kInstrSize)); |
-#endif |
- |
-// Update the I-cache so the new lis and addic can be executed. |
-#if V8_TARGET_ARCH_PPC64 |
- FlushICache(location, 5 * kInstrSize, scratch); |
-#else |
- FlushICache(location, 2 * kInstrSize, scratch); |
-#endif |
-} |
- |
- |
-void MacroAssembler::GetRelocatedValue(Register location, Register result, |
- Register scratch) { |
- lwz(result, MemOperand(location)); |
- |
- if (FLAG_enable_embedded_constant_pool) { |
- if (emit_debug_code()) { |
- // Check that the instruction sequence is a load from the constant pool |
- ExtractBitMask(result, result, 0x1f * B16); |
- cmpi(result, Operand(kConstantPoolRegister.code())); |
- Check(eq, kTheInstructionToPatchShouldBeALoadFromConstantPool); |
- lwz(result, MemOperand(location)); |
- } |
- DecodeConstantPoolOffset(result, location); |
- LoadPX(result, MemOperand(kConstantPoolRegister, result)); |
- return; |
- } |
- |
- // This code assumes a FIXED_SEQUENCE for lis/ori |
- if (emit_debug_code()) { |
- And(result, result, Operand(kOpcodeMask | (0x1f * B16))); |
- Cmpi(result, Operand(ADDIS), r0); |
- Check(eq, kTheInstructionShouldBeALis); |
- lwz(result, MemOperand(location)); |
- } |
- |
- // result now holds a lis instruction. Extract the immediate. |
- slwi(result, result, Operand(16)); |
- |
- lwz(scratch, MemOperand(location, kInstrSize)); |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask)); |
- Cmpi(scratch, Operand(ORI), r0); |
- Check(eq, kTheInstructionShouldBeAnOri); |
- lwz(scratch, MemOperand(location, kInstrSize)); |
- } |
- // Copy the low 16bits from ori instruction into result |
- rlwimi(result, scratch, 0, 16, 31); |
- |
-#if V8_TARGET_ARCH_PPC64 |
- if (emit_debug_code()) { |
- lwz(scratch, MemOperand(location, 2 * kInstrSize)); |
- // scratch is now sldi. |
- And(scratch, scratch, Operand(kOpcodeMask | kExt5OpcodeMask)); |
- Cmpi(scratch, Operand(EXT5 | RLDICR), r0); |
- Check(eq, kTheInstructionShouldBeASldi); |
- } |
- |
- lwz(scratch, MemOperand(location, 3 * kInstrSize)); |
- // scratch is now ori. |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask)); |
- Cmpi(scratch, Operand(ORIS), r0); |
- Check(eq, kTheInstructionShouldBeAnOris); |
- lwz(scratch, MemOperand(location, 3 * kInstrSize)); |
- } |
- sldi(result, result, Operand(16)); |
- rldimi(result, scratch, 0, 48); |
- |
- lwz(scratch, MemOperand(location, 4 * kInstrSize)); |
- // scratch is now ori. |
- if (emit_debug_code()) { |
- And(scratch, scratch, Operand(kOpcodeMask)); |
- Cmpi(scratch, Operand(ORI), r0); |
- Check(eq, kTheInstructionShouldBeAnOri); |
- lwz(scratch, MemOperand(location, 4 * kInstrSize)); |
- } |
- sldi(result, result, Operand(16)); |
- rldimi(result, scratch, 0, 48); |
-#endif |
-} |
- |
- |
void MacroAssembler::CheckPageFlag( |
Register object, |
Register scratch, // scratch may be same register as object |