Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(683)

Side by Side Diff: src/ia32/assembler-ia32-inl.h

Issue 1005183006: Serializer: serialize internal references via object visitor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix compilation Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ia32/assembler-ia32.h ('k') | src/objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 return Memory::Address_at(pc_); 159 return Memory::Address_at(pc_);
160 } 160 }
161 161
162 162
163 Address RelocInfo::target_internal_reference() { 163 Address RelocInfo::target_internal_reference() {
164 DCHECK(rmode_ == INTERNAL_REFERENCE); 164 DCHECK(rmode_ == INTERNAL_REFERENCE);
165 return Memory::Address_at(pc_); 165 return Memory::Address_at(pc_);
166 } 166 }
167 167
168 168
169 void RelocInfo::set_target_internal_reference(Address target) { 169 Address RelocInfo::target_internal_reference_address() {
170 DCHECK(rmode_ == INTERNAL_REFERENCE); 170 DCHECK(rmode_ == INTERNAL_REFERENCE);
171 Memory::Address_at(pc_) = target; 171 return reinterpret_cast<Address>(pc_);
172 } 172 }
173 173
174 174
175 Address RelocInfo::target_runtime_entry(Assembler* origin) { 175 Address RelocInfo::target_runtime_entry(Assembler* origin) {
176 DCHECK(IsRuntimeEntry(rmode_)); 176 DCHECK(IsRuntimeEntry(rmode_));
177 return reinterpret_cast<Address>(*reinterpret_cast<int32_t*>(pc_)); 177 return reinterpret_cast<Address>(*reinterpret_cast<int32_t*>(pc_));
178 } 178 }
179 179
180 180
181 void RelocInfo::set_target_runtime_entry(Address target, 181 void RelocInfo::set_target_runtime_entry(Address target,
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 273
274 274
275 Object** RelocInfo::call_object_address() { 275 Object** RelocInfo::call_object_address() {
276 DCHECK((IsJSReturn(rmode()) && IsPatchedReturnSequence()) || 276 DCHECK((IsJSReturn(rmode()) && IsPatchedReturnSequence()) ||
277 (IsDebugBreakSlot(rmode()) && IsPatchedDebugBreakSlotSequence())); 277 (IsDebugBreakSlot(rmode()) && IsPatchedDebugBreakSlotSequence()));
278 return reinterpret_cast<Object**>(pc_ + 1); 278 return reinterpret_cast<Object**>(pc_ + 1);
279 } 279 }
280 280
281 281
282 void RelocInfo::WipeOut() { 282 void RelocInfo::WipeOut() {
283 if (IsEmbeddedObject(rmode_) || IsExternalReference(rmode_)) { 283 if (IsEmbeddedObject(rmode_) || IsExternalReference(rmode_) ||
284 IsInternalReference(rmode_)) {
284 Memory::Address_at(pc_) = NULL; 285 Memory::Address_at(pc_) = NULL;
285 } else if (IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)) { 286 } else if (IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)) {
286 // Effectively write zero into the relocation. 287 // Effectively write zero into the relocation.
287 Assembler::set_target_address_at(pc_, host_, pc_ + sizeof(int32_t)); 288 Assembler::set_target_address_at(pc_, host_, pc_ + sizeof(int32_t));
288 } else { 289 } else {
289 UNREACHABLE(); 290 UNREACHABLE();
290 } 291 }
291 } 292 }
292 293
293 294
(...skipping 11 matching lines...) Expand all
305 RelocInfo::Mode mode = rmode(); 306 RelocInfo::Mode mode = rmode();
306 if (mode == RelocInfo::EMBEDDED_OBJECT) { 307 if (mode == RelocInfo::EMBEDDED_OBJECT) {
307 visitor->VisitEmbeddedPointer(this); 308 visitor->VisitEmbeddedPointer(this);
308 CpuFeatures::FlushICache(pc_, sizeof(Address)); 309 CpuFeatures::FlushICache(pc_, sizeof(Address));
309 } else if (RelocInfo::IsCodeTarget(mode)) { 310 } else if (RelocInfo::IsCodeTarget(mode)) {
310 visitor->VisitCodeTarget(this); 311 visitor->VisitCodeTarget(this);
311 } else if (mode == RelocInfo::CELL) { 312 } else if (mode == RelocInfo::CELL) {
312 visitor->VisitCell(this); 313 visitor->VisitCell(this);
313 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { 314 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
314 visitor->VisitExternalReference(this); 315 visitor->VisitExternalReference(this);
315 CpuFeatures::FlushICache(pc_, sizeof(Address)); 316 } else if (mode == RelocInfo::INTERNAL_REFERENCE) {
317 visitor->VisitInternalReference(this);
316 } else if (RelocInfo::IsCodeAgeSequence(mode)) { 318 } else if (RelocInfo::IsCodeAgeSequence(mode)) {
317 visitor->VisitCodeAgeSequence(this); 319 visitor->VisitCodeAgeSequence(this);
318 } else if (((RelocInfo::IsJSReturn(mode) && 320 } else if (((RelocInfo::IsJSReturn(mode) &&
319 IsPatchedReturnSequence()) || 321 IsPatchedReturnSequence()) ||
320 (RelocInfo::IsDebugBreakSlot(mode) && 322 (RelocInfo::IsDebugBreakSlot(mode) &&
321 IsPatchedDebugBreakSlotSequence())) && 323 IsPatchedDebugBreakSlotSequence())) &&
322 isolate->debug()->has_break_points()) { 324 isolate->debug()->has_break_points()) {
323 visitor->VisitDebugTarget(this); 325 visitor->VisitDebugTarget(this);
324 } else if (IsRuntimeEntry(mode)) { 326 } else if (IsRuntimeEntry(mode)) {
325 visitor->VisitRuntimeEntry(this); 327 visitor->VisitRuntimeEntry(this);
326 } 328 }
327 } 329 }
328 330
329 331
330 template<typename StaticVisitor> 332 template<typename StaticVisitor>
331 void RelocInfo::Visit(Heap* heap) { 333 void RelocInfo::Visit(Heap* heap) {
332 RelocInfo::Mode mode = rmode(); 334 RelocInfo::Mode mode = rmode();
333 if (mode == RelocInfo::EMBEDDED_OBJECT) { 335 if (mode == RelocInfo::EMBEDDED_OBJECT) {
334 StaticVisitor::VisitEmbeddedPointer(heap, this); 336 StaticVisitor::VisitEmbeddedPointer(heap, this);
335 CpuFeatures::FlushICache(pc_, sizeof(Address)); 337 CpuFeatures::FlushICache(pc_, sizeof(Address));
336 } else if (RelocInfo::IsCodeTarget(mode)) { 338 } else if (RelocInfo::IsCodeTarget(mode)) {
337 StaticVisitor::VisitCodeTarget(heap, this); 339 StaticVisitor::VisitCodeTarget(heap, this);
338 } else if (mode == RelocInfo::CELL) { 340 } else if (mode == RelocInfo::CELL) {
339 StaticVisitor::VisitCell(heap, this); 341 StaticVisitor::VisitCell(heap, this);
340 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { 342 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
341 StaticVisitor::VisitExternalReference(this); 343 StaticVisitor::VisitExternalReference(this);
342 CpuFeatures::FlushICache(pc_, sizeof(Address)); 344 } else if (mode == RelocInfo::INTERNAL_REFERENCE) {
345 StaticVisitor::VisitInternalReference(this);
343 } else if (RelocInfo::IsCodeAgeSequence(mode)) { 346 } else if (RelocInfo::IsCodeAgeSequence(mode)) {
344 StaticVisitor::VisitCodeAgeSequence(heap, this); 347 StaticVisitor::VisitCodeAgeSequence(heap, this);
345 } else if (heap->isolate()->debug()->has_break_points() && 348 } else if (heap->isolate()->debug()->has_break_points() &&
346 ((RelocInfo::IsJSReturn(mode) && 349 ((RelocInfo::IsJSReturn(mode) &&
347 IsPatchedReturnSequence()) || 350 IsPatchedReturnSequence()) ||
348 (RelocInfo::IsDebugBreakSlot(mode) && 351 (RelocInfo::IsDebugBreakSlot(mode) &&
349 IsPatchedDebugBreakSlotSequence()))) { 352 IsPatchedDebugBreakSlotSequence()))) {
350 StaticVisitor::VisitDebugTarget(heap, this); 353 StaticVisitor::VisitDebugTarget(heap, this);
351 } else if (IsRuntimeEntry(mode)) { 354 } else if (IsRuntimeEntry(mode)) {
352 StaticVisitor::VisitRuntimeEntry(this); 355 StaticVisitor::VisitRuntimeEntry(this);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 if (L->is_near_linked()) { 524 if (L->is_near_linked()) {
522 int offset = L->near_link_pos() - pc_offset(); 525 int offset = L->near_link_pos() - pc_offset();
523 DCHECK(is_int8(offset)); 526 DCHECK(is_int8(offset));
524 disp = static_cast<byte>(offset & 0xFF); 527 disp = static_cast<byte>(offset & 0xFF);
525 } 528 }
526 L->link_to(pc_offset(), Label::kNear); 529 L->link_to(pc_offset(), Label::kNear);
527 *pc_++ = disp; 530 *pc_++ = disp;
528 } 531 }
529 532
530 533
534 void Assembler::deserialization_set_target_internal_reference_at(
535 Address pc, Address target) {
536 Memory::Address_at(pc) = target;
537 }
538
539
531 void Operand::set_modrm(int mod, Register rm) { 540 void Operand::set_modrm(int mod, Register rm) {
532 DCHECK((mod & -4) == 0); 541 DCHECK((mod & -4) == 0);
533 buf_[0] = mod << 6 | rm.code(); 542 buf_[0] = mod << 6 | rm.code();
534 len_ = 1; 543 len_ = 1;
535 } 544 }
536 545
537 546
538 void Operand::set_sib(ScaleFactor scale, Register index, Register base) { 547 void Operand::set_sib(ScaleFactor scale, Register index, Register base) {
539 DCHECK(len_ == 1); 548 DCHECK(len_ == 1);
540 DCHECK((scale & -4) == 0); 549 DCHECK((scale & -4) == 0);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 588
580 589
581 Operand::Operand(Immediate imm) { 590 Operand::Operand(Immediate imm) {
582 // [disp/r] 591 // [disp/r]
583 set_modrm(0, ebp); 592 set_modrm(0, ebp);
584 set_dispr(imm.x_, imm.rmode_); 593 set_dispr(imm.x_, imm.rmode_);
585 } 594 }
586 } } // namespace v8::internal 595 } } // namespace v8::internal
587 596
588 #endif // V8_IA32_ASSEMBLER_IA32_INL_H_ 597 #endif // V8_IA32_ASSEMBLER_IA32_INL_H_
OLDNEW
« no previous file with comments | « src/ia32/assembler-ia32.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698