| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_ASSEMBLER_MIPS_H_ | 5 #ifndef VM_ASSEMBLER_MIPS_H_ |
| 6 #define VM_ASSEMBLER_MIPS_H_ | 6 #define VM_ASSEMBLER_MIPS_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_mips.h directly; use assembler.h instead. | 9 #error Do not include assembler_mips.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 EmitFpuRType(COP1, FMT_W, F0, fs, fd, COP1_CVT_D); | 447 EmitFpuRType(COP1, FMT_W, F0, fs, fd, COP1_CVT_D); |
| 448 } | 448 } |
| 449 | 449 |
| 450 // Converts a 64-bit signed int in fs to a double in fd. | 450 // Converts a 64-bit signed int in fs to a double in fd. |
| 451 void cvtdl(FRegister fd, FRegister fs) { | 451 void cvtdl(FRegister fd, FRegister fs) { |
| 452 ASSERT(EvenFPURegister(fs)); | 452 ASSERT(EvenFPURegister(fs)); |
| 453 ASSERT(EvenFPURegister(fd)); | 453 ASSERT(EvenFPURegister(fd)); |
| 454 EmitFpuRType(COP1, FMT_L, F0, fs, fd, COP1_CVT_D); | 454 EmitFpuRType(COP1, FMT_L, F0, fs, fd, COP1_CVT_D); |
| 455 } | 455 } |
| 456 | 456 |
| 457 void cvtwd(FRegister fd, FRegister fs) { |
| 458 ASSERT(EvenFPURegister(fs)); |
| 459 ASSERT(EvenFPURegister(fd)); |
| 460 EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_CVT_W); |
| 461 } |
| 462 |
| 457 void div(Register rs, Register rt) { | 463 void div(Register rs, Register rt) { |
| 458 EmitRType(SPECIAL, rs, rt, R0, 0, DIV); | 464 EmitRType(SPECIAL, rs, rt, R0, 0, DIV); |
| 459 } | 465 } |
| 460 | 466 |
| 467 void divd(FRegister fd, FRegister fs, FRegister ft) { |
| 468 ASSERT(EvenFPURegister(fd)); |
| 469 ASSERT(EvenFPURegister(fs)); |
| 470 ASSERT(EvenFPURegister(ft)); |
| 471 EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_DIV); |
| 472 } |
| 473 |
| 461 void divu(Register rs, Register rt) { | 474 void divu(Register rs, Register rt) { |
| 462 EmitRType(SPECIAL, rs, rt, R0, 0, DIVU); | 475 EmitRType(SPECIAL, rs, rt, R0, 0, DIVU); |
| 463 } | 476 } |
| 464 | 477 |
| 465 void jalr(Register rs, Register rd = RA) { | 478 void jalr(Register rs, Register rd = RA) { |
| 466 ASSERT(rs != rd); | 479 ASSERT(rs != rd); |
| 467 ASSERT(!in_delay_slot_); // Jump within a delay slot is not supported. | 480 ASSERT(!in_delay_slot_); // Jump within a delay slot is not supported. |
| 468 EmitRType(SPECIAL, rs, R0, rd, 0, JALR); | 481 EmitRType(SPECIAL, rs, R0, rd, 0, JALR); |
| 469 EmitBranchDelayNop(); | 482 EmitBranchDelayNop(); |
| 470 } | 483 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 EmitFpuRType(COP1, FMT_S, F0, fs, fd, COP1_MOV); | 560 EmitFpuRType(COP1, FMT_S, F0, fs, fd, COP1_MOV); |
| 548 } | 561 } |
| 549 | 562 |
| 550 void mtc1(Register rt, FRegister fs) { | 563 void mtc1(Register rt, FRegister fs) { |
| 551 Emit(COP1 << kOpcodeShift | | 564 Emit(COP1 << kOpcodeShift | |
| 552 COP1_MT << kCop1SubShift | | 565 COP1_MT << kCop1SubShift | |
| 553 rt << kRtShift | | 566 rt << kRtShift | |
| 554 fs << kFsShift); | 567 fs << kFsShift); |
| 555 } | 568 } |
| 556 | 569 |
| 570 void muld(FRegister fd, FRegister fs, FRegister ft) { |
| 571 ASSERT(EvenFPURegister(fd)); |
| 572 ASSERT(EvenFPURegister(fs)); |
| 573 ASSERT(EvenFPURegister(ft)); |
| 574 EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_MUL); |
| 575 } |
| 576 |
| 557 void mult(Register rs, Register rt) { | 577 void mult(Register rs, Register rt) { |
| 558 EmitRType(SPECIAL, rs, rt, R0, 0, MULT); | 578 EmitRType(SPECIAL, rs, rt, R0, 0, MULT); |
| 559 } | 579 } |
| 560 | 580 |
| 561 void multu(Register rs, Register rt) { | 581 void multu(Register rs, Register rt) { |
| 562 EmitRType(SPECIAL, rs, rt, R0, 0, MULTU); | 582 EmitRType(SPECIAL, rs, rt, R0, 0, MULTU); |
| 563 } | 583 } |
| 564 | 584 |
| 565 void nop() { | 585 void nop() { |
| 566 Emit(Instr::kNopInstruction); | 586 Emit(Instr::kNopInstruction); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 } | 622 } |
| 603 | 623 |
| 604 void slt(Register rd, Register rs, Register rt) { | 624 void slt(Register rd, Register rs, Register rt) { |
| 605 EmitRType(SPECIAL, rs, rt, rd, 0, SLT); | 625 EmitRType(SPECIAL, rs, rt, rd, 0, SLT); |
| 606 } | 626 } |
| 607 | 627 |
| 608 void sltu(Register rd, Register rs, Register rt) { | 628 void sltu(Register rd, Register rs, Register rt) { |
| 609 EmitRType(SPECIAL, rs, rt, rd, 0, SLTU); | 629 EmitRType(SPECIAL, rs, rt, rd, 0, SLTU); |
| 610 } | 630 } |
| 611 | 631 |
| 632 void sqrtd(FRegister fd, FRegister fs) { |
| 633 ASSERT(EvenFPURegister(fd)); |
| 634 ASSERT(EvenFPURegister(fs)); |
| 635 EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_SQRT); |
| 636 } |
| 637 |
| 612 void sra(Register rd, Register rt, int sa) { | 638 void sra(Register rd, Register rt, int sa) { |
| 613 EmitRType(SPECIAL, R0, rt, rd, sa, SRA); | 639 EmitRType(SPECIAL, R0, rt, rd, sa, SRA); |
| 614 } | 640 } |
| 615 | 641 |
| 616 void srav(Register rd, Register rt, Register rs) { | 642 void srav(Register rd, Register rt, Register rs) { |
| 617 EmitRType(SPECIAL, rs, rt, rd, 0, SRAV); | 643 EmitRType(SPECIAL, rs, rt, rd, 0, SRAV); |
| 618 } | 644 } |
| 619 | 645 |
| 620 void srl(Register rd, Register rt, int sa) { | 646 void srl(Register rd, Register rt, int sa) { |
| 621 EmitRType(SPECIAL, R0, rt, rd, sa, SRL); | 647 EmitRType(SPECIAL, R0, rt, rd, sa, SRL); |
| 622 } | 648 } |
| 623 | 649 |
| 624 void srlv(Register rd, Register rt, Register rs) { | 650 void srlv(Register rd, Register rt, Register rs) { |
| 625 EmitRType(SPECIAL, rs, rt, rd, 0, SRLV); | 651 EmitRType(SPECIAL, rs, rt, rd, 0, SRLV); |
| 626 } | 652 } |
| 627 | 653 |
| 654 void subd(FRegister fd, FRegister fs, FRegister ft) { |
| 655 ASSERT(EvenFPURegister(fd)); |
| 656 ASSERT(EvenFPURegister(fs)); |
| 657 ASSERT(EvenFPURegister(ft)); |
| 658 EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_SUB); |
| 659 } |
| 660 |
| 628 void subu(Register rd, Register rs, Register rt) { | 661 void subu(Register rd, Register rs, Register rt) { |
| 629 EmitRType(SPECIAL, rs, rt, rd, 0, SUBU); | 662 EmitRType(SPECIAL, rs, rt, rd, 0, SUBU); |
| 630 } | 663 } |
| 631 | 664 |
| 632 void sw(Register rt, const Address& addr) { | 665 void sw(Register rt, const Address& addr) { |
| 633 EmitLoadStore(SW, rt, addr); | 666 EmitLoadStore(SW, rt, addr); |
| 634 } | 667 } |
| 635 | 668 |
| 636 void swc1(FRegister ft, const Address& addr) { | 669 void swc1(FRegister ft, const Address& addr) { |
| 637 EmitFpuLoadStore(SWC1, ft, addr); | 670 EmitFpuLoadStore(SWC1, ft, addr); |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 Register value, | 1141 Register value, |
| 1109 Label* no_update); | 1142 Label* no_update); |
| 1110 | 1143 |
| 1111 DISALLOW_ALLOCATION(); | 1144 DISALLOW_ALLOCATION(); |
| 1112 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1145 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1113 }; | 1146 }; |
| 1114 | 1147 |
| 1115 } // namespace dart | 1148 } // namespace dart |
| 1116 | 1149 |
| 1117 #endif // VM_ASSEMBLER_MIPS_H_ | 1150 #endif // VM_ASSEMBLER_MIPS_H_ |
| OLD | NEW |