OLD | NEW |
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 | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 return pc + kCallTargetAddressOffset; | 145 return pc + kCallTargetAddressOffset; |
146 } | 146 } |
147 | 147 |
148 Handle<Object> Assembler::code_target_object_handle_at(Address pc) { | 148 Handle<Object> Assembler::code_target_object_handle_at(Address pc) { |
149 SixByteInstr instr = | 149 SixByteInstr instr = |
150 Instruction::InstructionBits(reinterpret_cast<const byte*>(pc)); | 150 Instruction::InstructionBits(reinterpret_cast<const byte*>(pc)); |
151 int index = instr & 0xFFFFFFFF; | 151 int index = instr & 0xFFFFFFFF; |
152 return code_targets_[index]; | 152 return code_targets_[index]; |
153 } | 153 } |
154 | 154 |
155 Object* RelocInfo::target_object() { | 155 HeapObject* RelocInfo::target_object() { |
156 DCHECK(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); | 156 DCHECK(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); |
157 return reinterpret_cast<Object*>(Assembler::target_address_at(pc_, host_)); | 157 return HeapObject::cast( |
| 158 reinterpret_cast<Object*>(Assembler::target_address_at(pc_, host_))); |
158 } | 159 } |
159 | 160 |
160 Handle<Object> RelocInfo::target_object_handle(Assembler* origin) { | 161 Handle<HeapObject> RelocInfo::target_object_handle(Assembler* origin) { |
161 DCHECK(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); | 162 DCHECK(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); |
162 if (rmode_ == EMBEDDED_OBJECT) { | 163 if (rmode_ == EMBEDDED_OBJECT) { |
163 return Handle<Object>( | 164 return Handle<HeapObject>(reinterpret_cast<HeapObject**>( |
164 reinterpret_cast<Object**>(Assembler::target_address_at(pc_, host_))); | 165 Assembler::target_address_at(pc_, host_))); |
165 } else { | 166 } else { |
166 return origin->code_target_object_handle_at(pc_); | 167 return Handle<HeapObject>::cast(origin->code_target_object_handle_at(pc_)); |
167 } | 168 } |
168 } | 169 } |
169 | 170 |
170 void RelocInfo::set_target_object(Object* target, | 171 void RelocInfo::set_target_object(HeapObject* target, |
171 WriteBarrierMode write_barrier_mode, | 172 WriteBarrierMode write_barrier_mode, |
172 ICacheFlushMode icache_flush_mode) { | 173 ICacheFlushMode icache_flush_mode) { |
173 DCHECK(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); | 174 DCHECK(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT); |
174 Assembler::set_target_address_at(isolate_, pc_, host_, | 175 Assembler::set_target_address_at(isolate_, pc_, host_, |
175 reinterpret_cast<Address>(target), | 176 reinterpret_cast<Address>(target), |
176 icache_flush_mode); | 177 icache_flush_mode); |
177 if (write_barrier_mode == UPDATE_WRITE_BARRIER && host() != NULL && | 178 if (write_barrier_mode == UPDATE_WRITE_BARRIER && host() != NULL && |
178 target->IsHeapObject()) { | 179 target->IsHeapObject()) { |
179 host()->GetHeap()->incremental_marking()->RecordWriteIntoCode( | 180 host()->GetHeap()->incremental_marking()->RecordWriteIntoCode( |
180 host(), this, HeapObject::cast(target)); | 181 host(), this, HeapObject::cast(target)); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 static const int kNoCodeAgeSequenceLength = 30; | 239 static const int kNoCodeAgeSequenceLength = 30; |
239 #else | 240 #else |
240 // NOP + LAY + ST + IILF + BASR | 241 // NOP + LAY + ST + IILF + BASR |
241 static const int kCodeAgingSequenceLength = 20; | 242 static const int kCodeAgingSequenceLength = 20; |
242 static const int kCodeAgingTargetDelta = 12; // Jump past NOP to IILF | 243 static const int kCodeAgingTargetDelta = 12; // Jump past NOP to IILF |
243 // LAY + 4 * ST + LA | 244 // LAY + 4 * ST + LA |
244 static const int kNoCodeAgeSequenceLength = 26; | 245 static const int kNoCodeAgeSequenceLength = 26; |
245 #endif | 246 #endif |
246 #endif | 247 #endif |
247 | 248 |
248 Handle<Object> RelocInfo::code_age_stub_handle(Assembler* origin) { | 249 Handle<Code> RelocInfo::code_age_stub_handle(Assembler* origin) { |
249 UNREACHABLE(); // This should never be reached on S390. | 250 UNREACHABLE(); // This should never be reached on S390. |
250 return Handle<Object>(); | 251 return Handle<Code>(); |
251 } | 252 } |
252 | 253 |
253 Code* RelocInfo::code_age_stub() { | 254 Code* RelocInfo::code_age_stub() { |
254 DCHECK(rmode_ == RelocInfo::CODE_AGE_SEQUENCE); | 255 DCHECK(rmode_ == RelocInfo::CODE_AGE_SEQUENCE); |
255 return Code::GetCodeFromTargetAddress( | 256 return Code::GetCodeFromTargetAddress( |
256 Assembler::target_address_at(pc_ + kCodeAgingTargetDelta, host_)); | 257 Assembler::target_address_at(pc_ + kCodeAgingTargetDelta, host_)); |
257 } | 258 } |
258 | 259 |
259 void RelocInfo::set_code_age_stub(Code* stub, | 260 void RelocInfo::set_code_age_stub(Code* stub, |
260 ICacheFlushMode icache_flush_mode) { | 261 ICacheFlushMode icache_flush_mode) { |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 } | 570 } |
570 #endif | 571 #endif |
571 } | 572 } |
572 if (!patched) UNREACHABLE(); | 573 if (!patched) UNREACHABLE(); |
573 } | 574 } |
574 | 575 |
575 } // namespace internal | 576 } // namespace internal |
576 } // namespace v8 | 577 } // namespace v8 |
577 | 578 |
578 #endif // V8_S390_ASSEMBLER_S390_INL_H_ | 579 #endif // V8_S390_ASSEMBLER_S390_INL_H_ |
OLD | NEW |