OLD | NEW |
1 | 1 |
2 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 2 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
3 // All Rights Reserved. | 3 // All Rights Reserved. |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // - Redistributions of source code must retain the above copyright notice, | 9 // - Redistributions of source code must retain the above copyright notice, |
10 // this list of conditions and the following disclaimer. | 10 // this list of conditions and the following disclaimer. |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 } | 225 } |
226 | 226 |
227 | 227 |
228 void RelocInfo::set_target_runtime_entry(Address target, | 228 void RelocInfo::set_target_runtime_entry(Address target, |
229 WriteBarrierMode mode) { | 229 WriteBarrierMode mode) { |
230 ASSERT(IsRuntimeEntry(rmode_)); | 230 ASSERT(IsRuntimeEntry(rmode_)); |
231 if (target_address() != target) set_target_address(target, mode); | 231 if (target_address() != target) set_target_address(target, mode); |
232 } | 232 } |
233 | 233 |
234 | 234 |
235 Handle<JSGlobalPropertyCell> RelocInfo::target_cell_handle() { | 235 Handle<Cell> RelocInfo::target_cell_handle() { |
236 ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL); | 236 ASSERT(rmode_ == RelocInfo::CELL); |
237 Address address = Memory::Address_at(pc_); | 237 Address address = Memory::Address_at(pc_); |
238 return Handle<JSGlobalPropertyCell>( | 238 return Handle<Cell>(reinterpret_cast<Cell**>(address)); |
239 reinterpret_cast<JSGlobalPropertyCell**>(address)); | |
240 } | 239 } |
241 | 240 |
242 | 241 |
243 JSGlobalPropertyCell* RelocInfo::target_cell() { | 242 Cell* RelocInfo::target_cell() { |
244 ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL); | 243 ASSERT(rmode_ == RelocInfo::CELL); |
245 return JSGlobalPropertyCell::FromValueAddress(Memory::Address_at(pc_)); | 244 return Cell::FromValueAddress(Memory::Address_at(pc_)); |
246 } | 245 } |
247 | 246 |
248 | 247 |
249 void RelocInfo::set_target_cell(JSGlobalPropertyCell* cell, | 248 void RelocInfo::set_target_cell(Cell* cell, WriteBarrierMode mode) { |
250 WriteBarrierMode mode) { | 249 ASSERT(rmode_ == RelocInfo::CELL); |
251 ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL); | 250 Address address = cell->address() + Cell::kValueOffset; |
252 Address address = cell->address() + JSGlobalPropertyCell::kValueOffset; | |
253 Memory::Address_at(pc_) = address; | 251 Memory::Address_at(pc_) = address; |
254 if (mode == UPDATE_WRITE_BARRIER && host() != NULL) { | 252 if (mode == UPDATE_WRITE_BARRIER && host() != NULL) { |
255 // TODO(1550) We are passing NULL as a slot because cell can never be on | 253 // TODO(1550) We are passing NULL as a slot because cell can never be on |
256 // evacuation candidate. | 254 // evacuation candidate. |
257 host()->GetHeap()->incremental_marking()->RecordWrite( | 255 host()->GetHeap()->incremental_marking()->RecordWrite( |
258 host(), NULL, cell); | 256 host(), NULL, cell); |
259 } | 257 } |
260 } | 258 } |
261 | 259 |
262 | 260 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 return !Assembler::IsNop(current_instr, Assembler::DEBUG_BREAK_NOP); | 336 return !Assembler::IsNop(current_instr, Assembler::DEBUG_BREAK_NOP); |
339 } | 337 } |
340 | 338 |
341 | 339 |
342 void RelocInfo::Visit(ObjectVisitor* visitor) { | 340 void RelocInfo::Visit(ObjectVisitor* visitor) { |
343 RelocInfo::Mode mode = rmode(); | 341 RelocInfo::Mode mode = rmode(); |
344 if (mode == RelocInfo::EMBEDDED_OBJECT) { | 342 if (mode == RelocInfo::EMBEDDED_OBJECT) { |
345 visitor->VisitEmbeddedPointer(this); | 343 visitor->VisitEmbeddedPointer(this); |
346 } else if (RelocInfo::IsCodeTarget(mode)) { | 344 } else if (RelocInfo::IsCodeTarget(mode)) { |
347 visitor->VisitCodeTarget(this); | 345 visitor->VisitCodeTarget(this); |
348 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) { | 346 } else if (mode == RelocInfo::CELL) { |
349 visitor->VisitGlobalPropertyCell(this); | 347 visitor->VisitCell(this); |
350 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { | 348 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { |
351 visitor->VisitExternalReference(this); | 349 visitor->VisitExternalReference(this); |
352 } else if (RelocInfo::IsCodeAgeSequence(mode)) { | 350 } else if (RelocInfo::IsCodeAgeSequence(mode)) { |
353 visitor->VisitCodeAgeSequence(this); | 351 visitor->VisitCodeAgeSequence(this); |
354 #ifdef ENABLE_DEBUGGER_SUPPORT | 352 #ifdef ENABLE_DEBUGGER_SUPPORT |
355 // TODO(isolates): Get a cached isolate below. | 353 // TODO(isolates): Get a cached isolate below. |
356 } else if (((RelocInfo::IsJSReturn(mode) && | 354 } else if (((RelocInfo::IsJSReturn(mode) && |
357 IsPatchedReturnSequence()) || | 355 IsPatchedReturnSequence()) || |
358 (RelocInfo::IsDebugBreakSlot(mode) && | 356 (RelocInfo::IsDebugBreakSlot(mode) && |
359 IsPatchedDebugBreakSlotSequence())) && | 357 IsPatchedDebugBreakSlotSequence())) && |
360 Isolate::Current()->debug()->has_break_points()) { | 358 Isolate::Current()->debug()->has_break_points()) { |
361 visitor->VisitDebugTarget(this); | 359 visitor->VisitDebugTarget(this); |
362 #endif | 360 #endif |
363 } else if (RelocInfo::IsRuntimeEntry(mode)) { | 361 } else if (RelocInfo::IsRuntimeEntry(mode)) { |
364 visitor->VisitRuntimeEntry(this); | 362 visitor->VisitRuntimeEntry(this); |
365 } | 363 } |
366 } | 364 } |
367 | 365 |
368 | 366 |
369 template<typename StaticVisitor> | 367 template<typename StaticVisitor> |
370 void RelocInfo::Visit(Heap* heap) { | 368 void RelocInfo::Visit(Heap* heap) { |
371 RelocInfo::Mode mode = rmode(); | 369 RelocInfo::Mode mode = rmode(); |
372 if (mode == RelocInfo::EMBEDDED_OBJECT) { | 370 if (mode == RelocInfo::EMBEDDED_OBJECT) { |
373 StaticVisitor::VisitEmbeddedPointer(heap, this); | 371 StaticVisitor::VisitEmbeddedPointer(heap, this); |
374 } else if (RelocInfo::IsCodeTarget(mode)) { | 372 } else if (RelocInfo::IsCodeTarget(mode)) { |
375 StaticVisitor::VisitCodeTarget(heap, this); | 373 StaticVisitor::VisitCodeTarget(heap, this); |
376 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) { | 374 } else if (mode == RelocInfo::CELL) { |
377 StaticVisitor::VisitGlobalPropertyCell(heap, this); | 375 StaticVisitor::VisitCell(heap, this); |
378 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { | 376 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { |
379 StaticVisitor::VisitExternalReference(this); | 377 StaticVisitor::VisitExternalReference(this); |
380 } else if (RelocInfo::IsCodeAgeSequence(mode)) { | 378 } else if (RelocInfo::IsCodeAgeSequence(mode)) { |
381 StaticVisitor::VisitCodeAgeSequence(heap, this); | 379 StaticVisitor::VisitCodeAgeSequence(heap, this); |
382 #ifdef ENABLE_DEBUGGER_SUPPORT | 380 #ifdef ENABLE_DEBUGGER_SUPPORT |
383 } else if (heap->isolate()->debug()->has_break_points() && | 381 } else if (heap->isolate()->debug()->has_break_points() && |
384 ((RelocInfo::IsJSReturn(mode) && | 382 ((RelocInfo::IsJSReturn(mode) && |
385 IsPatchedReturnSequence()) || | 383 IsPatchedReturnSequence()) || |
386 (RelocInfo::IsDebugBreakSlot(mode) && | 384 (RelocInfo::IsDebugBreakSlot(mode) && |
387 IsPatchedDebugBreakSlotSequence()))) { | 385 IsPatchedDebugBreakSlotSequence()))) { |
(...skipping 29 matching lines...) Expand all Loading... |
417 } | 415 } |
418 *reinterpret_cast<Instr*>(pc_) = x; | 416 *reinterpret_cast<Instr*>(pc_) = x; |
419 pc_ += kInstrSize; | 417 pc_ += kInstrSize; |
420 CheckTrampolinePoolQuick(); | 418 CheckTrampolinePoolQuick(); |
421 } | 419 } |
422 | 420 |
423 | 421 |
424 } } // namespace v8::internal | 422 } } // namespace v8::internal |
425 | 423 |
426 #endif // V8_MIPS_ASSEMBLER_MIPS_INL_H_ | 424 #endif // V8_MIPS_ASSEMBLER_MIPS_INL_H_ |
OLD | NEW |