Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: runtime/vm/assembler_mips.h

Issue 15038008: Impelemnts some FPU arithmetic function for the MIPS simulator, assembler, disassembler. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/vm/assembler_mips_test.cc » ('j') | runtime/vm/constants_mips.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/assembler_mips_test.cc » ('j') | runtime/vm/constants_mips.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698