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 | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are 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 25 matching lines...) Expand all Loading... |
36 | 36 |
37 #include "v8.h" | 37 #include "v8.h" |
38 | 38 |
39 #include "arm/assembler-arm-inl.h" | 39 #include "arm/assembler-arm-inl.h" |
40 #include "serialize.h" | 40 #include "serialize.h" |
41 | 41 |
42 namespace v8 { | 42 namespace v8 { |
43 namespace internal { | 43 namespace internal { |
44 | 44 |
45 // Safe default is no features. | 45 // Safe default is no features. |
46 uint64_t CpuFeatures::supported_ = 0; | 46 unsigned CpuFeatures::supported_ = 0; |
47 uint64_t CpuFeatures::enabled_ = 0; | 47 unsigned CpuFeatures::enabled_ = 0; |
48 | 48 |
49 void CpuFeatures::Probe() { | 49 void CpuFeatures::Probe() { |
50 // Perform runtime detection of VFP. | 50 // If the compiler is allowed to use vfp then we can use vfp too in our |
51 static const char* descriptive_file_linux = "/proc/cpuinfo"; | 51 // code generation. |
52 | |
53 #if !defined(__arm__) || (defined(__VFP_FP__) && !defined(__SOFTFP__)) | 52 #if !defined(__arm__) || (defined(__VFP_FP__) && !defined(__SOFTFP__)) |
54 // The supported & enabled flags for VFP are set to true for the following | 53 // The supported flags for VFP are set to true for the following |
55 // conditions, even without runtime detection of VFP: | 54 // conditions, even without runtime detection of VFP: |
56 // (1) For the simulator=arm build, always use VFP since | 55 // (1) For the simulator=arm build, always use VFP since |
57 // the arm simulator has VFP support. | 56 // the arm simulator has VFP support. |
58 // (2) If V8 is being compiled with GCC with the vfp option turned on, | 57 // (2) If V8 is being compiled with GCC with the vfp option turned on, |
59 // always use VFP since the build system assumes that V8 will run on | 58 // always use VFP since the build system assumes that V8 will run on |
60 // a platform that has VFP hardware. | 59 // a platform that has VFP hardware. |
61 supported_ |= static_cast<uint64_t>(1) << VFP3; | 60 supported_ |= 1u << VFP3; |
62 enabled_ |= static_cast<uint64_t>(1) << VFP3; | 61 enabled_ |= 1u << VFP3; |
63 #endif | 62 #endif |
64 | 63 |
65 if (OS::fgrep_vfp(descriptive_file_linux, "vfp")) { | 64 if (Serializer::enabled()) return; // No features if we might serialize. |
| 65 |
| 66 if (OS::ArmCpuHasFeature(OS::VFP)) { |
66 // This implementation also sets the VFP flags if | 67 // This implementation also sets the VFP flags if |
67 // runtime detection of VFP returns true. | 68 // runtime detection of VFP returns true. |
68 supported_ |= static_cast<uint64_t>(1) << VFP3; | 69 supported_ |= 1u << VFP3; |
69 enabled_ |= static_cast<uint64_t>(1) << VFP3; | |
70 } | 70 } |
71 } | 71 } |
72 | 72 |
73 // ----------------------------------------------------------------------------- | 73 // ----------------------------------------------------------------------------- |
74 // Implementation of Register and CRegister | 74 // Implementation of Register and CRegister |
75 | 75 |
76 Register no_reg = { -1 }; | 76 Register no_reg = { -1 }; |
77 | 77 |
78 Register r0 = { 0 }; | 78 Register r0 = { 0 }; |
79 Register r1 = { 1 }; | 79 Register r1 = { 1 }; |
(...skipping 1731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1811 bind(&after_pool); | 1811 bind(&after_pool); |
1812 } | 1812 } |
1813 | 1813 |
1814 // Since a constant pool was just emitted, move the check offset forward by | 1814 // Since a constant pool was just emitted, move the check offset forward by |
1815 // the standard interval. | 1815 // the standard interval. |
1816 next_buffer_check_ = pc_offset() + kCheckConstInterval; | 1816 next_buffer_check_ = pc_offset() + kCheckConstInterval; |
1817 } | 1817 } |
1818 | 1818 |
1819 | 1819 |
1820 } } // namespace v8::internal | 1820 } } // namespace v8::internal |
OLD | NEW |