Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 5324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5335 Result value = frame_->Pop(); | 5335 Result value = frame_->Pop(); |
| 5336 value.ToRegister(); | 5336 value.ToRegister(); |
| 5337 | 5337 |
| 5338 if (value.is_number()) { | 5338 if (value.is_number()) { |
| 5339 // Fast case if TypeInfo indicates only numbers. | 5339 // Fast case if TypeInfo indicates only numbers. |
| 5340 if (FLAG_debug_code) { | 5340 if (FLAG_debug_code) { |
| 5341 __ AbortIfNotNumber(value.reg()); | 5341 __ AbortIfNotNumber(value.reg()); |
| 5342 } | 5342 } |
| 5343 // Smi => false iff zero. | 5343 // Smi => false iff zero. |
| 5344 __ SmiCompare(value.reg(), Smi::FromInt(0)); | 5344 __ SmiCompare(value.reg(), Smi::FromInt(0)); |
| 5345 dest->false_target()->Branch(equal); | 5345 if (value.is_smi()) { |
| 5346 Condition is_smi = masm_->CheckSmi(value.reg()); | 5346 value.Unuse(); |
| 5347 dest->true_target()->Branch(is_smi); | 5347 dest->Split(not_zero); |
| 5348 __ xorpd(xmm0, xmm0); | 5348 } else { |
| 5349 __ ucomisd(xmm0, FieldOperand(value.reg(), HeapNumber::kValueOffset)); | 5349 dest->false_target()->Branch(equal); |
|
William Hesse
2010/06/29 10:50:10
Why not also have a case for if value.is_double()?
Lasse Reichstein
2010/06/29 14:13:30
I doubt it will happen in practice that we convert
| |
| 5350 value.Unuse(); | 5350 Condition is_smi = masm_->CheckSmi(value.reg()); |
| 5351 dest->Split(not_zero); | 5351 dest->true_target()->Branch(is_smi); |
| 5352 __ xorpd(xmm0, xmm0); | |
| 5353 __ ucomisd(xmm0, FieldOperand(value.reg(), HeapNumber::kValueOffset)); | |
| 5354 value.Unuse(); | |
| 5355 dest->Split(not_zero); | |
| 5356 } | |
| 5352 } else { | 5357 } else { |
| 5353 // Fast case checks. | 5358 // Fast case checks. |
| 5354 // 'false' => false. | 5359 // 'false' => false. |
| 5355 __ CompareRoot(value.reg(), Heap::kFalseValueRootIndex); | 5360 __ CompareRoot(value.reg(), Heap::kFalseValueRootIndex); |
| 5356 dest->false_target()->Branch(equal); | 5361 dest->false_target()->Branch(equal); |
| 5357 | 5362 |
| 5358 // 'true' => true. | 5363 // 'true' => true. |
| 5359 __ CompareRoot(value.reg(), Heap::kTrueValueRootIndex); | 5364 __ CompareRoot(value.reg(), Heap::kTrueValueRootIndex); |
| 5360 dest->true_target()->Branch(equal); | 5365 dest->true_target()->Branch(equal); |
| 5361 | 5366 |
| (...skipping 6539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 11901 } | 11906 } |
| 11902 | 11907 |
| 11903 #endif | 11908 #endif |
| 11904 | 11909 |
| 11905 | 11910 |
| 11906 #undef __ | 11911 #undef __ |
| 11907 | 11912 |
| 11908 } } // namespace v8::internal | 11913 } } // namespace v8::internal |
| 11909 | 11914 |
| 11910 #endif // V8_TARGET_ARCH_X64 | 11915 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |