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

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

Issue 1646813003: Revert of MIPS: Add FPXX support to MIPS32R2 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 | « no previous file | src/mips/constants-mips.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 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after
2092 src.offset_ + Register::kMantissaOffset); 2092 src.offset_ + Register::kMantissaOffset);
2093 GenInstrImmediate(LW, src.rm(), at, 2093 GenInstrImmediate(LW, src.rm(), at,
2094 src.offset_ + Register::kExponentOffset); 2094 src.offset_ + Register::kExponentOffset);
2095 mthc1(at, fd); 2095 mthc1(at, fd);
2096 } else { // Offset > 16 bits, use multiple instructions to load. 2096 } else { // Offset > 16 bits, use multiple instructions to load.
2097 LoadRegPlusOffsetToAt(src); 2097 LoadRegPlusOffsetToAt(src);
2098 GenInstrImmediate(LWC1, at, fd, Register::kMantissaOffset); 2098 GenInstrImmediate(LWC1, at, fd, Register::kMantissaOffset);
2099 GenInstrImmediate(LW, at, at, Register::kExponentOffset); 2099 GenInstrImmediate(LW, at, at, Register::kExponentOffset);
2100 mthc1(at, fd); 2100 mthc1(at, fd);
2101 } 2101 }
2102 } else if (IsFp32Mode()) { // fp32 mode. 2102 } else { // fp32 mode.
2103 if (is_int16(src.offset_) && is_int16(src.offset_ + kIntSize)) { 2103 if (is_int16(src.offset_) && is_int16(src.offset_ + kIntSize)) {
2104 GenInstrImmediate(LWC1, src.rm(), fd, 2104 GenInstrImmediate(LWC1, src.rm(), fd,
2105 src.offset_ + Register::kMantissaOffset); 2105 src.offset_ + Register::kMantissaOffset);
2106 FPURegister nextfpreg; 2106 FPURegister nextfpreg;
2107 nextfpreg.setcode(fd.code() + 1); 2107 nextfpreg.setcode(fd.code() + 1);
2108 GenInstrImmediate(LWC1, src.rm(), nextfpreg, 2108 GenInstrImmediate(LWC1, src.rm(), nextfpreg,
2109 src.offset_ + Register::kExponentOffset); 2109 src.offset_ + Register::kExponentOffset);
2110 } else { // Offset > 16 bits, use multiple instructions to load. 2110 } else { // Offset > 16 bits, use multiple instructions to load.
2111 LoadRegPlusOffsetToAt(src); 2111 LoadRegPlusOffsetToAt(src);
2112 GenInstrImmediate(LWC1, at, fd, Register::kMantissaOffset); 2112 GenInstrImmediate(LWC1, at, fd, Register::kMantissaOffset);
2113 FPURegister nextfpreg; 2113 FPURegister nextfpreg;
2114 nextfpreg.setcode(fd.code() + 1); 2114 nextfpreg.setcode(fd.code() + 1);
2115 GenInstrImmediate(LWC1, at, nextfpreg, Register::kExponentOffset); 2115 GenInstrImmediate(LWC1, at, nextfpreg, Register::kExponentOffset);
2116 } 2116 }
2117 } else {
2118 DCHECK(IsFpxxMode());
2119 // Currently we support FPXX on Mips32r2 and Mips32r6
2120 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6));
2121 if (is_int16(src.offset_) && is_int16(src.offset_ + kIntSize)) {
2122 GenInstrImmediate(LWC1, src.rm(), fd,
2123 src.offset_ + Register::kMantissaOffset);
2124 GenInstrImmediate(LW, src.rm(), at,
2125 src.offset_ + Register::kExponentOffset);
2126 mthc1(at, fd);
2127 } else { // Offset > 16 bits, use multiple instructions to load.
2128 LoadRegPlusOffsetToAt(src);
2129 GenInstrImmediate(LWC1, at, fd, Register::kMantissaOffset);
2130 GenInstrImmediate(LW, at, at, Register::kExponentOffset);
2131 mthc1(at, fd);
2132 }
2133 } 2117 }
2134 } 2118 }
2135 2119
2136 2120
2137 void Assembler::swc1(FPURegister fd, const MemOperand& src) { 2121 void Assembler::swc1(FPURegister fd, const MemOperand& src) {
2138 if (is_int16(src.offset_)) { 2122 if (is_int16(src.offset_)) {
2139 GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); 2123 GenInstrImmediate(SWC1, src.rm(), fd, src.offset_);
2140 } else { // Offset > 16 bits, use multiple instructions to load. 2124 } else { // Offset > 16 bits, use multiple instructions to load.
2141 LoadRegPlusOffsetToAt(src); 2125 LoadRegPlusOffsetToAt(src);
2142 GenInstrImmediate(SWC1, at, fd, 0); 2126 GenInstrImmediate(SWC1, at, fd, 0);
(...skipping 12 matching lines...) Expand all
2155 src.offset_ + Register::kMantissaOffset); 2139 src.offset_ + Register::kMantissaOffset);
2156 mfhc1(at, fd); 2140 mfhc1(at, fd);
2157 GenInstrImmediate(SW, src.rm(), at, 2141 GenInstrImmediate(SW, src.rm(), at,
2158 src.offset_ + Register::kExponentOffset); 2142 src.offset_ + Register::kExponentOffset);
2159 } else { // Offset > 16 bits, use multiple instructions to load. 2143 } else { // Offset > 16 bits, use multiple instructions to load.
2160 LoadRegPlusOffsetToAt(src); 2144 LoadRegPlusOffsetToAt(src);
2161 GenInstrImmediate(SWC1, at, fd, Register::kMantissaOffset); 2145 GenInstrImmediate(SWC1, at, fd, Register::kMantissaOffset);
2162 mfhc1(t8, fd); 2146 mfhc1(t8, fd);
2163 GenInstrImmediate(SW, at, t8, Register::kExponentOffset); 2147 GenInstrImmediate(SW, at, t8, Register::kExponentOffset);
2164 } 2148 }
2165 } else if (IsFp32Mode()) { // fp32 mode. 2149 } else { // fp32 mode.
2166 if (is_int16(src.offset_) && is_int16(src.offset_ + kIntSize)) { 2150 if (is_int16(src.offset_) && is_int16(src.offset_ + kIntSize)) {
2167 GenInstrImmediate(SWC1, src.rm(), fd, 2151 GenInstrImmediate(SWC1, src.rm(), fd,
2168 src.offset_ + Register::kMantissaOffset); 2152 src.offset_ + Register::kMantissaOffset);
2169 FPURegister nextfpreg; 2153 FPURegister nextfpreg;
2170 nextfpreg.setcode(fd.code() + 1); 2154 nextfpreg.setcode(fd.code() + 1);
2171 GenInstrImmediate(SWC1, src.rm(), nextfpreg, 2155 GenInstrImmediate(SWC1, src.rm(), nextfpreg,
2172 src.offset_ + Register::kExponentOffset); 2156 src.offset_ + Register::kExponentOffset);
2173 } else { // Offset > 16 bits, use multiple instructions to load. 2157 } else { // Offset > 16 bits, use multiple instructions to load.
2174 LoadRegPlusOffsetToAt(src); 2158 LoadRegPlusOffsetToAt(src);
2175 GenInstrImmediate(SWC1, at, fd, Register::kMantissaOffset); 2159 GenInstrImmediate(SWC1, at, fd, Register::kMantissaOffset);
2176 FPURegister nextfpreg; 2160 FPURegister nextfpreg;
2177 nextfpreg.setcode(fd.code() + 1); 2161 nextfpreg.setcode(fd.code() + 1);
2178 GenInstrImmediate(SWC1, at, nextfpreg, Register::kExponentOffset); 2162 GenInstrImmediate(SWC1, at, nextfpreg, Register::kExponentOffset);
2179 } 2163 }
2180 } else {
2181 DCHECK(IsFpxxMode());
2182 // Currently we support FPXX on Mips32r2 and Mips32r6
2183 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6));
2184 if (is_int16(src.offset_) && is_int16(src.offset_ + kIntSize)) {
2185 GenInstrImmediate(SWC1, src.rm(), fd,
2186 src.offset_ + Register::kMantissaOffset);
2187 mfhc1(at, fd);
2188 GenInstrImmediate(SW, src.rm(), at,
2189 src.offset_ + Register::kExponentOffset);
2190 } else { // Offset > 16 bits, use multiple instructions to load.
2191 LoadRegPlusOffsetToAt(src);
2192 GenInstrImmediate(SWC1, at, fd, Register::kMantissaOffset);
2193 mfhc1(t8, fd);
2194 GenInstrImmediate(SW, at, t8, Register::kExponentOffset);
2195 }
2196 } 2164 }
2197 } 2165 }
2198 2166
2199 2167
2200 void Assembler::mtc1(Register rt, FPURegister fs) { 2168 void Assembler::mtc1(Register rt, FPURegister fs) {
2201 GenInstrRegister(COP1, MTC1, rt, fs, f0); 2169 GenInstrRegister(COP1, MTC1, rt, fs, f0);
2202 } 2170 }
2203 2171
2204 2172
2205 void Assembler::mthc1(Register rt, FPURegister fs) { 2173 void Assembler::mthc1(Register rt, FPURegister fs) {
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after
3077 3045
3078 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { 3046 if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
3079 Assembler::FlushICache(isolate, pc, 2 * sizeof(int32_t)); 3047 Assembler::FlushICache(isolate, pc, 2 * sizeof(int32_t));
3080 } 3048 }
3081 } 3049 }
3082 3050
3083 } // namespace internal 3051 } // namespace internal
3084 } // namespace v8 3052 } // namespace v8
3085 3053
3086 #endif // V8_TARGET_ARCH_MIPS 3054 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | src/mips/constants-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698