Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index 473f548500b170793864daa0ab227446d532b900..3d6107552f1041d7ad408026afdc077bcd88013b 100644 |
--- a/src/x64/full-codegen-x64.cc |
+++ b/src/x64/full-codegen-x64.cc |
@@ -986,6 +986,15 @@ void FullCodeGenerator::VisitSwitchStatement(SwitchStatement* stmt) { |
CallIC(ic, RelocInfo::CODE_TARGET, clause->CompareId()); |
patch_site.EmitPatchInfo(); |
+ Label skip; |
+ __ jmp(&skip, Label::kNear); |
+ PrepareForBailout(clause, TOS_REG); |
+ __ CompareRoot(rax, Heap::kTrueValueRootIndex); |
+ __ j(not_equal, &next_test); |
+ __ Drop(1); |
+ __ jmp(clause->body_target()); |
+ __ bind(&skip); |
+ |
__ testq(rax, rax); |
__ j(not_equal, &next_test); |
__ Drop(1); // Switch value is no longer needed. |