| OLD | NEW |
| 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 | 67 |
| 68 | 68 |
| 69 // ----------------------------------------------------------------------------- | 69 // ----------------------------------------------------------------------------- |
| 70 // Implementation of Register and FPURegister. | 70 // Implementation of Register and FPURegister. |
| 71 | 71 |
| 72 // Core register. | 72 // Core register. |
| 73 struct Register { | 73 struct Register { |
| 74 static const int kNumRegisters = v8::internal::kNumRegisters; | 74 static const int kNumRegisters = v8::internal::kNumRegisters; |
| 75 static const int kMaxNumAllocatableRegisters = 14; // v0 through t7. | 75 static const int kMaxNumAllocatableRegisters = 14; // v0 through t7. |
| 76 static const int kSizeInBytes = 4; | 76 static const int kSizeInBytes = 4; |
| 77 static const int kGPRsPerNonFPUDouble = 2; | |
| 78 | 77 |
| 79 inline static int NumAllocatableRegisters(); | 78 inline static int NumAllocatableRegisters(); |
| 80 | 79 |
| 81 static int ToAllocationIndex(Register reg) { | 80 static int ToAllocationIndex(Register reg) { |
| 82 return reg.code() - 2; // zero_reg and 'at' are skipped. | 81 return reg.code() - 2; // zero_reg and 'at' are skipped. |
| 83 } | 82 } |
| 84 | 83 |
| 85 static Register FromAllocationIndex(int index) { | 84 static Register FromAllocationIndex(int index) { |
| 86 ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters); | 85 ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters); |
| 87 return from_code(index + 2); // zero_reg and 'at' are skipped. | 86 return from_code(index + 2); // zero_reg and 'at' are skipped. |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 const FPURegister f23 = { 23 }; | 292 const FPURegister f23 = { 23 }; |
| 294 const FPURegister f24 = { 24 }; | 293 const FPURegister f24 = { 24 }; |
| 295 const FPURegister f25 = { 25 }; | 294 const FPURegister f25 = { 25 }; |
| 296 const FPURegister f26 = { 26 }; | 295 const FPURegister f26 = { 26 }; |
| 297 const FPURegister f27 = { 27 }; | 296 const FPURegister f27 = { 27 }; |
| 298 const FPURegister f28 = { 28 }; | 297 const FPURegister f28 = { 28 }; |
| 299 const FPURegister f29 = { 29 }; | 298 const FPURegister f29 = { 29 }; |
| 300 const FPURegister f30 = { 30 }; | 299 const FPURegister f30 = { 30 }; |
| 301 const FPURegister f31 = { 31 }; | 300 const FPURegister f31 = { 31 }; |
| 302 | 301 |
| 303 const Register sfpd_lo = { kRegister_t6_Code }; | |
| 304 const Register sfpd_hi = { kRegister_t7_Code }; | |
| 305 | |
| 306 // Register aliases. | 302 // Register aliases. |
| 307 // cp is assumed to be a callee saved register. | 303 // cp is assumed to be a callee saved register. |
| 308 // Defined using #define instead of "static const Register&" because Clang | 304 // Defined using #define instead of "static const Register&" because Clang |
| 309 // complains otherwise when a compilation unit that includes this header | 305 // complains otherwise when a compilation unit that includes this header |
| 310 // doesn't use the variables. | 306 // doesn't use the variables. |
| 311 #define kRootRegister s6 | 307 #define kRootRegister s6 |
| 312 #define cp s7 | 308 #define cp s7 |
| 313 #define kLithiumScratchReg s3 | 309 #define kLithiumScratchReg s3 |
| 314 #define kLithiumScratchReg2 s4 | 310 #define kLithiumScratchReg2 s4 |
| 315 #define kLithiumScratchDouble f30 | 311 #define kLithiumScratchDouble f30 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 // Supported features must be enabled by a CpuFeatureScope before use. | 392 // Supported features must be enabled by a CpuFeatureScope before use. |
| 397 class CpuFeatures : public AllStatic { | 393 class CpuFeatures : public AllStatic { |
| 398 public: | 394 public: |
| 399 // Detect features of the target CPU. Set safe defaults if the serializer | 395 // Detect features of the target CPU. Set safe defaults if the serializer |
| 400 // is enabled (snapshots must be portable). | 396 // is enabled (snapshots must be portable). |
| 401 static void Probe(); | 397 static void Probe(); |
| 402 | 398 |
| 403 // Check whether a feature is supported by the target CPU. | 399 // Check whether a feature is supported by the target CPU. |
| 404 static bool IsSupported(CpuFeature f) { | 400 static bool IsSupported(CpuFeature f) { |
| 405 ASSERT(initialized_); | 401 ASSERT(initialized_); |
| 406 if (f == FPU && !FLAG_enable_fpu) return false; | |
| 407 return (supported_ & (1u << f)) != 0; | 402 return (supported_ & (1u << f)) != 0; |
| 408 } | 403 } |
| 409 | 404 |
| 410 static bool IsFoundByRuntimeProbingOnly(CpuFeature f) { | 405 static bool IsFoundByRuntimeProbingOnly(CpuFeature f) { |
| 411 ASSERT(initialized_); | 406 ASSERT(initialized_); |
| 412 return (found_by_runtime_probing_only_ & | 407 return (found_by_runtime_probing_only_ & |
| 413 (static_cast<uint64_t>(1) << f)) != 0; | 408 (static_cast<uint64_t>(1) << f)) != 0; |
| 414 } | 409 } |
| 415 | 410 |
| 416 static bool IsSafeForSnapshot(CpuFeature f) { | 411 static bool IsSafeForSnapshot(CpuFeature f) { |
| (...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1209 class EnsureSpace BASE_EMBEDDED { | 1204 class EnsureSpace BASE_EMBEDDED { |
| 1210 public: | 1205 public: |
| 1211 explicit EnsureSpace(Assembler* assembler) { | 1206 explicit EnsureSpace(Assembler* assembler) { |
| 1212 assembler->CheckBuffer(); | 1207 assembler->CheckBuffer(); |
| 1213 } | 1208 } |
| 1214 }; | 1209 }; |
| 1215 | 1210 |
| 1216 } } // namespace v8::internal | 1211 } } // namespace v8::internal |
| 1217 | 1212 |
| 1218 #endif // V8_ARM_ASSEMBLER_MIPS_H_ | 1213 #endif // V8_ARM_ASSEMBLER_MIPS_H_ |
| OLD | NEW |