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

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

Issue 12702005: Use IsRuntimeEntry for RUNTIME_ENTRY comparison (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « src/disassembler.cc ('k') | src/objects.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 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 if (IsInternalReference(rmode_)) { 132 if (IsInternalReference(rmode_)) {
133 // Absolute code pointer inside code object moves with the code object. 133 // Absolute code pointer inside code object moves with the code object.
134 byte* p = reinterpret_cast<byte*>(pc_); 134 byte* p = reinterpret_cast<byte*>(pc_);
135 int count = Assembler::RelocateInternalReference(p, delta); 135 int count = Assembler::RelocateInternalReference(p, delta);
136 CPU::FlushICache(p, count * sizeof(uint32_t)); 136 CPU::FlushICache(p, count * sizeof(uint32_t));
137 } 137 }
138 } 138 }
139 139
140 140
141 Address RelocInfo::target_address() { 141 Address RelocInfo::target_address() {
142 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 142 ASSERT(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_));
143 return Assembler::target_address_at(pc_); 143 return Assembler::target_address_at(pc_);
144 } 144 }
145 145
146 146
147 Address RelocInfo::target_address_address() { 147 Address RelocInfo::target_address_address() {
148 ASSERT(IsCodeTarget(rmode_) || 148 ASSERT(IsCodeTarget(rmode_) ||
149 rmode_ == RUNTIME_ENTRY || 149 IsRuntimeEntry(rmode_) ||
150 rmode_ == EMBEDDED_OBJECT || 150 rmode_ == EMBEDDED_OBJECT ||
151 rmode_ == EXTERNAL_REFERENCE); 151 rmode_ == EXTERNAL_REFERENCE);
152 // Read the address of the word containing the target_address in an 152 // Read the address of the word containing the target_address in an
153 // instruction stream. 153 // instruction stream.
154 // The only architecture-independent user of this function is the serializer. 154 // The only architecture-independent user of this function is the serializer.
155 // The serializer uses it to find out how many raw bytes of instruction to 155 // The serializer uses it to find out how many raw bytes of instruction to
156 // output before the next target. 156 // output before the next target.
157 // For an instruction like LUI/ORI where the target bits are mixed into the 157 // For an instruction like LUI/ORI where the target bits are mixed into the
158 // instruction bits, the size of the target will be zero, indicating that the 158 // instruction bits, the size of the target will be zero, indicating that the
159 // serializer should not step forward in memory after a target is resolved 159 // serializer should not step forward in memory after a target is resolved
160 // and written. In this case the target_address_address function should 160 // and written. In this case the target_address_address function should
161 // return the end of the instructions to be patched, allowing the 161 // return the end of the instructions to be patched, allowing the
162 // deserializer to deserialize the instructions as raw bytes and put them in 162 // deserializer to deserialize the instructions as raw bytes and put them in
163 // place, ready to be patched with the target. After jump optimization, 163 // place, ready to be patched with the target. After jump optimization,
164 // that is the address of the instruction that follows J/JAL/JR/JALR 164 // that is the address of the instruction that follows J/JAL/JR/JALR
165 // instruction. 165 // instruction.
166 return reinterpret_cast<Address>( 166 return reinterpret_cast<Address>(
167 pc_ + Assembler::kInstructionsFor32BitConstant * Assembler::kInstrSize); 167 pc_ + Assembler::kInstructionsFor32BitConstant * Assembler::kInstrSize);
168 } 168 }
169 169
170 170
171 int RelocInfo::target_address_size() { 171 int RelocInfo::target_address_size() {
172 return Assembler::kSpecialTargetSize; 172 return Assembler::kSpecialTargetSize;
173 } 173 }
174 174
175 175
176 void RelocInfo::set_target_address(Address target, WriteBarrierMode mode) { 176 void RelocInfo::set_target_address(Address target, WriteBarrierMode mode) {
177 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 177 ASSERT(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_));
178 Assembler::set_target_address_at(pc_, target); 178 Assembler::set_target_address_at(pc_, target);
179 if (mode == UPDATE_WRITE_BARRIER && host() != NULL && IsCodeTarget(rmode_)) { 179 if (mode == UPDATE_WRITE_BARRIER && host() != NULL && IsCodeTarget(rmode_)) {
180 Object* target_code = Code::GetCodeFromTargetAddress(target); 180 Object* target_code = Code::GetCodeFromTargetAddress(target);
181 host()->GetHeap()->incremental_marking()->RecordWriteIntoCode( 181 host()->GetHeap()->incremental_marking()->RecordWriteIntoCode(
182 host(), this, HeapObject::cast(target_code)); 182 host(), this, HeapObject::cast(target_code));
183 } 183 }
184 } 184 }
185 185
186 186
187 Address Assembler::target_address_from_return_address(Address pc) { 187 Address Assembler::target_address_from_return_address(Address pc) {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 visitor->VisitCodeAgeSequence(this); 365 visitor->VisitCodeAgeSequence(this);
366 #ifdef ENABLE_DEBUGGER_SUPPORT 366 #ifdef ENABLE_DEBUGGER_SUPPORT
367 // TODO(isolates): Get a cached isolate below. 367 // TODO(isolates): Get a cached isolate below.
368 } else if (((RelocInfo::IsJSReturn(mode) && 368 } else if (((RelocInfo::IsJSReturn(mode) &&
369 IsPatchedReturnSequence()) || 369 IsPatchedReturnSequence()) ||
370 (RelocInfo::IsDebugBreakSlot(mode) && 370 (RelocInfo::IsDebugBreakSlot(mode) &&
371 IsPatchedDebugBreakSlotSequence())) && 371 IsPatchedDebugBreakSlotSequence())) &&
372 Isolate::Current()->debug()->has_break_points()) { 372 Isolate::Current()->debug()->has_break_points()) {
373 visitor->VisitDebugTarget(this); 373 visitor->VisitDebugTarget(this);
374 #endif 374 #endif
375 } else if (mode == RelocInfo::RUNTIME_ENTRY) { 375 } else if (RelocInfo::IsRuntimeEntry(mode)) {
376 visitor->VisitRuntimeEntry(this); 376 visitor->VisitRuntimeEntry(this);
377 } 377 }
378 } 378 }
379 379
380 380
381 template<typename StaticVisitor> 381 template<typename StaticVisitor>
382 void RelocInfo::Visit(Heap* heap) { 382 void RelocInfo::Visit(Heap* heap) {
383 RelocInfo::Mode mode = rmode(); 383 RelocInfo::Mode mode = rmode();
384 if (mode == RelocInfo::EMBEDDED_OBJECT) { 384 if (mode == RelocInfo::EMBEDDED_OBJECT) {
385 StaticVisitor::VisitEmbeddedPointer(heap, this); 385 StaticVisitor::VisitEmbeddedPointer(heap, this);
386 } else if (RelocInfo::IsCodeTarget(mode)) { 386 } else if (RelocInfo::IsCodeTarget(mode)) {
387 StaticVisitor::VisitCodeTarget(heap, this); 387 StaticVisitor::VisitCodeTarget(heap, this);
388 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) { 388 } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
389 StaticVisitor::VisitGlobalPropertyCell(heap, this); 389 StaticVisitor::VisitGlobalPropertyCell(heap, this);
390 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { 390 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
391 StaticVisitor::VisitExternalReference(this); 391 StaticVisitor::VisitExternalReference(this);
392 } else if (RelocInfo::IsCodeAgeSequence(mode)) { 392 } else if (RelocInfo::IsCodeAgeSequence(mode)) {
393 StaticVisitor::VisitCodeAgeSequence(heap, this); 393 StaticVisitor::VisitCodeAgeSequence(heap, this);
394 #ifdef ENABLE_DEBUGGER_SUPPORT 394 #ifdef ENABLE_DEBUGGER_SUPPORT
395 } else if (heap->isolate()->debug()->has_break_points() && 395 } else if (heap->isolate()->debug()->has_break_points() &&
396 ((RelocInfo::IsJSReturn(mode) && 396 ((RelocInfo::IsJSReturn(mode) &&
397 IsPatchedReturnSequence()) || 397 IsPatchedReturnSequence()) ||
398 (RelocInfo::IsDebugBreakSlot(mode) && 398 (RelocInfo::IsDebugBreakSlot(mode) &&
399 IsPatchedDebugBreakSlotSequence()))) { 399 IsPatchedDebugBreakSlotSequence()))) {
400 StaticVisitor::VisitDebugTarget(heap, this); 400 StaticVisitor::VisitDebugTarget(heap, this);
401 #endif 401 #endif
402 } else if (mode == RelocInfo::RUNTIME_ENTRY) { 402 } else if (RelocInfo::IsRuntimeEntry(mode)) {
403 StaticVisitor::VisitRuntimeEntry(this); 403 StaticVisitor::VisitRuntimeEntry(this);
404 } 404 }
405 } 405 }
406 406
407 407
408 // ----------------------------------------------------------------------------- 408 // -----------------------------------------------------------------------------
409 // Assembler. 409 // Assembler.
410 410
411 411
412 void Assembler::CheckBuffer() { 412 void Assembler::CheckBuffer() {
(...skipping 16 matching lines...) Expand all
429 } 429 }
430 *reinterpret_cast<Instr*>(pc_) = x; 430 *reinterpret_cast<Instr*>(pc_) = x;
431 pc_ += kInstrSize; 431 pc_ += kInstrSize;
432 CheckTrampolinePoolQuick(); 432 CheckTrampolinePoolQuick();
433 } 433 }
434 434
435 435
436 } } // namespace v8::internal 436 } } // namespace v8::internal
437 437
438 #endif // V8_MIPS_ASSEMBLER_MIPS_INL_H_ 438 #endif // V8_MIPS_ASSEMBLER_MIPS_INL_H_
OLDNEW
« no previous file with comments | « src/disassembler.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698