| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 2282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2293 | 2293 |
| 2294 void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) { | 2294 void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) { |
| 2295 Abort("DoMathAbs unimplemented."); | 2295 Abort("DoMathAbs unimplemented."); |
| 2296 } | 2296 } |
| 2297 | 2297 |
| 2298 | 2298 |
| 2299 void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) { | 2299 void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) { |
| 2300 DoubleRegister input = ToDoubleRegister(instr->input()); | 2300 DoubleRegister input = ToDoubleRegister(instr->input()); |
| 2301 Register result = ToRegister(instr->result()); | 2301 Register result = ToRegister(instr->result()); |
| 2302 Register prev_fpscr = ToRegister(instr->temp()); | 2302 Register prev_fpscr = ToRegister(instr->temp()); |
| 2303 SwVfpRegister single_scratch = single_scratch0(); | 2303 SwVfpRegister single_scratch = double_scratch0().low(); |
| 2304 Register scratch = scratch0(); | 2304 Register scratch = scratch0(); |
| 2305 | 2305 |
| 2306 // Set custom FPCSR: | 2306 // Set custom FPCSR: |
| 2307 // - Set rounding mode to "Round towards Minus Infinity". | 2307 // - Set rounding mode to "Round towards Minus Infinity". |
| 2308 // - Clear vfp cumulative exception flags. | 2308 // - Clear vfp cumulative exception flags. |
| 2309 // - Make sure Flush-to-zero mode control bit is unset. | 2309 // - Make sure Flush-to-zero mode control bit is unset. |
| 2310 __ vmrs(prev_fpscr); | 2310 __ vmrs(prev_fpscr); |
| 2311 __ bic(scratch, prev_fpscr, | 2311 __ bic(scratch, prev_fpscr, |
| 2312 Operand(kVFPExceptionMask | kVFPRoundingModeMask | kVFPFlushToZeroMask)); | 2312 Operand(kVFPExceptionMask | kVFPRoundingModeMask | kVFPFlushToZeroMask)); |
| 2313 __ orr(scratch, scratch, Operand(kVFPRoundToMinusInfinityBits)); | 2313 __ orr(scratch, scratch, Operand(kVFPRoundToMinusInfinityBits)); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2501 ASSERT(ToRegister(instr->object()).is(r2)); | 2501 ASSERT(ToRegister(instr->object()).is(r2)); |
| 2502 ASSERT(ToRegister(instr->key()).is(r1)); | 2502 ASSERT(ToRegister(instr->key()).is(r1)); |
| 2503 ASSERT(ToRegister(instr->value()).is(r0)); | 2503 ASSERT(ToRegister(instr->value()).is(r0)); |
| 2504 | 2504 |
| 2505 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); | 2505 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); |
| 2506 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 2506 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 2507 } | 2507 } |
| 2508 | 2508 |
| 2509 | 2509 |
| 2510 void LCodeGen::DoInteger32ToDouble(LInteger32ToDouble* instr) { | 2510 void LCodeGen::DoInteger32ToDouble(LInteger32ToDouble* instr) { |
| 2511 Abort("DoInteger32ToDouble unimplemented."); | 2511 LOperand* input = instr->input(); |
| 2512 ASSERT(input->IsRegister() || input->IsStackSlot()); |
| 2513 LOperand* output = instr->result(); |
| 2514 ASSERT(output->IsDoubleRegister()); |
| 2515 SwVfpRegister single_scratch = double_scratch0().low(); |
| 2516 if (input->IsStackSlot()) { |
| 2517 Register scratch = scratch0(); |
| 2518 __ ldr(scratch, ToMemOperand(input)); |
| 2519 __ vmov(single_scratch, scratch); |
| 2520 } else { |
| 2521 __ vmov(single_scratch, ToRegister(input)); |
| 2522 } |
| 2523 __ vcvt_f64_s32(ToDoubleRegister(output), single_scratch); |
| 2512 } | 2524 } |
| 2513 | 2525 |
| 2514 | 2526 |
| 2515 void LCodeGen::DoNumberTagI(LNumberTagI* instr) { | 2527 void LCodeGen::DoNumberTagI(LNumberTagI* instr) { |
| 2516 class DeferredNumberTagI: public LDeferredCode { | 2528 class DeferredNumberTagI: public LDeferredCode { |
| 2517 public: | 2529 public: |
| 2518 DeferredNumberTagI(LCodeGen* codegen, LNumberTagI* instr) | 2530 DeferredNumberTagI(LCodeGen* codegen, LNumberTagI* instr) |
| 2519 : LDeferredCode(codegen), instr_(instr) { } | 2531 : LDeferredCode(codegen), instr_(instr) { } |
| 2520 virtual void Generate() { codegen()->DoDeferredNumberTagI(instr_); } | 2532 virtual void Generate() { codegen()->DoDeferredNumberTagI(instr_); } |
| 2521 private: | 2533 private: |
| (...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3179 | 3191 |
| 3180 | 3192 |
| 3181 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { | 3193 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { |
| 3182 Abort("DoOsrEntry unimplemented."); | 3194 Abort("DoOsrEntry unimplemented."); |
| 3183 } | 3195 } |
| 3184 | 3196 |
| 3185 | 3197 |
| 3186 #undef __ | 3198 #undef __ |
| 3187 | 3199 |
| 3188 } } // namespace v8::internal | 3200 } } // namespace v8::internal |
| OLD | NEW |