Date: Fri, 13 Jul 2012 16:58:39 -0400 (EDT) From: idunham@...abit.com To: musl@...ts.openwall.com Subject: Re: mips port working! & remaining issues > On Fri, Jul 13, 2012 at 03:36:03PM +0200, Luca Barbato wrote: >> Currently hardfloat just pass the registers instead of doing some copy >> over in a way or another and it is what people will use. > > That's the hardfloat ABI variant of EABI, but there's also base EABI > that can use hard float behind the scenes (in the soft float > functions) just by calling the __aeabi functions and having them > implemented with hard-float. Although I suppose this usage does not > require the registers to be preserved. > > Now I just need to work out a nice way to conditionally compile > different ASM for each variant. Or I could have setjmp and longjmp > just read a global var with the hardfloat flag in it, and jump over > the float register code if it's false. Opinions on what's best? > Seems to me that the hardfloat flag (while slightly more bloated, because you have code for both options) has room for adding runtime checks: eventually, it might be possible to have that as a static variable (I'm thinking char or something; at least 2 bits would be needed for this method...), and if it is uninitialized (0x00?), try saving the registers or something that will raise a SIGILL on pure softfloat systems; the handler would set it to indicate softfloat (0xFF?), while otherwise it sets it to indicate hardfloat (any intermediate value?). That particular approach might not work (can you install handlers in *jmp safely?), but a runtime check would require using the hardfloat flag. In fact, you could use the flag to specify which FPU is present, which is potentially useful for some other purposes down the road. It would still be possible to set the flag at compile time. Isaac Dunham
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.