| Index: src/x64/codegen-x64.cc
 | 
| diff --git a/src/x64/codegen-x64.cc b/src/x64/codegen-x64.cc
 | 
| index d713b75336f69da7c3354d3dc738d44d16ae2594..a07fbf3cafe7836419f2b3b733093f64aa0faa17 100644
 | 
| --- a/src/x64/codegen-x64.cc
 | 
| +++ b/src/x64/codegen-x64.cc
 | 
| @@ -2747,7 +2747,8 @@ void CodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
 | 
|    frame_->EmitPush(rsi);  // The context is the first argument.
 | 
|    frame_->EmitPush(kScratchRegister);
 | 
|    frame_->EmitPush(Smi::FromInt(is_eval() ? 1 : 0));
 | 
| -  Result ignored = frame_->CallRuntime(Runtime::kDeclareGlobals, 3);
 | 
| +  frame_->EmitPush(Smi::FromInt(strict_mode_flag()));
 | 
| +  Result ignored = frame_->CallRuntime(Runtime::kDeclareGlobals, 4);
 | 
|    // Return value is ignored.
 | 
|  }
 | 
|  
 | 
| @@ -4605,7 +4606,8 @@ void CodeGenerator::StoreToSlot(Slot* slot, InitState init_state) {
 | 
|        // by initialization.
 | 
|        value = frame_->CallRuntime(Runtime::kInitializeConstContextSlot, 3);
 | 
|      } else {
 | 
| -      value = frame_->CallRuntime(Runtime::kStoreContextSlot, 3);
 | 
| +      frame_->Push(Smi::FromInt(strict_mode_flag()));
 | 
| +      value = frame_->CallRuntime(Runtime::kStoreContextSlot, 4);
 | 
|      }
 | 
|      // Storing a variable must keep the (new) value on the expression
 | 
|      // stack. This is necessary for compiling chained assignment
 | 
| @@ -4914,8 +4916,9 @@ void CodeGenerator::VisitObjectLiteral(ObjectLiteral* node) {
 | 
|          Load(property->key());
 | 
|          Load(property->value());
 | 
|          if (property->emit_store()) {
 | 
| +          frame_->Push(Smi::FromInt(NONE));   // PropertyAttributes
 | 
|            // Ignore the result.
 | 
| -          Result ignored = frame_->CallRuntime(Runtime::kSetProperty, 3);
 | 
| +          Result ignored = frame_->CallRuntime(Runtime::kSetProperty, 4);
 | 
|          } else {
 | 
|            frame_->Drop(3);
 | 
|          }
 | 
| @@ -8075,8 +8078,9 @@ class DeferredReferenceSetKeyedValue: public DeferredCode {
 | 
|   public:
 | 
|    DeferredReferenceSetKeyedValue(Register value,
 | 
|                                   Register key,
 | 
| -                                 Register receiver)
 | 
| -      : value_(value), key_(key), receiver_(receiver) {
 | 
| +                                 Register receiver,
 | 
| +                                 StrictModeFlag strict)
 | 
| +      : value_(value), key_(key), receiver_(receiver), strict_(strict) {
 | 
|      set_comment("[ DeferredReferenceSetKeyedValue");
 | 
|    }
 | 
|  
 | 
| @@ -8089,6 +8093,7 @@ class DeferredReferenceSetKeyedValue: public DeferredCode {
 | 
|    Register key_;
 | 
|    Register receiver_;
 | 
|    Label patch_site_;
 | 
| +  StrictModeFlag strict_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -8140,7 +8145,9 @@ void DeferredReferenceSetKeyedValue::Generate() {
 | 
|    }
 | 
|  
 | 
|    // Call the IC stub.
 | 
| -  Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
 | 
| +  Handle<Code> ic(Builtins::builtin(
 | 
| +      strict_ == kStrictMode ? Builtins::KeyedStoreIC_Initialize_Strict
 | 
| +                             : Builtins::KeyedStoreIC_Initialize));
 | 
|    __ Call(ic, RelocInfo::CODE_TARGET);
 | 
|    // The delta from the start of the map-compare instructions (initial movq)
 | 
|    // to the test instruction.  We use masm_-> directly here instead of the
 | 
| @@ -8481,7 +8488,8 @@ Result CodeGenerator::EmitKeyedStore(StaticType* key_type) {
 | 
|      DeferredReferenceSetKeyedValue* deferred =
 | 
|          new DeferredReferenceSetKeyedValue(result.reg(),
 | 
|                                             key.reg(),
 | 
| -                                           receiver.reg());
 | 
| +                                           receiver.reg(),
 | 
| +                                           strict_mode_flag());
 | 
|  
 | 
|      // Check that the receiver is not a smi.
 | 
|      __ JumpIfSmi(receiver.reg(), deferred->entry_label());
 | 
| @@ -8543,7 +8551,7 @@ Result CodeGenerator::EmitKeyedStore(StaticType* key_type) {
 | 
|  
 | 
|      deferred->BindExit();
 | 
|    } else {
 | 
| -    result = frame()->CallKeyedStoreIC();
 | 
| +    result = frame()->CallKeyedStoreIC(strict_mode_flag());
 | 
|      // Make sure that we do not have a test instruction after the
 | 
|      // call.  A test instruction after the call is used to
 | 
|      // indicate that we have generated an inline version of the
 | 
| 
 |