Revision: 7725
Author:   [email protected]
Date:     Fri Apr 29 05:13:46 2011
Log:      ARM: Enhance the hardfloat support

The "simple" function with inline assembly for detecting hardfloat have been changed to handle compiling without VFP and with thumb.

The SCons setting for the float abi now follows then naming used by the GCC -mfloat-abi and soft has been added.

[email protected]

BUG=none
TEST=none

Review URL: http://codereview.chromium.org//6904126
http://code.google.com/p/v8/source/detail?r=7725

Modified:
 /branches/bleeding_edge/SConstruct
 /branches/bleeding_edge/src/platform-linux.cc

=======================================
--- /branches/bleeding_edge/SConstruct  Fri Apr 29 05:08:33 2011
+++ /branches/bleeding_edge/SConstruct  Fri Apr 29 05:13:46 2011
@@ -1,4 +1,4 @@
-# Copyright 2010 the V8 project authors. All rights reserved.
+# Copyright 2011 the V8 project authors. All rights reserved.
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are
 # met:
@@ -155,13 +155,19 @@
       'unalignedaccesses:off' : {
         'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=0']
       },
-      'armeabi:softfloat' : {
+      'armeabi:soft' : {
+        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
+        'simulator:none': {
+          'CCFLAGS':     ['-mfloat-abi=soft'],
+        }
+      },
+      'armeabi:softfp' : {
         'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
         'simulator:none': {
           'CCFLAGS':     ['-mfloat-abi=softfp'],
         }
       },
-      'armeabi:hardfloat' : {
+      'armeabi:hard' : {
'CPPDEFINES' : ['USE_EABI_HARDFLOAT=1', 'CAN_USE_VFP_INSTRUCTIONS'],
         'simulator:none': {
           'CCFLAGS':     ['-mfloat-abi=hard'],
@@ -476,13 +482,19 @@
     },
     'arch:arm': {
       'LINKFLAGS':   ARM_LINK_FLAGS,
-      'armeabi:softfloat' : {
+      'armeabi:soft' : {
+        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
+        'simulator:none': {
+          'CCFLAGS':     ['-mfloat-abi=soft'],
+        }
+      },
+      'armeabi:softfp' : {
         'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
         'simulator:none': {
           'CCFLAGS':     ['-mfloat-abi=softfp'],
         }
       },
-      'armeabi:hardfloat' : {
+      'armeabi:hard' : {
'CPPDEFINES' : ['USE_EABI_HARDFLOAT=1', 'CAN_USE_VFP_INSTRUCTIONS'],
         'simulator:none': {
           'CCFLAGS':     ['-mfloat-abi=hard'],
@@ -605,12 +617,18 @@
     },
     'arch:arm': {
       'LINKFLAGS':   ARM_LINK_FLAGS,
-      'armeabi:softfloat' : {
+      'armeabi:soft' : {
+        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
+        'simulator:none': {
+          'CCFLAGS':     ['-mfloat-abi=soft'],
+        }
+      },
+      'armeabi:softfp' : {
         'simulator:none': {
           'CCFLAGS':     ['-mfloat-abi=softfp'],
         }
       },
-      'armeabi:hardfloat' : {
+      'armeabi:hard' : {
         'simulator:none': {
           'CCFLAGS':     ['-mfloat-abi=hard'],
         }
@@ -976,8 +994,8 @@
     'help': 'select profile guided optimization variant',
   },
   'armeabi': {
-    'values': ['hardfloat', 'softfloat'],
-    'default': 'softfloat',
+    'values': ['hard', 'softfp', 'soft'],
+    'default': 'softfp',
'help': 'generate calling conventiont according to selected ARM EABI variant'
   },
   'mipsabi': {
=======================================
--- /branches/bleeding_edge/src/platform-linux.cc       Fri Apr 29 01:50:38 2011
+++ /branches/bleeding_edge/src/platform-linux.cc       Fri Apr 29 05:13:46 2011
@@ -1,4 +1,4 @@
-// Copyright 2006-2008 the V8 project authors. All rights reserved.
+// Copyright 2011 the V8 project authors. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 // met:
@@ -205,10 +205,32 @@
 // calling this will return 1.0 and otherwise 0.0.
 static void ArmUsingHardFloatHelper() {
   asm("mov r0, #0");
-  asm("mov r1, #0");
-  asm("movt r1, #16368");
+#if defined(__VFP_FP__) && !defined(__SOFTFP__)
+  // Load 0x3ff00000 into r1 using instructions available in both ARM
+  // and Thumb mode.
+  asm("mov r1, #3");
+  asm("mov r2, #255");
+  asm("lsl r1, r1, #8");
+  asm("orr r1, r1, r2");
+  asm("lsl r1, r1, #16");
+  // For vmov d0, r0, r1 use ARM mode.
+#ifdef __thumb__
+  asm volatile(
+    "@   Enter ARM Mode  \n\t"
+    "    adr r3, 1f      \n\t"
+    "    bx  r3          \n\t"
+    "    .ALIGN 4        \n\t"
+    "    .ARM            \n"
+    "1:  vmov d0, r0, r1 \n\t"
+    "@   Enter THUMB Mode\n\t"
+    "    adr r3, 2f+1    \n\t"
+    "    bx  r3          \n\t"
+    "    .THUMB          \n"
+    "2:                  \n\t");
+#else
   asm("vmov d0, r0, r1");
-  asm("mov r0, #0");
+#endif  // __thumb__
+#endif  // defined(__VFP_FP__) && !defined(__SOFTFP__)
   asm("mov r1, #0");
 }

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to