Port-vax archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: VAX sin/cos/atan2 vs polyd (Was: Does anyone have a netbsd-5 or earlier VAX to hand?)



On May 27, 2012, at 10:04 AM, David Brownlee wrote:

> Question first, rationale later :)
> 
> Question: Does anyone know of an VAX assembler implementation of
> sin/cos and atan2 which avoids the use of POLY?
> 
> Rationale:
> 
> Thanks to those who ran the sintest program on their VAXen, it
> looks like the issue was VAX CPU architecture specific rather than
> OS revision (I knew POLY rang a bell somewhere :)
> 
> The POLY instruction was dropped in Rigel and later CPU variants,
> which is a problem for NetBSD/vax's use of them in
> lib/libm/arch/vax/{n_argred.S,n_atan2.S} - source at
> http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libm/arch/vax/
> 
> There are a couple of obvious options to fix this:
> a) Recode the assembly in those routines to avoid use of POLYD
> b) Switch to a plain C implementation
> 
> (see question at top of email :)
> 
> Combined with a side option of:
> i) Doing one of the above unconditionally
> ii) Having runtime logic to switch versions based on CPU implementation,
>    potentially via an ld.so.conf extra library as used by i386 & sparc
>    to conditionally load arch specific overlays
> 
> Assuming someone has an alternative implementation the side option
> only becomes relevant if it is appreciably slower than the current
> code on earlier VAX CPUs which implement POLY...

If you look at <vax/asm.h> should see gas macros for expanding polyd
and thereby avoiding the instructions.


Home | Main Index | Thread Index | Old Index