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