Began adding float support
[fw/sdcc] / src / z80 / support.c
1 /** @file z80/support.c
2  */
3 #include "z80.h"
4 #include <math.h>
5
6 int convertFloat(Z80_FLOAT *f, double native)
7 {
8     unsigned long mantissa, exponent;
9     double f2;
10     wassert(f);
11     if (native!=0) {
12         f2 = floor(log(fabs(native))/log(2))+1;
13         mantissa = 0x1000000*fabs(native)/exp(f2*log(2));
14         mantissa &= 0xffffff;
15         exponent = f2 + 0x40;
16         if (native<0)
17             exponent |= 0x80;
18     }
19     else {
20         mantissa = 0;
21         exponent = 0;
22     }
23
24     f->w[0] = (WORD)mantissa;
25     f->w[1] = (BYTE)(mantissa>>16);
26     f->w[1] |= exponent << 8;
27     
28     f->b[0] = (BYTE)f->w[0];
29     f->b[1] = (BYTE)(f->w[0]>>8);
30     f->b[2] = (BYTE)f->w[1];
31     f->b[3] = (BYTE)(f->w[1]>>8);
32
33     return 0;
34 }