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

Side by Side Diff: src/mips64/assembler-mips64.cc

Issue 1145223002: MIPS: Add float instructions and test coverage, part two (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments Created 5 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
« no previous file with comments | « src/mips64/assembler-mips64.h ('k') | src/mips64/constants-mips64.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 2187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 2198
2199 2199
2200 void Assembler::dext_(Register rt, Register rs, uint16_t pos, uint16_t size) { 2200 void Assembler::dext_(Register rt, Register rs, uint16_t pos, uint16_t size) {
2201 // Should be called via MacroAssembler::Ext. 2201 // Should be called via MacroAssembler::Ext.
2202 // Dext instr has 'rt' field as dest, and two uint5: msb, lsb. 2202 // Dext instr has 'rt' field as dest, and two uint5: msb, lsb.
2203 DCHECK(kArchVariant == kMips64r2 || kArchVariant == kMips64r6); 2203 DCHECK(kArchVariant == kMips64r2 || kArchVariant == kMips64r6);
2204 GenInstrRegister(SPECIAL3, rs, rt, size - 1, pos, DEXT); 2204 GenInstrRegister(SPECIAL3, rs, rt, size - 1, pos, DEXT);
2205 } 2205 }
2206 2206
2207 2207
2208 void Assembler::bitswap(Register rd, Register rt) {
2209 DCHECK(kArchVariant == kMips64r6);
2210 GenInstrRegister(SPECIAL3, zero_reg, rt, rd, 0, BITSWAP);
2211 }
2212
2213
2214 void Assembler::dbitswap(Register rd, Register rt) {
2215 DCHECK(kArchVariant == kMips64r6);
2216 GenInstrRegister(SPECIAL3, zero_reg, rt, rd, 0, DBITSWAP);
2217 }
2218
2219
2208 void Assembler::pref(int32_t hint, const MemOperand& rs) { 2220 void Assembler::pref(int32_t hint, const MemOperand& rs) {
2209 DCHECK(is_uint5(hint) && is_uint16(rs.offset_)); 2221 DCHECK(is_uint5(hint) && is_uint16(rs.offset_));
2210 Instr instr = PREF | (rs.rm().code() << kRsShift) | (hint << kRtShift) 2222 Instr instr = PREF | (rs.rm().code() << kRsShift) | (hint << kRtShift)
2211 | (rs.offset_); 2223 | (rs.offset_);
2212 emit(instr); 2224 emit(instr);
2213 } 2225 }
2214 2226
2215 2227
2216 // --------Coprocessor-instructions---------------- 2228 // --------Coprocessor-instructions----------------
2217 2229
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
2635 void Assembler::ceil_l_s(FPURegister fd, FPURegister fs) { 2647 void Assembler::ceil_l_s(FPURegister fd, FPURegister fs) {
2636 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_L_S); 2648 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_L_S);
2637 } 2649 }
2638 2650
2639 2651
2640 void Assembler::ceil_l_d(FPURegister fd, FPURegister fs) { 2652 void Assembler::ceil_l_d(FPURegister fd, FPURegister fs) {
2641 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D); 2653 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D);
2642 } 2654 }
2643 2655
2644 2656
2657 void Assembler::class_s(FPURegister fd, FPURegister fs) {
2658 DCHECK(kArchVariant == kMips64r6);
2659 GenInstrRegister(COP1, S, f0, fs, fd, CLASS_S);
2660 }
2661
2662
2663 void Assembler::class_d(FPURegister fd, FPURegister fs) {
2664 DCHECK(kArchVariant == kMips64r6);
2665 GenInstrRegister(COP1, D, f0, fs, fd, CLASS_D);
2666 }
2667
2668
2645 void Assembler::mina(SecondaryField fmt, FPURegister fd, FPURegister fs, 2669 void Assembler::mina(SecondaryField fmt, FPURegister fd, FPURegister fs,
2646 FPURegister ft) { 2670 FPURegister ft) {
2647 DCHECK(kArchVariant == kMips64r6); 2671 DCHECK(kArchVariant == kMips64r6);
2648 DCHECK((fmt == D) || (fmt == S)); 2672 DCHECK((fmt == D) || (fmt == S));
2649 GenInstrRegister(COP1, fmt, ft, fs, fd, MINA); 2673 GenInstrRegister(COP1, fmt, ft, fs, fd, MINA);
2650 } 2674 }
2651 2675
2652 2676
2653 void Assembler::maxa(SecondaryField fmt, FPURegister fd, FPURegister fs, 2677 void Assembler::maxa(SecondaryField fmt, FPURegister fd, FPURegister fs,
2654 FPURegister ft) { 2678 FPURegister ft) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2694 void Assembler::cmp(FPUCondition cond, SecondaryField fmt, 2718 void Assembler::cmp(FPUCondition cond, SecondaryField fmt,
2695 FPURegister fd, FPURegister fs, FPURegister ft) { 2719 FPURegister fd, FPURegister fs, FPURegister ft) {
2696 DCHECK(kArchVariant == kMips64r6); 2720 DCHECK(kArchVariant == kMips64r6);
2697 DCHECK((fmt & ~(31 << kRsShift)) == 0); 2721 DCHECK((fmt & ~(31 << kRsShift)) == 0);
2698 Instr instr = COP1 | fmt | ft.code() << kFtShift | 2722 Instr instr = COP1 | fmt | ft.code() << kFtShift |
2699 fs.code() << kFsShift | fd.code() << kFdShift | (0 << 5) | cond; 2723 fs.code() << kFsShift | fd.code() << kFdShift | (0 << 5) | cond;
2700 emit(instr); 2724 emit(instr);
2701 } 2725 }
2702 2726
2703 2727
2728 void Assembler::cmp_s(FPUCondition cond, FPURegister fd, FPURegister fs,
2729 FPURegister ft) {
2730 cmp(cond, W, fd, fs, ft);
2731 }
2732
2733 void Assembler::cmp_d(FPUCondition cond, FPURegister fd, FPURegister fs,
2734 FPURegister ft) {
2735 cmp(cond, L, fd, fs, ft);
2736 }
2737
2738
2704 void Assembler::bc1eqz(int16_t offset, FPURegister ft) { 2739 void Assembler::bc1eqz(int16_t offset, FPURegister ft) {
2705 DCHECK(kArchVariant == kMips64r6); 2740 DCHECK(kArchVariant == kMips64r6);
2706 Instr instr = COP1 | BC1EQZ | ft.code() << kFtShift | (offset & kImm16Mask); 2741 Instr instr = COP1 | BC1EQZ | ft.code() << kFtShift | (offset & kImm16Mask);
2707 emit(instr); 2742 emit(instr);
2708 } 2743 }
2709 2744
2710 2745
2711 void Assembler::bc1nez(int16_t offset, FPURegister ft) { 2746 void Assembler::bc1nez(int16_t offset, FPURegister ft) {
2712 DCHECK(kArchVariant == kMips64r6); 2747 DCHECK(kArchVariant == kMips64r6);
2713 Instr instr = COP1 | BC1NEZ | ft.code() << kFtShift | (offset & kImm16Mask); 2748 Instr instr = COP1 | BC1NEZ | ft.code() << kFtShift | (offset & kImm16Mask);
2714 emit(instr); 2749 emit(instr);
2715 } 2750 }
2716 2751
2717 2752
2718 // Conditions for < MIPSr6. 2753 // Conditions for < MIPSr6.
2719 void Assembler::c(FPUCondition cond, SecondaryField fmt, 2754 void Assembler::c(FPUCondition cond, SecondaryField fmt,
2720 FPURegister fs, FPURegister ft, uint16_t cc) { 2755 FPURegister fs, FPURegister ft, uint16_t cc) {
2721 DCHECK(kArchVariant != kMips64r6); 2756 DCHECK(kArchVariant != kMips64r6);
2722 DCHECK(is_uint3(cc)); 2757 DCHECK(is_uint3(cc));
2723 DCHECK(fmt == S || fmt == D); 2758 DCHECK(fmt == S || fmt == D);
2724 DCHECK((fmt & ~(31 << kRsShift)) == 0); 2759 DCHECK((fmt & ~(31 << kRsShift)) == 0);
2725 Instr instr = COP1 | fmt | ft.code() << kFtShift | fs.code() << kFsShift 2760 Instr instr = COP1 | fmt | ft.code() << kFtShift | fs.code() << kFsShift
2726 | cc << 8 | 3 << 4 | cond; 2761 | cc << 8 | 3 << 4 | cond;
2727 emit(instr); 2762 emit(instr);
2728 } 2763 }
2729 2764
2730 2765
2766 void Assembler::c_s(FPUCondition cond, FPURegister fs, FPURegister ft,
2767 uint16_t cc) {
2768 c(cond, S, fs, ft, cc);
2769 }
2770
2771
2772 void Assembler::c_d(FPUCondition cond, FPURegister fs, FPURegister ft,
2773 uint16_t cc) {
2774 c(cond, D, fs, ft, cc);
2775 }
2776
2777
2731 void Assembler::fcmp(FPURegister src1, const double src2, 2778 void Assembler::fcmp(FPURegister src1, const double src2,
2732 FPUCondition cond) { 2779 FPUCondition cond) {
2733 DCHECK(src2 == 0.0); 2780 DCHECK(src2 == 0.0);
2734 mtc1(zero_reg, f14); 2781 mtc1(zero_reg, f14);
2735 cvt_d_w(f14, f14); 2782 cvt_d_w(f14, f14);
2736 c(cond, D, src1, f14, 0); 2783 c(cond, D, src1, f14, 0);
2737 } 2784 }
2738 2785
2739 2786
2740 void Assembler::bc1f(int16_t offset, uint16_t cc) { 2787 void Assembler::bc1f(int16_t offset, uint16_t cc) {
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
3080 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { 3127 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) {
3081 // No out-of-line constant pool support. 3128 // No out-of-line constant pool support.
3082 DCHECK(!FLAG_enable_ool_constant_pool); 3129 DCHECK(!FLAG_enable_ool_constant_pool);
3083 return; 3130 return;
3084 } 3131 }
3085 3132
3086 3133
3087 } } // namespace v8::internal 3134 } } // namespace v8::internal
3088 3135
3089 #endif // V8_TARGET_ARCH_MIPS64 3136 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/assembler-mips64.h ('k') | src/mips64/constants-mips64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698