| Index: src/ia32/lithium-codegen-ia32.cc | 
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc | 
| index 8b528d15206191c45a60b85a77fc780614ed118c..ab3426ed9ce5f93f3d79252f1751aec75f9610bc 100644 | 
| --- a/src/ia32/lithium-codegen-ia32.cc | 
| +++ b/src/ia32/lithium-codegen-ia32.cc | 
| @@ -2170,8 +2170,12 @@ void LCodeGen::DoBranch(LBranch* instr) { | 
|  | 
| if (expected.Contains(ToBooleanStub::SIMD_VALUE)) { | 
| // SIMD value -> true. | 
| -        __ CmpInstanceType(map, FLOAT32X4_TYPE); | 
| -        __ j(equal, instr->TrueLabel(chunk_)); | 
| +        Label not_simd; | 
| +        __ CmpInstanceType(map, FIRST_SIMD_VALUE_TYPE); | 
| +        __ j(less, ¬_simd, Label::kNear); | 
| +        __ CmpInstanceType(map, LAST_SIMD_VALUE_TYPE); | 
| +        __ j(less_equal, instr->TrueLabel(chunk_)); | 
| +        __ bind(¬_simd); | 
| } | 
|  | 
| if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) { | 
| @@ -5544,6 +5548,36 @@ Condition LCodeGen::EmitTypeofIs(LTypeofIsAndBranch* instr, Register input) { | 
| __ CmpObjectType(input, FLOAT32X4_TYPE, input); | 
| final_branch_condition = equal; | 
|  | 
| +  } else if (String::Equals(type_name, factory()->int32x4_string())) { | 
| +    __ JumpIfSmi(input, false_label, false_distance); | 
| +    __ CmpObjectType(input, INT32X4_TYPE, input); | 
| +    final_branch_condition = equal; | 
| + | 
| +  } else if (String::Equals(type_name, factory()->bool32x4_string())) { | 
| +    __ JumpIfSmi(input, false_label, false_distance); | 
| +    __ CmpObjectType(input, BOOL32X4_TYPE, input); | 
| +    final_branch_condition = equal; | 
| + | 
| +  } else if (String::Equals(type_name, factory()->int16x8_string())) { | 
| +    __ JumpIfSmi(input, false_label, false_distance); | 
| +    __ CmpObjectType(input, INT16X8_TYPE, input); | 
| +    final_branch_condition = equal; | 
| + | 
| +  } else if (String::Equals(type_name, factory()->bool16x8_string())) { | 
| +    __ JumpIfSmi(input, false_label, false_distance); | 
| +    __ CmpObjectType(input, BOOL16X8_TYPE, input); | 
| +    final_branch_condition = equal; | 
| + | 
| +  } else if (String::Equals(type_name, factory()->int8x16_string())) { | 
| +    __ JumpIfSmi(input, false_label, false_distance); | 
| +    __ CmpObjectType(input, INT8X16_TYPE, input); | 
| +    final_branch_condition = equal; | 
| + | 
| +  } else if (String::Equals(type_name, factory()->bool8x16_string())) { | 
| +    __ JumpIfSmi(input, false_label, false_distance); | 
| +    __ CmpObjectType(input, BOOL8X16_TYPE, input); | 
| +    final_branch_condition = equal; | 
| + | 
| } else { | 
| __ jmp(false_label, false_distance); | 
| } | 
|  |