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

Side by Side Diff: src/platform-linux.cc

Issue 10713009: [v8-dev] Cleanup hardfp ABI detection. This work was triggered by issue 2140.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 8 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 // without vfp. 154 // without vfp.
155 if (CPUInfoContainsString("vfp") && CPUInfoContainsString("neon")) { 155 if (CPUInfoContainsString("vfp") && CPUInfoContainsString("neon")) {
156 return true; 156 return true;
157 } 157 }
158 } 158 }
159 159
160 return false; 160 return false;
161 } 161 }
162 162
163 163
164 // Simple helper function to detect whether the C code is compiled with
165 // option -mfloat-abi=hard. The register d0 is loaded with 1.0 and the register
166 // pair r0, r1 is loaded with 0.0. If -mfloat-abi=hard is pased to GCC then
167 // calling this will return 1.0 and otherwise 0.0.
168 static void ArmUsingHardFloatHelper() {
169 asm("mov r0, #0":::"r0");
170 #if defined(__VFP_FP__) && !defined(__SOFTFP__)
171 // Load 0x3ff00000 into r1 using instructions available in both ARM
172 // and Thumb mode.
173 asm("mov r1, #3":::"r1");
174 asm("mov r2, #255":::"r2");
175 asm("lsl r1, r1, #8":::"r1");
176 asm("orr r1, r1, r2":::"r1");
177 asm("lsl r1, r1, #20":::"r1");
178 // For vmov d0, r0, r1 use ARM mode.
179 #ifdef __thumb__
180 asm volatile(
181 "@ Enter ARM Mode \n\t"
182 " adr r3, 1f \n\t"
183 " bx r3 \n\t"
184 " .ALIGN 4 \n\t"
185 " .ARM \n"
186 "1: vmov d0, r0, r1 \n\t"
187 "@ Enter THUMB Mode\n\t"
188 " adr r3, 2f+1 \n\t"
189 " bx r3 \n\t"
190 " .THUMB \n"
191 "2: \n\t":::"r3");
192 #else
193 asm("vmov d0, r0, r1");
194 #endif // __thumb__
195 #endif // defined(__VFP_FP__) && !defined(__SOFTFP__)
196 asm("mov r1, #0":::"r1");
197 }
198
199
200 bool OS::ArmUsingHardFloat() { 164 bool OS::ArmUsingHardFloat() {
201 // Cast helper function from returning void to returning double. 165 // GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
202 typedef double (*F)(); 166 // the Floating Point ABI used (PCS stands for Procedure Call Standard).
203 F f = FUNCTION_CAST<F>(FUNCTION_ADDR(ArmUsingHardFloatHelper)); 167 // We use these as well as a couple of other defines to statically determine
204 return f() == 1.0; 168 // what FP ABI used.
169 // GCC versions 4.4 and below don't support hard-fp.
170 // GCC versions 4.5 may support hard-fp without defining __ARM_PCS or
171 // __ARM_PCS_VFP.
172
173 #define GCC_VERSION (__GNUC__ * 10000 \
174 + __GNUC_MINOR__ * 100 \
175 + __GNUC_PATCHLEVEL__)
176 #if GCC_VERSION >= 40600
177 #if defined(__ARM_PCS_VFP)
178 return true;
179 #else
180 return false;
181 #endif
182
183 #elif GCC_VERSION < 40500
184 return false;
185
186 #else
187 #if defined(__ARM_PCS_VFP)
188 return true;
189 #elif defined(__ARM_PCS) || defined(__SOFTFP) || !defined(__VFP_FP__)
190 return false;
191 #else
192 #error "Your version of GCC does not report the FP ABI compiled for." \
193 "Please report it on this issue" \
194 "http://code.google.com/p/v8/issues/detail?id=2140"
195
196 #endif
197 #endif
198 #undef GCC_VERSION
205 } 199 }
200
206 #endif // def __arm__ 201 #endif // def __arm__
207 202
208 203
209 #ifdef __mips__ 204 #ifdef __mips__
210 bool OS::MipsCpuHasFeature(CpuFeature feature) { 205 bool OS::MipsCpuHasFeature(CpuFeature feature) {
211 const char* search_string = NULL; 206 const char* search_string = NULL;
212 const char* file_name = "/proc/cpuinfo"; 207 const char* file_name = "/proc/cpuinfo";
213 // Simple detection of FPU at runtime for Linux. 208 // Simple detection of FPU at runtime for Linux.
214 // It is based on /proc/cpuinfo, which reveals hardware configuration 209 // It is based on /proc/cpuinfo, which reveals hardware configuration
215 // to user-space applications. According to MIPS (early 2010), no similar 210 // to user-space applications. According to MIPS (early 2010), no similar
(...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 1279
1285 1280
1286 void Sampler::Stop() { 1281 void Sampler::Stop() {
1287 ASSERT(IsActive()); 1282 ASSERT(IsActive());
1288 SignalSender::RemoveActiveSampler(this); 1283 SignalSender::RemoveActiveSampler(this);
1289 SetActive(false); 1284 SetActive(false);
1290 } 1285 }
1291 1286
1292 1287
1293 } } // namespace v8::internal 1288 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698