gcc: update Maverick Crunch support to 20090908 version
authorMarcin Juszkiewicz <marcin@juszkiewicz.com.pl>
Wed, 30 Sep 2009 13:06:17 +0000 (15:06 +0200)
committerMarcin Juszkiewicz <marcin@juszkiewicz.com.pl>
Wed, 30 Sep 2009 17:06:36 +0000 (19:06 +0200)
commita261b5ea923854b9a84f91cec0177ff57e905c98
tree1d2563f24426102c3d6f83873349e79f288f0db3
parentfe2fa19a4a00b3c7778933c476d57ca46c303c61
gcc: update Maverick Crunch support to 20090908 version

From Martin W. Guy page http://martinwguy.co.uk/martin/crunch/

The 20090908 version

* performs single and double precision floating point in the FPU (add, sub,
  mul, neg, abs, cmp and conversions from single and double precision floats
  to integral types).

* by default, disables the floating point cfnegs and cfnegd instructions,
  which fail to convert 0 to -0 as they should. You can re-enable them with
  the -funsafe-math-optimizations flag, which is one of those enabled
  by -ffast-math (gcc-4.3 has an even more specific -fno-signed-zeros flag,
  which is one of those enabled by -funsafe-math-optimizations).

* by default, does not respect denormalised values, so the smallest
  representable values are ±2-126 for floats and ±2-1022 for doubles instead of
  the usual ±2-149 and ±2-1074.

* has a -mieee flag, which enables handling of denormalized values by disabling
  all the buggy instructions. With this, floating point addition, subtraction,
  negation, absolute value and conversion between floats and integer types are
  performed in software, leaving only floating point multiplication and
  comparison performed in hardware.

* has no negative impact on regular ARM code generation.

* always works round the hardware bugs in the FPU and no longer has the
  -mcirrus-fix-invalid-insns flag since chip development has stopped and all
  existing silicon has the same bugs except for the original revision D0 which
  is not supported.

* passes GCC's IEEE testsuite except for the one specific test that checks for
  correct handling of denormalized values. With -mieee it passes all the math
  tests.

* passes all other testsuites that I've tried (see below) including the
  stringent "paranoia" floating point IEEE conformance test.

* produces the fastest Maverick code yet: 5.94 MFLOPS according to FFTW's
  tests/bench -opatient cf1024 benchmark and LAME takes 2m25 to encode that
  30-second WAV file on a 200MHz EP9307 (compared to 5.4 and 2m30 for the
  futaris patches for 4.1.2 and 4.2.0).

* does not use the FPU's buggy 64-bit integer instructions unless the new
  -mcirrus-di flag is given. Programs that do a lot of 64-bit integer
  operations (add, sub, mul, neg, abs, shifts) may be faster using this, but
  rigorous testing will be necessary to ensure that bad code is not being
  produced. OpenSSL's testsuite fails if this is enabled. There is more detail
  at the head of the arm-crunch-cirrus-di-flag.patch file.

Known bugs

* C: Values held in Maverick registers are not restored when performing a
  setjmp/longjmp pair. There is a fix to glibc for this in a message to the
  linux-cirrus mailing list.

* C++: Similarly, exception unwinding (performing a throw back to a catch block
  in a different function) does not restore floating point and 64-bit values
  held in Maverick registers.

* C++: Some C++ files will not compile, saying
      ".save {mv8}" Error: register expected
      although the same files will compile with optimization disabled.
      There is a patch to make binutils recognize these registers in the .save
      macro in a message to the linux-cirrus mailing list.
67 files changed:
recipes/gcc/gcc-4.2.4.inc
recipes/gcc/gcc-4.2.4/arm-crunch-32bit-disable.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-64bit-disable-4.2.0.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-64bit-disable0.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-and-or.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-cfcvt64-disable.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-cfcvtds-disable.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-cirrus-bugfixes.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-compare-geu.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch-z-eq [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-compare.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-compare.patch-z-eq [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-dominance.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754-div.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-eabi.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-floatsi-disable-single.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-floatsi-disable.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-floatunsidf.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-fp_consts.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-neg.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-neg2.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-offset.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-predicates.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-predicates2.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-predicates3.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-saveregs.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-scc.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-truncsi-disable-new.patch [deleted file]
recipes/gcc/gcc-4.2.4/arm-crunch-truncsi-disable.patch [deleted file]
recipes/gcc/gcc-4.2.4/ep93xx/README [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/URL [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-20000320.patch [moved from recipes/gcc/gcc-4.2.4/arm-crunch-20000320.patch with 51% similarity]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-arm_dbx_register_number.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-ccmav-mode.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-cfcpy-with-cfsh64.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-cftruncd32-attr.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-cirrus-di-flag.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-disable-cmpdi.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-disable-floatsi.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-eabi-ieee754-endian-littleword-littlebyte.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-eabi-mvf0-scratch-ieee754.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-fix-64bit-const-offsets.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-fix-cirrus-reorg7.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-floatsi-no-scratch.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-fp_consts.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-mieee.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-movsf-movdf-Uy.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-neg-enable.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-neg-protect.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-pipeline.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-readme.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-repair-truncxfsi.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-saveregs.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-crunch-scratch.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-prologue_use-length.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/arm-size-bugfix.patch [new file with mode: 0644]
recipes/gcc/gcc-4.2.4/ep93xx/series [new file with mode: 0644]
recipes/gcc/gcc-4.3.3.inc
recipes/gcc/gcc-4.3.3/ep93xx/arm-crunch-disable-floatsi.patch [new file with mode: 0644]
recipes/gcc/gcc-4.3.3/ep93xx/arm-crunch-fix-cirrus-reorg7.patch [moved from recipes/gcc/gcc-4.3.4/ep93xx/arm-crunch-fix-cirrus-reorg5.patch with 88% similarity]
recipes/gcc/gcc-4.3.3/ep93xx/series
recipes/gcc/gcc-4.3.4.inc
recipes/gcc/gcc-4.3.4/ep93xx/arm-crunch-disable-floatsi.patch [new file with mode: 0644]
recipes/gcc/gcc-4.3.4/ep93xx/arm-crunch-fix-cirrus-reorg7.patch [moved from recipes/gcc/gcc-4.3.3/ep93xx/arm-crunch-fix-cirrus-reorg5.patch with 88% similarity]
recipes/gcc/gcc-4.3.4/ep93xx/series