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

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

Issue 8491008: MIPS: Enable serialization for MIPS architecture. (Closed)
Patch Set: Rebased on r10294, addressed some review comments Created 9 years 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 | « SConstruct ('k') | src/serialize.cc » ('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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 } 99 }
100 100
101 101
102 Address RelocInfo::target_address() { 102 Address RelocInfo::target_address() {
103 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 103 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY);
104 return Assembler::target_address_at(pc_); 104 return Assembler::target_address_at(pc_);
105 } 105 }
106 106
107 107
108 Address RelocInfo::target_address_address() { 108 Address RelocInfo::target_address_address() {
109 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 109 ASSERT(IsCodeTarget(rmode_) ||
110 return reinterpret_cast<Address>(pc_); 110 rmode_ == RUNTIME_ENTRY ||
111 rmode_ == EMBEDDED_OBJECT ||
112 rmode_ == EXTERNAL_REFERENCE);
113 // Read the address of the word containing the target_address in an
114 // instruction stream.
115 // The only architecture-independent user of this function is the serializer.
116 // The serializer uses it to find out how many raw bytes of instruction to
117 // output before the next target.
118 // For an instruction like LUI/ORI where the target bits are mixed into the
119 // instruction bits, the size of the target will be zero, indicating that the
120 // serializer should not step forward in memory after a target is resolved
121 // and written. In this case the target_address_address function should
122 // return the end of the instructions to be patched, allowing the
123 // deserializer to deserialize the instructions as raw bytes and put them in
124 // place, ready to be patched with the target. After jump optimization,
125 // that is the address of the instruction that follows J/JAL/JR/JALR
126 // instruction.
127 return reinterpret_cast<Address>(
128 pc_ + Assembler::kInstructionsFor32BitConstant * Assembler::kInstrSize);
111 } 129 }
112 130
113 131
114 int RelocInfo::target_address_size() { 132 int RelocInfo::target_address_size() {
115 return Assembler::kExternalTargetSize; 133 return Assembler::kExternalTargetSize;
116 } 134 }
117 135
118 136
119 void RelocInfo::set_target_address(Address target, WriteBarrierMode mode) { 137 void RelocInfo::set_target_address(Address target, WriteBarrierMode mode) {
120 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 138 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 281
264 void RelocInfo::Visit(ObjectVisitor* visitor) { 282 void RelocInfo::Visit(ObjectVisitor* visitor) {
265 RelocInfo::Mode mode = rmode(); 283 RelocInfo::Mode mode = rmode();
266 if (mode == RelocInfo::EMBEDDED_OBJECT) { 284 if (mode == RelocInfo::EMBEDDED_OBJECT) {
267 visitor->VisitEmbeddedPointer(this); 285 visitor->VisitEmbeddedPointer(this);
268 } else if (RelocInfo::IsCodeTarget(mode)) { 286 } else if (RelocInfo::IsCodeTarget(mode)) {
269 visitor->VisitCodeTarget(this); 287 visitor->VisitCodeTarget(this);
270 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) { 288 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
271 visitor->VisitGlobalPropertyCell(this); 289 visitor->VisitGlobalPropertyCell(this);
272 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { 290 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
273 visitor->VisitExternalReference(target_reference_address()); 291 visitor->VisitExternalReference(this);
274 #ifdef ENABLE_DEBUGGER_SUPPORT 292 #ifdef ENABLE_DEBUGGER_SUPPORT
275 // TODO(isolates): Get a cached isolate below. 293 // TODO(isolates): Get a cached isolate below.
276 } else if (((RelocInfo::IsJSReturn(mode) && 294 } else if (((RelocInfo::IsJSReturn(mode) &&
277 IsPatchedReturnSequence()) || 295 IsPatchedReturnSequence()) ||
278 (RelocInfo::IsDebugBreakSlot(mode) && 296 (RelocInfo::IsDebugBreakSlot(mode) &&
279 IsPatchedDebugBreakSlotSequence())) && 297 IsPatchedDebugBreakSlotSequence())) &&
280 Isolate::Current()->debug()->has_break_points()) { 298 Isolate::Current()->debug()->has_break_points()) {
281 visitor->VisitDebugTarget(this); 299 visitor->VisitDebugTarget(this);
282 #endif 300 #endif
283 } else if (mode == RelocInfo::RUNTIME_ENTRY) { 301 } else if (mode == RelocInfo::RUNTIME_ENTRY) {
284 visitor->VisitRuntimeEntry(this); 302 visitor->VisitRuntimeEntry(this);
285 } 303 }
286 } 304 }
287 305
288 306
289 template<typename StaticVisitor> 307 template<typename StaticVisitor>
290 void RelocInfo::Visit(Heap* heap) { 308 void RelocInfo::Visit(Heap* heap) {
291 RelocInfo::Mode mode = rmode(); 309 RelocInfo::Mode mode = rmode();
292 if (mode == RelocInfo::EMBEDDED_OBJECT) { 310 if (mode == RelocInfo::EMBEDDED_OBJECT) {
293 StaticVisitor::VisitEmbeddedPointer(heap, this); 311 StaticVisitor::VisitEmbeddedPointer(heap, this);
294 } else if (RelocInfo::IsCodeTarget(mode)) { 312 } else if (RelocInfo::IsCodeTarget(mode)) {
295 StaticVisitor::VisitCodeTarget(heap, this); 313 StaticVisitor::VisitCodeTarget(heap, this);
296 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) { 314 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
297 StaticVisitor::VisitGlobalPropertyCell(heap, this); 315 StaticVisitor::VisitGlobalPropertyCell(heap, this);
298 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { 316 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
299 StaticVisitor::VisitExternalReference(target_reference_address()); 317 StaticVisitor::VisitExternalReference(this);
300 #ifdef ENABLE_DEBUGGER_SUPPORT 318 #ifdef ENABLE_DEBUGGER_SUPPORT
301 } else if (heap->isolate()->debug()->has_break_points() && 319 } else if (heap->isolate()->debug()->has_break_points() &&
302 ((RelocInfo::IsJSReturn(mode) && 320 ((RelocInfo::IsJSReturn(mode) &&
303 IsPatchedReturnSequence()) || 321 IsPatchedReturnSequence()) ||
304 (RelocInfo::IsDebugBreakSlot(mode) && 322 (RelocInfo::IsDebugBreakSlot(mode) &&
305 IsPatchedDebugBreakSlotSequence()))) { 323 IsPatchedDebugBreakSlotSequence()))) {
306 StaticVisitor::VisitDebugTarget(heap, this); 324 StaticVisitor::VisitDebugTarget(heap, this);
307 #endif 325 #endif
308 } else if (mode == RelocInfo::RUNTIME_ENTRY) { 326 } else if (mode == RelocInfo::RUNTIME_ENTRY) {
309 StaticVisitor::VisitRuntimeEntry(this); 327 StaticVisitor::VisitRuntimeEntry(this);
(...skipping 25 matching lines...) Expand all
335 } 353 }
336 *reinterpret_cast<Instr*>(pc_) = x; 354 *reinterpret_cast<Instr*>(pc_) = x;
337 pc_ += kInstrSize; 355 pc_ += kInstrSize;
338 CheckTrampolinePoolQuick(); 356 CheckTrampolinePoolQuick();
339 } 357 }
340 358
341 359
342 } } // namespace v8::internal 360 } } // namespace v8::internal
343 361
344 #endif // V8_MIPS_ASSEMBLER_MIPS_INL_H_ 362 #endif // V8_MIPS_ASSEMBLER_MIPS_INL_H_
OLDNEW
« no previous file with comments | « SConstruct ('k') | src/serialize.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698