| Index: src/assembler-ia32.cc
 | 
| ===================================================================
 | 
| --- src/assembler-ia32.cc	(revision 1122)
 | 
| +++ src/assembler-ia32.cc	(working copy)
 | 
| @@ -255,12 +255,6 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void Operand::set_reg(Register reg) const {
 | 
| -  ASSERT(len_ > 0);
 | 
| -  buf_[0] = (buf_[0] & ~0x38) | static_cast<byte>(reg.code() << 3);
 | 
| -}
 | 
| -
 | 
| -
 | 
|  bool Operand::is_reg(Register reg) const {
 | 
|    return ((buf_[0] & 0xF8) == 0xC0)  // addressing mode is register only.
 | 
|        && ((buf_[0] & 0x07) == reg.code());  // register codes match.
 | 
| @@ -2098,10 +2092,18 @@
 | 
|  
 | 
|  
 | 
|  void Assembler::emit_operand(Register reg, const Operand& adr) {
 | 
| -  adr.set_reg(reg);
 | 
| -  memmove(pc_, adr.buf_, adr.len_);
 | 
| -  pc_ += adr.len_;
 | 
| -  if (adr.len_ >= sizeof(int32_t) && adr.rmode_ != RelocInfo::NONE) {
 | 
| +  const unsigned length = adr.len_;
 | 
| +  ASSERT(length > 0);
 | 
| +
 | 
| +  // Emit updated ModRM byte containing the given register.
 | 
| +  pc_[0] = (adr.buf_[0] & ~0x38) | (reg.code() << 3);
 | 
| +
 | 
| +  // Emit the rest of the encoded operand.
 | 
| +  for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i];
 | 
| +  pc_ += length;
 | 
| +
 | 
| +  // Emit relocation information if necessary.
 | 
| +  if (length >= sizeof(int32_t) && adr.rmode_ != RelocInfo::NONE) {
 | 
|      pc_ -= sizeof(int32_t);  // pc_ must be *at* disp32
 | 
|      RecordRelocInfo(adr.rmode_);
 | 
|      pc_ += sizeof(int32_t);
 | 
| 
 |