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

Side by Side Diff: src/x64/assembler-x64.h

Issue 1954953002: Add the concept of FloatRegister for all platforms. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 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/s390/assembler-s390.h ('k') | src/x87/assembler-x87.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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 V(xmm7) \ 176 V(xmm7) \
177 V(xmm8) \ 177 V(xmm8) \
178 V(xmm9) \ 178 V(xmm9) \
179 V(xmm10) \ 179 V(xmm10) \
180 V(xmm11) \ 180 V(xmm11) \
181 V(xmm12) \ 181 V(xmm12) \
182 V(xmm13) \ 182 V(xmm13) \
183 V(xmm14) \ 183 V(xmm14) \
184 V(xmm15) 184 V(xmm15)
185 185
186 #define FLOAT_REGISTERS DOUBLE_REGISTERS
187
186 #define ALLOCATABLE_DOUBLE_REGISTERS(V) \ 188 #define ALLOCATABLE_DOUBLE_REGISTERS(V) \
187 V(xmm1) \ 189 V(xmm1) \
188 V(xmm2) \ 190 V(xmm2) \
189 V(xmm3) \ 191 V(xmm3) \
190 V(xmm4) \ 192 V(xmm4) \
191 V(xmm5) \ 193 V(xmm5) \
192 V(xmm6) \ 194 V(xmm6) \
193 V(xmm7) \ 195 V(xmm7) \
194 V(xmm8) \ 196 V(xmm8) \
195 V(xmm9) \ 197 V(xmm9) \
196 V(xmm10) \ 198 V(xmm10) \
197 V(xmm11) \ 199 V(xmm11) \
198 V(xmm12) \ 200 V(xmm12) \
199 V(xmm13) \ 201 V(xmm13) \
200 V(xmm14) \ 202 V(xmm14) \
201 V(xmm15) 203 V(xmm15)
202 204
203 205 struct XMMRegister {
204 struct DoubleRegister {
205 enum Code { 206 enum Code {
206 #define REGISTER_CODE(R) kCode_##R, 207 #define REGISTER_CODE(R) kCode_##R,
207 DOUBLE_REGISTERS(REGISTER_CODE) 208 DOUBLE_REGISTERS(REGISTER_CODE)
208 #undef REGISTER_CODE 209 #undef REGISTER_CODE
209 kAfterLast, 210 kAfterLast,
210 kCode_no_reg = -1 211 kCode_no_reg = -1
211 }; 212 };
212 213
213 static const int kMaxNumRegisters = Code::kAfterLast; 214 static const int kMaxNumRegisters = Code::kAfterLast;
214 215
215 static DoubleRegister from_code(int code) { 216 static XMMRegister from_code(int code) {
216 DoubleRegister result = {code}; 217 XMMRegister result = {code};
217 return result; 218 return result;
218 } 219 }
219 220
220 const char* ToString(); 221 const char* ToString();
221 bool IsAllocatable() const; 222 bool IsAllocatable() const;
222 bool is_valid() const { return 0 <= reg_code && reg_code < kMaxNumRegisters; } 223 bool is_valid() const { return 0 <= reg_code && reg_code < kMaxNumRegisters; }
223 bool is(DoubleRegister reg) const { return reg_code == reg.reg_code; } 224 bool is(XMMRegister reg) const { return reg_code == reg.reg_code; }
224 int code() const { 225 int code() const {
225 DCHECK(is_valid()); 226 DCHECK(is_valid());
226 return reg_code; 227 return reg_code;
227 } 228 }
228 229
229 // Return the high bit of the register code as a 0 or 1. Used often 230 // Return the high bit of the register code as a 0 or 1. Used often
230 // when constructing the REX prefix byte. 231 // when constructing the REX prefix byte.
231 int high_bit() const { return reg_code >> 3; } 232 int high_bit() const { return reg_code >> 3; }
232 // Return the 3 low bits of the register code. Used when encoding registers 233 // Return the 3 low bits of the register code. Used when encoding registers
233 // in modR/M, SIB, and opcode bytes. 234 // in modR/M, SIB, and opcode bytes.
234 int low_bits() const { return reg_code & 0x7; } 235 int low_bits() const { return reg_code & 0x7; }
235 236
236 // Unfortunately we can't make this private in a struct when initializing 237 // Unfortunately we can't make this private in a struct when initializing
237 // by assignment. 238 // by assignment.
238 int reg_code; 239 int reg_code;
239 }; 240 };
240 241
242 typedef XMMRegister FloatRegister;
243
244 typedef XMMRegister DoubleRegister;
245
246 typedef XMMRegister Simd128Register;
241 247
242 #define DECLARE_REGISTER(R) \ 248 #define DECLARE_REGISTER(R) \
243 const DoubleRegister R = {DoubleRegister::kCode_##R}; 249 const DoubleRegister R = {DoubleRegister::kCode_##R};
244 DOUBLE_REGISTERS(DECLARE_REGISTER) 250 DOUBLE_REGISTERS(DECLARE_REGISTER)
245 #undef DECLARE_REGISTER 251 #undef DECLARE_REGISTER
246 const DoubleRegister no_double_reg = {DoubleRegister::kCode_no_reg}; 252 const DoubleRegister no_double_reg = {DoubleRegister::kCode_no_reg};
247 253
248
249 typedef DoubleRegister XMMRegister;
250
251 typedef DoubleRegister Simd128Register;
252
253 enum Condition { 254 enum Condition {
254 // any value < 0 is considered no_condition 255 // any value < 0 is considered no_condition
255 no_condition = -1, 256 no_condition = -1,
256 257
257 overflow = 0, 258 overflow = 0,
258 no_overflow = 1, 259 no_overflow = 1,
259 below = 2, 260 below = 2,
260 above_equal = 3, 261 above_equal = 3,
261 equal = 4, 262 equal = 4,
262 not_equal = 5, 263 not_equal = 5,
(...skipping 1968 matching lines...) Expand 10 before | Expand all | Expand 10 after
2231 Assembler* assembler_; 2232 Assembler* assembler_;
2232 #ifdef DEBUG 2233 #ifdef DEBUG
2233 int space_before_; 2234 int space_before_;
2234 #endif 2235 #endif
2235 }; 2236 };
2236 2237
2237 } // namespace internal 2238 } // namespace internal
2238 } // namespace v8 2239 } // namespace v8
2239 2240
2240 #endif // V8_X64_ASSEMBLER_X64_H_ 2241 #endif // V8_X64_ASSEMBLER_X64_H_
OLDNEW
« no previous file with comments | « src/s390/assembler-s390.h ('k') | src/x87/assembler-x87.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698