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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 if (FLAG_enable_32dregs) { | 145 if (FLAG_enable_32dregs) { |
146 supported_ |= static_cast<uint64_t>(1) << VFP32DREGS; | 146 supported_ |= static_cast<uint64_t>(1) << VFP32DREGS; |
147 } | 147 } |
148 | 148 |
149 if (FLAG_enable_unaligned_accesses) { | 149 if (FLAG_enable_unaligned_accesses) { |
150 supported_ |= static_cast<uint64_t>(1) << UNALIGNED_ACCESSES; | 150 supported_ |= static_cast<uint64_t>(1) << UNALIGNED_ACCESSES; |
151 } | 151 } |
152 | 152 |
153 #else // __arm__ | 153 #else // __arm__ |
154 // Probe for additional features not already known to be available. | 154 // Probe for additional features not already known to be available. |
155 if (!IsSupported(VFP3) && FLAG_enable_vfp3 && OS::ArmCpuHasFeature(VFP3)) { | 155 CPU cpu; |
| 156 if (!IsSupported(VFP3) && FLAG_enable_vfp3 && cpu.has_vfp3()) { |
156 // This implementation also sets the VFP flags if runtime | 157 // This implementation also sets the VFP flags if runtime |
157 // detection of VFP returns true. VFPv3 implies ARMv7, see ARM DDI | 158 // detection of VFP returns true. VFPv3 implies ARMv7, see ARM DDI |
158 // 0406B, page A1-6. | 159 // 0406B, page A1-6. |
159 found_by_runtime_probing_only_ |= | 160 found_by_runtime_probing_only_ |= |
160 static_cast<uint64_t>(1) << VFP3 | | 161 static_cast<uint64_t>(1) << VFP3 | |
161 static_cast<uint64_t>(1) << ARMv7; | 162 static_cast<uint64_t>(1) << ARMv7; |
162 } | 163 } |
163 | 164 |
164 if (!IsSupported(NEON) && FLAG_enable_neon && OS::ArmCpuHasFeature(NEON)) { | 165 if (!IsSupported(NEON) && FLAG_enable_neon && cpu.has_neon()) { |
165 found_by_runtime_probing_only_ |= 1u << NEON; | 166 found_by_runtime_probing_only_ |= 1u << NEON; |
166 } | 167 } |
167 | 168 |
168 if (!IsSupported(ARMv7) && FLAG_enable_armv7 && OS::ArmCpuHasFeature(ARMv7)) { | 169 if (!IsSupported(ARMv7) && FLAG_enable_armv7 && cpu.architecture() >= 7) { |
169 found_by_runtime_probing_only_ |= static_cast<uint64_t>(1) << ARMv7; | 170 found_by_runtime_probing_only_ |= static_cast<uint64_t>(1) << ARMv7; |
170 } | 171 } |
171 | 172 |
172 if (!IsSupported(SUDIV) && FLAG_enable_sudiv && OS::ArmCpuHasFeature(SUDIV)) { | 173 if (!IsSupported(SUDIV) && FLAG_enable_sudiv && cpu.has_idiva()) { |
173 found_by_runtime_probing_only_ |= static_cast<uint64_t>(1) << SUDIV; | 174 found_by_runtime_probing_only_ |= static_cast<uint64_t>(1) << SUDIV; |
174 } | 175 } |
175 | 176 |
176 if (!IsSupported(UNALIGNED_ACCESSES) && FLAG_enable_unaligned_accesses | 177 if (!IsSupported(UNALIGNED_ACCESSES) && FLAG_enable_unaligned_accesses |
177 && OS::ArmCpuHasFeature(ARMv7)) { | 178 && cpu.architecture() >= 7) { |
178 found_by_runtime_probing_only_ |= | 179 found_by_runtime_probing_only_ |= |
179 static_cast<uint64_t>(1) << UNALIGNED_ACCESSES; | 180 static_cast<uint64_t>(1) << UNALIGNED_ACCESSES; |
180 } | 181 } |
181 | 182 |
182 CpuImplementer implementer = OS::GetCpuImplementer(); | 183 // Use movw/movt for QUALCOMM ARMv7 cores. |
183 if (implementer == QUALCOMM_IMPLEMENTER && | 184 if (cpu.implementer() == CPU::QUALCOMM && |
184 FLAG_enable_movw_movt && OS::ArmCpuHasFeature(ARMv7)) { | 185 cpu.architecture() >= 7 && |
| 186 FLAG_enable_movw_movt) { |
185 found_by_runtime_probing_only_ |= | 187 found_by_runtime_probing_only_ |= |
186 static_cast<uint64_t>(1) << MOVW_MOVT_IMMEDIATE_LOADS; | 188 static_cast<uint64_t>(1) << MOVW_MOVT_IMMEDIATE_LOADS; |
187 } | 189 } |
188 | 190 |
189 CpuPart part = OS::GetCpuPart(implementer); | 191 // ARM Cortex-A9 and Cortex-A5 have 32 byte cachelines. |
190 if ((part == CORTEX_A9) || (part == CORTEX_A5)) { | 192 if (cpu.implementer() == CPU::ARM && |
| 193 (cpu.part() == CPU::ARM_CORTEX_A5 || |
| 194 cpu.part() == CPU::ARM_CORTEX_A9)) { |
191 cache_line_size_ = 32; | 195 cache_line_size_ = 32; |
192 } | 196 } |
193 | 197 |
194 if (!IsSupported(VFP32DREGS) && FLAG_enable_32dregs | 198 if (!IsSupported(VFP32DREGS) && FLAG_enable_32dregs && cpu.has_vfp3_d32()) { |
195 && OS::ArmCpuHasFeature(VFP32DREGS)) { | |
196 found_by_runtime_probing_only_ |= static_cast<uint64_t>(1) << VFP32DREGS; | 199 found_by_runtime_probing_only_ |= static_cast<uint64_t>(1) << VFP32DREGS; |
197 } | 200 } |
198 | 201 |
199 supported_ |= found_by_runtime_probing_only_; | 202 supported_ |= found_by_runtime_probing_only_; |
200 #endif | 203 #endif |
201 | 204 |
202 // Assert that VFP3 implies ARMv7. | 205 // Assert that VFP3 implies ARMv7. |
203 ASSERT(!IsSupported(VFP3) || IsSupported(ARMv7)); | 206 ASSERT(!IsSupported(VFP3) || IsSupported(ARMv7)); |
204 } | 207 } |
205 | 208 |
(...skipping 3145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3351 | 3354 |
3352 // Since a constant pool was just emitted, move the check offset forward by | 3355 // Since a constant pool was just emitted, move the check offset forward by |
3353 // the standard interval. | 3356 // the standard interval. |
3354 next_buffer_check_ = pc_offset() + kCheckPoolInterval; | 3357 next_buffer_check_ = pc_offset() + kCheckPoolInterval; |
3355 } | 3358 } |
3356 | 3359 |
3357 | 3360 |
3358 } } // namespace v8::internal | 3361 } } // namespace v8::internal |
3359 | 3362 |
3360 #endif // V8_TARGET_ARCH_ARM | 3363 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |