• Robert Sprowson's avatar
    Add accelerated elementary functions · 0dfe15e5
    Robert Sprowson authored
    In order to reduce reliance on FPA, where we rely on the FPA transcendentals in various places which are subsequently caught and emulated via FPEmulator, expose VFP implementations of these for wider use. They are the base elementary functions corresponding to SIN/COS/TAN/ASN/ACS/ATN/POL/LOG/LGN/EXP/POW and as a bonus an FMA for pre-VFPv4 variants.
    
    Function signatures follow their C standard definition and a generic APCS to allow their use from high level languages.
    
    The FMA implementation comes from OpenLibm, translated by hand from C, and the accompanying test bed checks for bit identical results to ARM's instruction. For that to make sense clearly it needs to be run on something with VFPv4 otherwise it's comparing itself with itself!
    
    When not available in hardware the elementary functions call across to these slower software implementations via a VFused macro.
    
    Makefile: Add the new object files
    VFPSupport: New SWI name, and reason flags
    GetAll.s: Get the maths helpers
    Macros.s: Some helper macros for bit manipulation of FP numbers
    Module.s: New SWI
    SupportCode.s: Error handler to recover R12 and optionally throw an error
    
    Tested with a special version of BASICVFP which replaces the FPA transcendentals with a call to VFPSupport instead.
    
    Version 0.15. Tagged as 'VFPSupport-0_15'
    0dfe15e5
Makefile 3.63 KB