| Index: src/x64/lithium-codegen-x64.cc | 
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc | 
| index 6239acb51531d1f39ecfd1e247315736e82c3e29..bafe74eec5e52c2c9bc3566963e354da497dd531 100644 | 
| --- a/src/x64/lithium-codegen-x64.cc | 
| +++ b/src/x64/lithium-codegen-x64.cc | 
| @@ -1,4 +1,4 @@ | 
| -// Copyright 2011 the V8 project authors. All rights reserved. | 
| +// Copyright 2012 the V8 project authors. All rights reserved. | 
| // Redistribution and use in source and binary forms, with or without | 
| // modification, are permitted provided that the following conditions are | 
| // met: | 
| @@ -3747,13 +3747,23 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) { | 
| } | 
|  | 
|  | 
| +void LCodeGen::DoCheckMapCommon(Register reg, | 
| +                                Handle<Map> map, | 
| +                                CompareMapMode mode, | 
| +                                LEnvironment* env) { | 
| +  Label success; | 
| +  __ CompareMap(reg, map, &success, mode); | 
| +  DeoptimizeIf(not_equal, env); | 
| +  __ bind(&success); | 
| +} | 
| + | 
| + | 
| void LCodeGen::DoCheckMap(LCheckMap* instr) { | 
| LOperand* input = instr->InputAt(0); | 
| ASSERT(input->IsRegister()); | 
| Register reg = ToRegister(input); | 
| -  __ Cmp(FieldOperand(reg, HeapObject::kMapOffset), | 
| -         instr->hydrogen()->map()); | 
| -  DeoptimizeIf(not_equal, instr->environment()); | 
| +  Handle<Map> map = instr->hydrogen()->map(); | 
| +  DoCheckMapCommon(reg, map, instr->hydrogen()->mode(), instr->environment()); | 
| } | 
|  | 
|  | 
| @@ -3819,9 +3829,8 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { | 
|  | 
| // Check prototype maps up to the holder. | 
| while (!current_prototype.is_identical_to(holder)) { | 
| -    __ Cmp(FieldOperand(reg, HeapObject::kMapOffset), | 
| -           Handle<Map>(current_prototype->map())); | 
| -    DeoptimizeIf(not_equal, instr->environment()); | 
| +    DoCheckMapCommon(reg, Handle<Map>(current_prototype->map()), | 
| +                     ALLOW_ELEMENT_TRANSITION_MAPS, instr->environment()); | 
| current_prototype = | 
| Handle<JSObject>(JSObject::cast(current_prototype->GetPrototype())); | 
| // Load next prototype object. | 
| @@ -3829,9 +3838,8 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { | 
| } | 
|  | 
| // Check the holder map. | 
| -  __ Cmp(FieldOperand(reg, HeapObject::kMapOffset), | 
| -         Handle<Map>(current_prototype->map())); | 
| -  DeoptimizeIf(not_equal, instr->environment()); | 
| +    DoCheckMapCommon(reg, Handle<Map>(current_prototype->map()), | 
| +                     ALLOW_ELEMENT_TRANSITION_MAPS, instr->environment()); | 
| } | 
|  | 
|  | 
|  |