| Index: runtime/vm/assembler_mips.cc
 | 
| ===================================================================
 | 
| --- runtime/vm/assembler_mips.cc	(revision 20999)
 | 
| +++ runtime/vm/assembler_mips.cc	(working copy)
 | 
| @@ -79,6 +79,44 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void Assembler::AdduDetectOverflow(Register rd, Register rs, Register rt,
 | 
| +                                   Register ro, Register scratch) {
 | 
| +  ASSERT(rd != ro);
 | 
| +  ASSERT(rd != TMP);
 | 
| +  ASSERT(ro != TMP);
 | 
| +  ASSERT(ro != rs);
 | 
| +  ASSERT(ro != rt);
 | 
| +
 | 
| +  if ((rs == rt) && (rd == rs)) {
 | 
| +    ASSERT(scratch != kNoRegister);
 | 
| +    ASSERT(rd != scratch);
 | 
| +    ASSERT(ro != scratch);
 | 
| +    ASSERT(scratch != TMP);
 | 
| +    mov(scratch, rt);
 | 
| +    rt = scratch;
 | 
| +  }
 | 
| +
 | 
| +  if (rd == rs) {
 | 
| +    mov(TMP, rs);  // Preserve rs.
 | 
| +    addu(rd, rs, rt);  // rs is overwritten.
 | 
| +    xor_(TMP, rd, TMP);  // Original rs.
 | 
| +    xor_(ro, rd, rt);
 | 
| +    and_(ro, ro, TMP);
 | 
| +  } else if (rd == rt) {
 | 
| +    mov(TMP, rt);  // Preserve rt.
 | 
| +    addu(rd, rs, rt);  // rt is overwritten.
 | 
| +    xor_(TMP, rd, TMP);  // Original rt.
 | 
| +    xor_(ro, rd, rs);
 | 
| +    and_(ro, ro, TMP);
 | 
| +  } else {
 | 
| +    addu(rd, rs, rt);
 | 
| +    xor_(ro, rd, rs);
 | 
| +    xor_(TMP, rd, rt);
 | 
| +    and_(ro, TMP, ro);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void Assembler::LoadObject(Register rd, const Object& object) {
 | 
|    // Smi's and VM heap objects are never relocated; do not use object pool.
 | 
|    if (object.IsSmi()) {
 | 
| 
 |