diff options
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/fix_linaro_106872.patch')
-rw-r--r-- | toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/fix_linaro_106872.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/fix_linaro_106872.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/fix_linaro_106872.patch new file mode 100644 index 0000000000..ef33afff70 --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/fix_linaro_106872.patch @@ -0,0 +1,45 @@ +Index: gcc-4_6-branch/gcc/config/arm/arm.c +=================================================================== +--- gcc-4_6-branch.orig/gcc/config/arm/arm.c 2012-03-05 17:14:09.901129286 -0800 ++++ gcc-4_6-branch/gcc/config/arm/arm.c 2012-03-05 17:18:23.061141606 -0800 +@@ -17525,6 +17525,13 @@ + } + return; + ++ case 'v': ++ { ++ gcc_assert (GET_CODE (x) == CONST_DOUBLE); ++ fprintf (stream, "#%d", vfp3_const_double_for_fract_bits (x)); ++ return; ++ } ++ + /* Register specifier for vld1.16/vst1.16. Translate the S register + number into a D register number and element index. */ + case 'z': +@@ -24925,4 +24932,26 @@ + return 4; + } + ++int ++vfp3_const_double_for_fract_bits (rtx operand) ++{ ++ REAL_VALUE_TYPE r0; ++ ++ if (GET_CODE (operand) != CONST_DOUBLE) ++ return 0; ++ ++ REAL_VALUE_FROM_CONST_DOUBLE (r0, operand); ++ if (exact_real_inverse (DFmode, &r0)) ++ { ++ if (exact_real_truncate (DFmode, &r0)) ++ { ++ HOST_WIDE_INT value = real_to_integer (&r0); ++ value = value & 0xffffffff; ++ if ((value != 0) && ( (value & (value - 1)) == 0)) ++ return int_log2 (value); ++ } ++ } ++ return 0; ++} ++ + #include "gt-arm.h" |