• jacob.bramley@arm.com's avatar
    A64: Fix a few simulation inaccuracies. · cf43195d
    jacob.bramley@arm.com authored
      - 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
    cf43195d
simulator-a64.h 29.2 KB