diff mbox

[1/2] python: fix double format detection

Message ID 20161109092508.4503-1-jezz@sysmic.org
State Accepted
Headers show

Commit Message

Jérôme Pouiller Nov. 9, 2016, 9:25 a.m. UTC
Python is not able to detect if compiler double representation is
compliant with IEE754:

  checking whether C doubles are little-endian IEEE 754 binary64... no
  checking whether C doubles are big-endian IEEE 754 binary64... no
  checking whether C doubles are ARM mixed-endian IEEE 754 binary64... no

Accordingly 'legacy' mode isused. It is possible to check this at runtime by
check if 'sys.float_repr_style' contains 'short' or 'legacy'. Calculus
correctness is not garanteed with 'legacy'.

Problem is better described here:

  http://stackoverflow.com/questions/29920294/what-causes-pythons-float-repr-style-to-use-legacy
  https://bugs.python.org/issue7117

However, all gcc architecture use a representation compliant with IEE754. So,
we can enable it unconditionnaly.

Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
---
 package/python/python.mk | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Baruch Siach Nov. 9, 2016, 9:33 a.m. UTC | #1
Hi Jérôme,

On Wed, Nov 09, 2016 at 10:25:07AM +0100, Jérôme Pouiller wrote:
> Python is not able to detect if compiler double representation is
> compliant with IEE754:
> 
>   checking whether C doubles are little-endian IEEE 754 binary64... no
>   checking whether C doubles are big-endian IEEE 754 binary64... no
>   checking whether C doubles are ARM mixed-endian IEEE 754 binary64... no
> 
> Accordingly 'legacy' mode isused. It is possible to check this at runtime by
> check if 'sys.float_repr_style' contains 'short' or 'legacy'. Calculus
> correctness is not garanteed with 'legacy'.
> 
> Problem is better described here:
> 
>   http://stackoverflow.com/questions/29920294/what-causes-pythons-float-repr-style-to-use-legacy
>   https://bugs.python.org/issue7117
> 
> However, all gcc architecture use a representation compliant with IEE754. So,
> we can enable it unconditionnaly.
> 
> Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
> ---
>  package/python/python.mk | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/package/python/python.mk b/package/python/python.mk
> index cc65376..0191d59 100644
> --- a/package/python/python.mk
> +++ b/package/python/python.mk
> @@ -140,6 +140,13 @@ PYTHON_CONF_ENV += \
>  	ac_cv_prog_HAS_HG=/bin/false \
>  	ac_cv_prog_SVNVERSION=/bin/false
>  
> +# GCC is always complient with IEEE754
> +ifeq ($(call qstrip,$(BR2_ENDIAN)),LITTLE)

I think that

  ifeq ($(BR2_ENDIAN),"LITTLE")

is more readable. That's what most other <pkg>.mk files do.

> +PYTHON_CONF_ENV += ac_cv_little_endian_double=yes
> +else
> +PYTHON_CONF_ENV += ac_cv_big_endian_double=yes
> +endif

baruch
Thomas Petazzoni Nov. 9, 2016, 9:17 p.m. UTC | #2
Hello,

On Wed,  9 Nov 2016 10:25:07 +0100, Jérôme Pouiller wrote:
> Python is not able to detect if compiler double representation is
> compliant with IEE754:
> 
>   checking whether C doubles are little-endian IEEE 754 binary64... no
>   checking whether C doubles are big-endian IEEE 754 binary64... no
>   checking whether C doubles are ARM mixed-endian IEEE 754 binary64... no
> 
> Accordingly 'legacy' mode isused. It is possible to check this at runtime by
> check if 'sys.float_repr_style' contains 'short' or 'legacy'. Calculus
> correctness is not garanteed with 'legacy'.
> 
> Problem is better described here:
> 
>   http://stackoverflow.com/questions/29920294/what-causes-pythons-float-repr-style-to-use-legacy
>   https://bugs.python.org/issue7117
> 
> However, all gcc architecture use a representation compliant with IEE754. So,
> we can enable it unconditionnaly.
> 
> Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
> ---
>  package/python/python.mk | 7 +++++++
>  1 file changed, 7 insertions(+)

I've applied both patches, after taking into account the comment from
Baruch. Also, I verified that even ARM is not "mixed endian", by
running the test case under Qemu ARM. It seems like "mixed endian" was
only for the old ARM ABI, which we no longer care about.

Thanks for those patches!

Thomas
diff mbox

Patch

diff --git a/package/python/python.mk b/package/python/python.mk
index cc65376..0191d59 100644
--- a/package/python/python.mk
+++ b/package/python/python.mk
@@ -140,6 +140,13 @@  PYTHON_CONF_ENV += \
 	ac_cv_prog_HAS_HG=/bin/false \
 	ac_cv_prog_SVNVERSION=/bin/false
 
+# GCC is always complient with IEEE754
+ifeq ($(call qstrip,$(BR2_ENDIAN)),LITTLE)
+PYTHON_CONF_ENV += ac_cv_little_endian_double=yes
+else
+PYTHON_CONF_ENV += ac_cv_big_endian_double=yes
+endif
+
 PYTHON_CONF_OPTS += \
 	--without-cxx-main 	\
 	--without-doc-strings	\