| 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 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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 288              IsPatchedDebugBreakSlotSequence()) { | 288              IsPatchedDebugBreakSlotSequence()) { | 
| 289     StaticVisitor::VisitDebugTarget(heap, this); | 289     StaticVisitor::VisitDebugTarget(heap, this); | 
| 290   } else if (IsRuntimeEntry(mode)) { | 290   } else if (IsRuntimeEntry(mode)) { | 
| 291     StaticVisitor::VisitRuntimeEntry(this); | 291     StaticVisitor::VisitRuntimeEntry(this); | 
| 292   } | 292   } | 
| 293 } | 293 } | 
| 294 | 294 | 
| 295 | 295 | 
| 296 | 296 | 
| 297 Immediate::Immediate(int x)  { | 297 Immediate::Immediate(int x)  { | 
| 298   x_ = x; | 298   value_.immediate = x; | 
| 299   rmode_ = RelocInfo::NONE32; | 299   rmode_ = RelocInfo::NONE32; | 
| 300 } | 300 } | 
| 301 | 301 | 
| 302 Immediate::Immediate(Address x, RelocInfo::Mode rmode) { | 302 Immediate::Immediate(Address x, RelocInfo::Mode rmode) { | 
| 303   x_ = reinterpret_cast<int32_t>(x); | 303   value_.immediate = reinterpret_cast<int32_t>(x); | 
| 304   rmode_ = rmode; | 304   rmode_ = rmode; | 
| 305 } | 305 } | 
| 306 | 306 | 
| 307 Immediate::Immediate(const ExternalReference& ext) { | 307 Immediate::Immediate(const ExternalReference& ext) { | 
| 308   x_ = reinterpret_cast<int32_t>(ext.address()); | 308   value_.immediate = reinterpret_cast<int32_t>(ext.address()); | 
| 309   rmode_ = RelocInfo::EXTERNAL_REFERENCE; | 309   rmode_ = RelocInfo::EXTERNAL_REFERENCE; | 
| 310 } | 310 } | 
| 311 | 311 | 
| 312 | 312 | 
| 313 Immediate::Immediate(Label* internal_offset) { | 313 Immediate::Immediate(Label* internal_offset) { | 
| 314   x_ = reinterpret_cast<int32_t>(internal_offset); | 314   value_.immediate = reinterpret_cast<int32_t>(internal_offset); | 
| 315   rmode_ = RelocInfo::INTERNAL_REFERENCE; | 315   rmode_ = RelocInfo::INTERNAL_REFERENCE; | 
| 316 } | 316 } | 
| 317 | 317 | 
| 318 | 318 | 
| 319 Immediate::Immediate(Handle<Object> handle) { | 319 Immediate::Immediate(Handle<Object> handle) { | 
| 320   AllowDeferredHandleDereference using_raw_address; | 320   AllowDeferredHandleDereference using_raw_address; | 
| 321   // Verify all Objects referred by code are NOT in new space. | 321   // Verify all Objects referred by code are NOT in new space. | 
| 322   Object* obj = *handle; | 322   Object* obj = *handle; | 
| 323   if (obj->IsHeapObject()) { | 323   if (obj->IsHeapObject()) { | 
| 324     x_ = reinterpret_cast<intptr_t>(handle.location()); | 324     value_.immediate = reinterpret_cast<intptr_t>(handle.location()); | 
| 325     rmode_ = RelocInfo::EMBEDDED_OBJECT; | 325     rmode_ = RelocInfo::EMBEDDED_OBJECT; | 
| 326   } else { | 326   } else { | 
| 327     // no relocation needed | 327     // no relocation needed | 
| 328     x_ =  reinterpret_cast<intptr_t>(obj); | 328     value_.immediate = reinterpret_cast<intptr_t>(obj); | 
| 329     rmode_ = RelocInfo::NONE32; | 329     rmode_ = RelocInfo::NONE32; | 
| 330   } | 330   } | 
| 331 } | 331 } | 
| 332 | 332 | 
| 333 | 333 | 
| 334 Immediate::Immediate(Smi* value) { | 334 Immediate::Immediate(Smi* value) { | 
| 335   x_ = reinterpret_cast<intptr_t>(value); | 335   value_.immediate = reinterpret_cast<intptr_t>(value); | 
| 336   rmode_ = RelocInfo::NONE32; | 336   rmode_ = RelocInfo::NONE32; | 
| 337 } | 337 } | 
| 338 | 338 | 
| 339 | 339 | 
| 340 Immediate::Immediate(Address addr) { | 340 Immediate::Immediate(Address addr) { | 
| 341   x_ = reinterpret_cast<int32_t>(addr); | 341   value_.immediate = reinterpret_cast<int32_t>(addr); | 
| 342   rmode_ = RelocInfo::NONE32; | 342   rmode_ = RelocInfo::NONE32; | 
| 343 } | 343 } | 
| 344 | 344 | 
| 345 | 345 | 
| 346 void Assembler::emit(uint32_t x) { | 346 void Assembler::emit(uint32_t x) { | 
| 347   *reinterpret_cast<uint32_t*>(pc_) = x; | 347   *reinterpret_cast<uint32_t*>(pc_) = x; | 
| 348   pc_ += sizeof(uint32_t); | 348   pc_ += sizeof(uint32_t); | 
| 349 } | 349 } | 
| 350 | 350 | 
| 351 | 351 | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 383 void Assembler::emit(Handle<Code> code, | 383 void Assembler::emit(Handle<Code> code, | 
| 384                      RelocInfo::Mode rmode, | 384                      RelocInfo::Mode rmode, | 
| 385                      TypeFeedbackId id) { | 385                      TypeFeedbackId id) { | 
| 386   AllowDeferredHandleDereference embedding_raw_address; | 386   AllowDeferredHandleDereference embedding_raw_address; | 
| 387   emit(reinterpret_cast<intptr_t>(code.location()), rmode, id); | 387   emit(reinterpret_cast<intptr_t>(code.location()), rmode, id); | 
| 388 } | 388 } | 
| 389 | 389 | 
| 390 | 390 | 
| 391 void Assembler::emit(const Immediate& x) { | 391 void Assembler::emit(const Immediate& x) { | 
| 392   if (x.rmode_ == RelocInfo::INTERNAL_REFERENCE) { | 392   if (x.rmode_ == RelocInfo::INTERNAL_REFERENCE) { | 
| 393     Label* label = reinterpret_cast<Label*>(x.x_); | 393     Label* label = reinterpret_cast<Label*>(x.immediate()); | 
| 394     emit_code_relative_offset(label); | 394     emit_code_relative_offset(label); | 
| 395     return; | 395     return; | 
| 396   } | 396   } | 
| 397   if (!RelocInfo::IsNone(x.rmode_)) RecordRelocInfo(x.rmode_); | 397   if (!RelocInfo::IsNone(x.rmode_)) RecordRelocInfo(x.rmode_); | 
| 398   emit(x.x_); | 398   if (x.is_heap_number()) { | 
|  | 399     RequestHeapNumber(x.heap_number()); | 
|  | 400     emit(0); | 
|  | 401   } else { | 
|  | 402     emit(x.immediate()); | 
|  | 403   } | 
| 399 } | 404 } | 
| 400 | 405 | 
| 401 | 406 | 
| 402 void Assembler::emit_code_relative_offset(Label* label) { | 407 void Assembler::emit_code_relative_offset(Label* label) { | 
| 403   if (label->is_bound()) { | 408   if (label->is_bound()) { | 
| 404     int32_t pos; | 409     int32_t pos; | 
| 405     pos = label->pos() + Code::kHeaderSize - kHeapObjectTag; | 410     pos = label->pos() + Code::kHeaderSize - kHeapObjectTag; | 
| 406     emit(pos); | 411     emit(pos); | 
| 407   } else { | 412   } else { | 
| 408     emit_disp(label, Displacement::CODE_RELATIVE); | 413     emit_disp(label, Displacement::CODE_RELATIVE); | 
| 409   } | 414   } | 
| 410 } | 415 } | 
| 411 | 416 | 
| 412 void Assembler::emit_b(Immediate x) { | 417 void Assembler::emit_b(Immediate x) { | 
| 413   DCHECK(x.is_int8() || x.is_uint8()); | 418   DCHECK(x.is_int8() || x.is_uint8()); | 
| 414   uint8_t value = static_cast<uint8_t>(x.x_); | 419   uint8_t value = static_cast<uint8_t>(x.immediate()); | 
| 415   *pc_++ = value; | 420   *pc_++ = value; | 
| 416 } | 421 } | 
| 417 | 422 | 
| 418 void Assembler::emit_w(const Immediate& x) { | 423 void Assembler::emit_w(const Immediate& x) { | 
| 419   DCHECK(RelocInfo::IsNone(x.rmode_)); | 424   DCHECK(RelocInfo::IsNone(x.rmode_)); | 
| 420   uint16_t value = static_cast<uint16_t>(x.x_); | 425   uint16_t value = static_cast<uint16_t>(x.immediate()); | 
| 421   reinterpret_cast<uint16_t*>(pc_)[0] = value; | 426   reinterpret_cast<uint16_t*>(pc_)[0] = value; | 
| 422   pc_ += sizeof(uint16_t); | 427   pc_ += sizeof(uint16_t); | 
| 423 } | 428 } | 
| 424 | 429 | 
| 425 | 430 | 
| 426 Address Assembler::target_address_at(Address pc, Address constant_pool) { | 431 Address Assembler::target_address_at(Address pc, Address constant_pool) { | 
| 427   return pc + sizeof(int32_t) + *reinterpret_cast<int32_t*>(pc); | 432   return pc + sizeof(int32_t) + *reinterpret_cast<int32_t*>(pc); | 
| 428 } | 433 } | 
| 429 | 434 | 
| 430 | 435 | 
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 537 Operand::Operand(int32_t disp, RelocInfo::Mode rmode) { | 542 Operand::Operand(int32_t disp, RelocInfo::Mode rmode) { | 
| 538   // [disp/r] | 543   // [disp/r] | 
| 539   set_modrm(0, ebp); | 544   set_modrm(0, ebp); | 
| 540   set_dispr(disp, rmode); | 545   set_dispr(disp, rmode); | 
| 541 } | 546 } | 
| 542 | 547 | 
| 543 | 548 | 
| 544 Operand::Operand(Immediate imm) { | 549 Operand::Operand(Immediate imm) { | 
| 545   // [disp/r] | 550   // [disp/r] | 
| 546   set_modrm(0, ebp); | 551   set_modrm(0, ebp); | 
| 547   set_dispr(imm.x_, imm.rmode_); | 552   set_dispr(imm.immediate(), imm.rmode_); | 
| 548 } | 553 } | 
| 549 }  // namespace internal | 554 }  // namespace internal | 
| 550 }  // namespace v8 | 555 }  // namespace v8 | 
| 551 | 556 | 
| 552 #endif  // V8_IA32_ASSEMBLER_IA32_INL_H_ | 557 #endif  // V8_IA32_ASSEMBLER_IA32_INL_H_ | 
| OLD | NEW | 
|---|