On 01 May 2006 20:55, DJ Delorie wrote: > At this point, I would like some feedback about the API and how to > cleanly (namespace-wise) add it to libgcc.a.
Um, I know it's a bit bikeshedcolour, and sorry about that, but wouldn't a target-dependent builtin be a better fit to this kind of problem? A subroutine call just to fetch/modify a cpu register seems a bit heavy. Maybe at -Os, given that this is an embedded target, but even so. Otherwise this sort of thing should live in the main C lib, the way fpu_control.h and feset/getround/etc. do, shouldn't it? > #define FR 0x00200000 > #define SZ 0x00100000 > #define PR 0x00080000 > #define DN 0x00040000 > #define RN 0x00000003 > #define RN_N 0 > #define RN_Z 1 A name like 'SZ' is highly likely to collide with a lot of applications if its in the same namespace, isn't it? > extern int __fpscr_values[2]; > void > change_fpscr(int off, int on) > { > int b = get_fpscr(); > off = ~off; > off |= 0x00180000; > on &= ~ 0x00180000; :) Shouldn't that be (SZ | PR) since you went to the effort of defining them anyway? > b &= off; > b |= on; > put_fpscr(b); See, this is all nice simple stuff that would optimise beautifully if it was emitted as inline rtl. > __fpscr_values[0] &= off; > __fpscr_values[0] |= on; > __fpscr_values[1] &= off; > __fpscr_values[1] |= on; Ok, I'll bite. Why are there two of them?! cheers, DaveK -- Can't think of a witty .sigline today....