A64: Fix a few simulation inaccuracies.
authorjacob.bramley@arm.com <jacob.bramley@arm.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 14 Mar 2014 10:23:55 +0000 (10:23 +0000)
committerjacob.bramley@arm.com <jacob.bramley@arm.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 14 Mar 2014 10:23:55 +0000 (10:23 +0000)
commitcf43195d4729bbee00b85bec914bf7a6a8798dc5
tree68da9ebb142bf5866b113602f5ee405754e87503
parent11df4b88158c0bd751e7f5b9900e4bcb8665a662
A64: Fix a few simulation inaccuracies.

  - Return the correct NaN when an invalid operation generates a NaN.
  - When one or more operands are NaN, handle them as the processor
    would, prioritising signalling NaNs and making them quiet.
  - Fix fmadd and related instructions:
     - Fnmadd is fma(-n, m, -a), not -fma(n, m, a).
     - Some common libc implementations incorrectly implement fma for
       zero results, so work around these cases.
  - Replace some unreliable tests.

This patch also adds support for Default-NaN mode, since once all the
other work was done, it only required a couple of lines of code.
Default-NaN mode was used for an optimisation in ARM, and it should now
be possible to apply the same optimisation to A64.

BUG=
R=jochen@chromium.org

Review URL: https://codereview.chromium.org/199083005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19927 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
src/a64/constants-a64.h
src/a64/instructions-a64.h
src/a64/simulator-a64.cc
src/a64/simulator-a64.h
src/a64/utils-a64.h
test/cctest/test-assembler-a64.cc