| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
| 6 | 6 |
| 7 #include "src/compiler/code-generator-impl.h" | 7 #include "src/compiler/code-generator-impl.h" |
| 8 #include "src/compiler/gap-resolver.h" | 8 #include "src/compiler/gap-resolver.h" |
| 9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
| 10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 public: | 148 public: |
| 149 OutOfLineLoadFloat(CodeGenerator* gen, XMMRegister result) | 149 OutOfLineLoadFloat(CodeGenerator* gen, XMMRegister result) |
| 150 : OutOfLineCode(gen), result_(result) {} | 150 : OutOfLineCode(gen), result_(result) {} |
| 151 | 151 |
| 152 void Generate() FINAL { __ pcmpeqd(result_, result_); } | 152 void Generate() FINAL { __ pcmpeqd(result_, result_); } |
| 153 | 153 |
| 154 private: | 154 private: |
| 155 XMMRegister const result_; | 155 XMMRegister const result_; |
| 156 }; | 156 }; |
| 157 | 157 |
| 158 |
| 159 class OutOfLineTruncateDoubleToI FINAL : public OutOfLineCode { |
| 160 public: |
| 161 OutOfLineTruncateDoubleToI(CodeGenerator* gen, Register result, |
| 162 XMMRegister input) |
| 163 : OutOfLineCode(gen), result_(result), input_(input) {} |
| 164 |
| 165 void Generate() FINAL { |
| 166 __ subp(rsp, Immediate(kDoubleSize)); |
| 167 __ movsd(MemOperand(rsp, 0), input_); |
| 168 __ SlowTruncateToI(result_, rsp, 0); |
| 169 __ addp(rsp, Immediate(kDoubleSize)); |
| 170 } |
| 171 |
| 172 private: |
| 173 Register const result_; |
| 174 XMMRegister const input_; |
| 175 }; |
| 176 |
| 158 } // namespace | 177 } // namespace |
| 159 | 178 |
| 160 | 179 |
| 161 #define ASSEMBLE_UNOP(asm_instr) \ | 180 #define ASSEMBLE_UNOP(asm_instr) \ |
| 162 do { \ | 181 do { \ |
| 163 if (instr->Output()->IsRegister()) { \ | 182 if (instr->Output()->IsRegister()) { \ |
| 164 __ asm_instr(i.OutputRegister()); \ | 183 __ asm_instr(i.OutputRegister()); \ |
| 165 } else { \ | 184 } else { \ |
| 166 __ asm_instr(i.OutputOperand()); \ | 185 __ asm_instr(i.OutputOperand()); \ |
| 167 } \ | 186 } \ |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 break; | 367 break; |
| 349 case kArchNop: | 368 case kArchNop: |
| 350 // don't emit code for nops. | 369 // don't emit code for nops. |
| 351 break; | 370 break; |
| 352 case kArchRet: | 371 case kArchRet: |
| 353 AssembleReturn(); | 372 AssembleReturn(); |
| 354 break; | 373 break; |
| 355 case kArchStackPointer: | 374 case kArchStackPointer: |
| 356 __ movq(i.OutputRegister(), rsp); | 375 __ movq(i.OutputRegister(), rsp); |
| 357 break; | 376 break; |
| 358 case kArchTruncateDoubleToI: | 377 case kArchTruncateDoubleToI: { |
| 359 __ TruncateDoubleToI(i.OutputRegister(), i.InputDoubleRegister(0)); | 378 auto result = i.OutputRegister(); |
| 379 auto input = i.InputDoubleRegister(0); |
| 380 auto ool = new (zone()) OutOfLineTruncateDoubleToI(this, result, input); |
| 381 __ cvttsd2siq(result, input); |
| 382 __ cmpq(result, Immediate(1)); |
| 383 __ j(overflow, ool->entry()); |
| 384 __ bind(ool->exit()); |
| 360 break; | 385 break; |
| 386 } |
| 361 case kX64Add32: | 387 case kX64Add32: |
| 362 ASSEMBLE_BINOP(addl); | 388 ASSEMBLE_BINOP(addl); |
| 363 break; | 389 break; |
| 364 case kX64Add: | 390 case kX64Add: |
| 365 ASSEMBLE_BINOP(addq); | 391 ASSEMBLE_BINOP(addq); |
| 366 break; | 392 break; |
| 367 case kX64Sub32: | 393 case kX64Sub32: |
| 368 ASSEMBLE_BINOP(subl); | 394 ASSEMBLE_BINOP(subl); |
| 369 break; | 395 break; |
| 370 case kX64Sub: | 396 case kX64Sub: |
| (...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 } | 1232 } |
| 1207 } | 1233 } |
| 1208 MarkLazyDeoptSite(); | 1234 MarkLazyDeoptSite(); |
| 1209 } | 1235 } |
| 1210 | 1236 |
| 1211 #undef __ | 1237 #undef __ |
| 1212 | 1238 |
| 1213 } // namespace internal | 1239 } // namespace internal |
| 1214 } // namespace compiler | 1240 } // namespace compiler |
| 1215 } // namespace v8 | 1241 } // namespace v8 |
| OLD | NEW |