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

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

Issue 2218002: The way reloc entries are visited by the ObjectVisitor is architecture... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 7 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/assembler.h ('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 // 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 20 matching lines...) Expand all
31 // The original source code covered by the above license above has been 31 // The original source code covered by the above license above has been
32 // modified significantly by Google Inc. 32 // modified significantly by Google Inc.
33 // Copyright 2006-2008 the V8 project authors. All rights reserved. 33 // Copyright 2006-2008 the V8 project authors. All rights reserved.
34 34
35 // A light-weight IA32 Assembler. 35 // A light-weight IA32 Assembler.
36 36
37 #ifndef V8_IA32_ASSEMBLER_IA32_INL_H_ 37 #ifndef V8_IA32_ASSEMBLER_IA32_INL_H_
38 #define V8_IA32_ASSEMBLER_IA32_INL_H_ 38 #define V8_IA32_ASSEMBLER_IA32_INL_H_
39 39
40 #include "cpu.h" 40 #include "cpu.h"
41 #include "debug.h"
41 42
42 namespace v8 { 43 namespace v8 {
43 namespace internal { 44 namespace internal {
44 45
45 Condition NegateCondition(Condition cc) { 46 Condition NegateCondition(Condition cc) {
46 return static_cast<Condition>(cc ^ 1); 47 return static_cast<Condition>(cc ^ 1);
47 } 48 }
48 49
49 50
50 // The modes possibly affected by apply must be in kApplyMask. 51 // The modes possibly affected by apply must be in kApplyMask.
(...skipping 19 matching lines...) Expand all
70 return Assembler::target_address_at(pc_); 71 return Assembler::target_address_at(pc_);
71 } 72 }
72 73
73 74
74 Address RelocInfo::target_address_address() { 75 Address RelocInfo::target_address_address() {
75 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 76 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY);
76 return reinterpret_cast<Address>(pc_); 77 return reinterpret_cast<Address>(pc_);
77 } 78 }
78 79
79 80
81 int RelocInfo::target_address_size() {
82 return Assembler::kExternalTargetSize;
83 }
84
85
80 void RelocInfo::set_target_address(Address target) { 86 void RelocInfo::set_target_address(Address target) {
81 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY); 87 ASSERT(IsCodeTarget(rmode_) || rmode_ == RUNTIME_ENTRY);
82 Assembler::set_target_address_at(pc_, target); 88 Assembler::set_target_address_at(pc_, target);
83 } 89 }
84 90
85 91
86 Object* RelocInfo::target_object() { 92 Object* RelocInfo::target_object() {
87 ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); 93 ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
88 return Memory::Object_at(pc_); 94 return Memory::Object_at(pc_);
89 } 95 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 ASSERT(IsPatchedReturnSequence()); 147 ASSERT(IsPatchedReturnSequence());
142 *call_object_address() = target; 148 *call_object_address() = target;
143 } 149 }
144 150
145 151
146 bool RelocInfo::IsPatchedReturnSequence() { 152 bool RelocInfo::IsPatchedReturnSequence() {
147 return *pc_ == 0xE8; 153 return *pc_ == 0xE8;
148 } 154 }
149 155
150 156
157 void RelocInfo::Visit(ObjectVisitor* visitor) {
158 RelocInfo::Mode mode = rmode();
159 if (mode == RelocInfo::EMBEDDED_OBJECT) {
160 visitor->VisitPointer(target_object_address());
161 } else if (RelocInfo::IsCodeTarget(mode)) {
162 visitor->VisitCodeTarget(this);
163 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
164 visitor->VisitExternalReference(target_reference_address());
165 #ifdef ENABLE_DEBUGGER_SUPPORT
166 } else if (Debug::has_break_points() &&
167 RelocInfo::IsJSReturn(mode) &&
168 IsPatchedReturnSequence()) {
169 visitor->VisitDebugTarget(this);
170 #endif
171 } else if (mode == RelocInfo::RUNTIME_ENTRY) {
172 visitor->VisitRuntimeEntry(this);
173 }
174 }
175
176
151 Immediate::Immediate(int x) { 177 Immediate::Immediate(int x) {
152 x_ = x; 178 x_ = x;
153 rmode_ = RelocInfo::NONE; 179 rmode_ = RelocInfo::NONE;
154 } 180 }
155 181
156 182
157 Immediate::Immediate(const ExternalReference& ext) { 183 Immediate::Immediate(const ExternalReference& ext) {
158 x_ = reinterpret_cast<int32_t>(ext.address()); 184 x_ = reinterpret_cast<int32_t>(ext.address());
159 rmode_ = RelocInfo::EXTERNAL_REFERENCE; 185 rmode_ = RelocInfo::EXTERNAL_REFERENCE;
160 } 186 }
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 343
318 Operand::Operand(int32_t disp, RelocInfo::Mode rmode) { 344 Operand::Operand(int32_t disp, RelocInfo::Mode rmode) {
319 // [disp/r] 345 // [disp/r]
320 set_modrm(0, ebp); 346 set_modrm(0, ebp);
321 set_dispr(disp, rmode); 347 set_dispr(disp, rmode);
322 } 348 }
323 349
324 } } // namespace v8::internal 350 } } // namespace v8::internal
325 351
326 #endif // V8_IA32_ASSEMBLER_IA32_INL_H_ 352 #endif // V8_IA32_ASSEMBLER_IA32_INL_H_
OLDNEW
« no previous file with comments | « src/assembler.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698