I mean, with 32 bit, this is not enough

`/*`

* fx2804

* ===================

* integer 28 bits

* fractional 4 bits

*/

#define itofx2804(x) (fixedpoint_t) (((fixedpoint_t) x) << 4)

#define ftofx2804(x) (fixedpoint_t) (((float) x) * (16))

#define dtofx2804(x) (fixedpoint_t) (((double) x) * (16))

#define fx2804toi(x) (signed long) ((fixedpoint_t) x) >> 4)

#define fx2804tof(x) (float) (((fixedpoint_t) x) / (16))

#define fx2804tod(x) (double) (((fixedpoint_t) x) / (16))

#define mulfx2804(x,y) (fixedpoint_t) ((((fixedpoint_t) x) * ((fixedpoint_t) y)) >> (4))

#define divfx2804(x,y) (fixedpoint_t) (((fixedpoint_t) x << (4)) / ((fixedpoint_t) y))

#define fx2804_get_n(x) (fixedpoint_t) (((fixedpoint_t) x) >> 4)

#define fx2804_get_d(x) (fixedpoint_t) (( 1 *((fixedpoint_t) x & (0xf) )) >> 4)

/*

* fx2408

* ===================

* integer 24 bits

* fractional 8 bits

*/

#define itofx2408(x) (fixedpoint_t) (((fixedpoint_t) x) << 8)

#define ftofx2408(x) (fixedpoint_t) (((float) x) * (256))

#define dtofx2408(x) (fixedpoint_t) (((double) x) * (256))

#define fx2408toi(x) (signed long) ((fixedpoint_t) x) >> 8)

#define fx2408tof(x) (float) (((fixedpoint_t) x) / (256))

#define fx2408tod(x) (double) (((fixedpoint_t) x) / (256))

#define mulfx2408(x,y) (fixedpoint_t) ((((fixedpoint_t) x) * ((fixedpoint_t) y)) >> (8))

#define divfx2408(x,y) (fixedpoint_t) (((fixedpoint_t) x << (8)) / ((fixedpoint_t) y))

#define fx2408_get_n(x) (fixedpoint_t) (((fixedpoint_t) x) >> 8)

#define fx2408_get_d(x) (fixedpoint_t) (( 100 *((fixedpoint_t) x & (0xff) )) >> 8)

/*

* fx2012

* ===================

* integer 20 bits

* fractional 12 bits

*/

#define itofx2012(x) (fixedpoint_t) (((fixedpoint_t) x) << 12)

#define ftofx2012(x) (fixedpoint_t) (((float) x) * (4096))

#define dtofx2012(x) (fixedpoint_t) (((double) x) * (4096))

#define fx2012toi(x) (signed long) ((fixedpoint_t) x) >> 12)

#define fx2012tof(x) (float) (((fixedpoint_t) x) / (4096))

#define fx2012tod(x) (double) (((fixedpoint_t) x) / (4096))

#define mulfx2012(x,y) (fixedpoint_t) ((((fixedpoint_t) x) * ((fixedpoint_t) y)) >> (12))

#define divfx2012(x,y) (fixedpoint_t) (((fixedpoint_t) x << (12)) / ((fixedpoint_t) y))

#define fx2012_get_n(x) (fixedpoint_t) (((fixedpoint_t) x) >> 12)

#define fx2012_get_d(x) (fixedpoint_t) (( 10000 *((fixedpoint_t) x & (0xfff) )) >> 12)

/*

* fx1616

* ===================

* integer 16 bits

* fractional 16 bits

*/

#define itofx1616(x) (fixedpoint_t) (((fixedpoint_t) x) << 16)

#define ftofx1616(x) (fixedpoint_t) (((float) x) * (65536))

#define dtofx1616(x) (fixedpoint_t) (((double) x) * (65536))

#define fx1616toi(x) (signed long) ((fixedpoint_t) x) >> 16)

#define fx1616tof(x) (float) (((fixedpoint_t) x) / (65536))

#define fx1616tod(x) (double) (((fixedpoint_t) x) / (65536))

#define mulfx1616(x,y) (fixedpoint_t) ((((fixedpoint_t) x) * ((fixedpoint_t) y)) >> (16))

#define divfx1616(x,y) (fixedpoint_t) (((fixedpoint_t) x << (16)) / ((fixedpoint_t) y))

#define fx1616_get_n(x) (fixedpoint_t) (((fixedpoint_t) x) >> 16)

#define fx1616_get_d(x) (fixedpoint_t) (( 1000000 *((fixedpoint_t) x & (0xffff) )) >> 16)

/*

* fx1220

* ===================

* integer 12 bits

* fractional 20 bits

*/

#define itofx1220(x) (fixedpoint_t) (((fixedpoint_t) x) << 20)

#define ftofx1220(x) (fixedpoint_t) (((float) x) * (1048576))

#define dtofx1220(x) (fixedpoint_t) (((double) x) * (1048576))

#define fx1220toi(x) (signed long) ((fixedpoint_t) x) >> 20)

#define fx1220tof(x) (float) (((fixedpoint_t) x) / (1048576))

#define fx1220tod(x) (double) (((fixedpoint_t) x) / (1048576))

#define mulfx1220(x,y) (fixedpoint_t) ((((fixedpoint_t) x) * ((fixedpoint_t) y)) >> (20))

#define divfx1220(x,y) (fixedpoint_t) (((fixedpoint_t) x << (20)) / ((fixedpoint_t) y))

#define fx1220_get_n(x) (fixedpoint_t) (((fixedpoint_t) x) >> 20)

#define fx1220_get_d(x) (fixedpoint_t) (( 100000000 *((fixedpoint_t) x & (0xfffff) )) >> 20)