Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
| 9 #include "src/cpu-profiler.h" | 9 #include "src/cpu-profiler.h" |
| 10 #include "src/hydrogen-osr.h" | 10 #include "src/hydrogen-osr.h" |
| (...skipping 2345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2356 __ li(at, Operand(factory()->the_hole_value())); | 2356 __ li(at, Operand(factory()->the_hole_value())); |
| 2357 EmitBranch(instr, eq, input_reg, Operand(at)); | 2357 EmitBranch(instr, eq, input_reg, Operand(at)); |
| 2358 return; | 2358 return; |
| 2359 } | 2359 } |
| 2360 | 2360 |
| 2361 DoubleRegister input_reg = ToDoubleRegister(instr->object()); | 2361 DoubleRegister input_reg = ToDoubleRegister(instr->object()); |
| 2362 EmitFalseBranchF(instr, eq, input_reg, input_reg); | 2362 EmitFalseBranchF(instr, eq, input_reg, input_reg); |
| 2363 | 2363 |
| 2364 Register scratch = scratch0(); | 2364 Register scratch = scratch0(); |
| 2365 __ FmoveHigh(scratch, input_reg); | 2365 __ FmoveHigh(scratch, input_reg); |
| 2366 __ dsll32(scratch, scratch, 0); // FmoveHigh (mfhc1) sign-extends. | 2366 EmitBranch(instr, eq, scratch, |
| 2367 __ dsrl32(scratch, scratch, 0); // Use only low 32-bits. | 2367 Operand(static_cast<int32_t>(kHoleNanUpper32))); |
|
paul.l...
2015/02/25 16:21:38
this looks like nice solution to remove some instr
| |
| 2368 EmitBranch(instr, eq, scratch, Operand(kHoleNanUpper32)); | |
| 2369 } | 2368 } |
| 2370 | 2369 |
| 2371 | 2370 |
| 2372 void LCodeGen::DoCompareMinusZeroAndBranch(LCompareMinusZeroAndBranch* instr) { | 2371 void LCodeGen::DoCompareMinusZeroAndBranch(LCompareMinusZeroAndBranch* instr) { |
| 2373 Representation rep = instr->hydrogen()->value()->representation(); | 2372 Representation rep = instr->hydrogen()->value()->representation(); |
| 2374 DCHECK(!rep.IsInteger32()); | 2373 DCHECK(!rep.IsInteger32()); |
| 2375 Register scratch = ToRegister(instr->temp()); | 2374 Register scratch = ToRegister(instr->temp()); |
| 2376 | 2375 |
| 2377 if (rep.IsDouble()) { | 2376 if (rep.IsDouble()) { |
| 2378 DoubleRegister value = ToDoubleRegister(instr->value()); | 2377 DoubleRegister value = ToDoubleRegister(instr->value()); |
| (...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3273 __ dsra32(at, key, 0); | 3272 __ dsra32(at, key, 0); |
| 3274 } else { | 3273 } else { |
| 3275 __ dsra(at, key, -shift_size); | 3274 __ dsra(at, key, -shift_size); |
| 3276 } | 3275 } |
| 3277 __ Daddu(scratch, scratch, at); | 3276 __ Daddu(scratch, scratch, at); |
| 3278 } | 3277 } |
| 3279 | 3278 |
| 3280 __ ldc1(result, MemOperand(scratch)); | 3279 __ ldc1(result, MemOperand(scratch)); |
| 3281 | 3280 |
| 3282 if (instr->hydrogen()->RequiresHoleCheck()) { | 3281 if (instr->hydrogen()->RequiresHoleCheck()) { |
| 3283 __ lwu(scratch, MemOperand(scratch, sizeof(kHoleNanLower32))); | 3282 __ FmoveHigh(scratch, result); |
| 3284 DeoptimizeIf(eq, instr, Deoptimizer::kHole, scratch, | 3283 DeoptimizeIf(eq, instr, Deoptimizer::kHole, scratch, |
| 3285 Operand(kHoleNanUpper32)); | 3284 Operand(static_cast<int32_t>(kHoleNanUpper32))); |
| 3286 } | 3285 } |
| 3287 } | 3286 } |
| 3288 | 3287 |
| 3289 | 3288 |
| 3290 void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) { | 3289 void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) { |
| 3291 HLoadKeyed* hinstr = instr->hydrogen(); | 3290 HLoadKeyed* hinstr = instr->hydrogen(); |
| 3292 Register elements = ToRegister(instr->elements()); | 3291 Register elements = ToRegister(instr->elements()); |
| 3293 Register result = ToRegister(instr->result()); | 3292 Register result = ToRegister(instr->result()); |
| 3294 Register scratch = scratch0(); | 3293 Register scratch = scratch0(); |
| 3295 Register store_base = scratch; | 3294 Register store_base = scratch; |
| (...skipping 2757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6053 __ li(at, scope_info); | 6052 __ li(at, scope_info); |
| 6054 __ Push(at, ToRegister(instr->function())); | 6053 __ Push(at, ToRegister(instr->function())); |
| 6055 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6054 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
| 6056 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6055 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 6057 } | 6056 } |
| 6058 | 6057 |
| 6059 | 6058 |
| 6060 #undef __ | 6059 #undef __ |
| 6061 | 6060 |
| 6062 } } // namespace v8::internal | 6061 } } // namespace v8::internal |
| OLD | NEW |