device/lib/pic/libsdcc/fsdiv.c, device/lib/pic/libsdcc/fseq.c,
device/lib/pic/libsdcc/fsgt.c, device/lib/pic/libsdcc/fslt.c,
device/lib/pic/libsdcc/fsmul.c, device/lib/pic/libsdcc/fsneq.c,
device/lib/pic/libsdcc/fssub.c, device/lib/pic/libsdcc/ulong2fs.c,
device/lib/pic16/libsdcc/float/fs2ulong.c,
device/lib/pic16/libsdcc/float/fsadd.c,
device/lib/pic16/libsdcc/float/fsdiv.c,
device/lib/pic16/libsdcc/float/fsmul.c: fixed pic14 libraries, merge
changes from the pic16 port, minor code cleanup
* src/pic/gen.c: implemented genUminusFloat()
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5430
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2009-04-10 Raphael Neider <rneider AT web.de>
+
+ * device/lib/pic/libsdcc/fs2ulong.c, device/lib/pic/libsdcc/fsadd.c,
+ device/lib/pic/libsdcc/fsdiv.c, device/lib/pic/libsdcc/fseq.c,
+ device/lib/pic/libsdcc/fsgt.c, device/lib/pic/libsdcc/fslt.c,
+ device/lib/pic/libsdcc/fsmul.c, device/lib/pic/libsdcc/fsneq.c,
+ device/lib/pic/libsdcc/fssub.c, device/lib/pic/libsdcc/ulong2fs.c,
+ device/lib/pic16/libsdcc/float/fs2ulong.c,
+ device/lib/pic16/libsdcc/float/fsadd.c,
+ device/lib/pic16/libsdcc/float/fsdiv.c,
+ device/lib/pic16/libsdcc/float/fsmul.c: fixed pic14 libraries, merge
+ changes from the pic16 port, minor code cleanup
+ * src/pic/gen.c: implemented genUminusFloat()
+
2009-04-09 Philipp Klaus Krause <pkk AT spth.de>
* device/lib/z80/mod.s,
/* convert float to unsigned long */
unsigned long __fs2ulong (float a1) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1;
+ volatile union float_long fl1;
int exp;
- long l;
+ unsigned long l;
fl1.f = a1;
/* add two floats */
float __fsadd (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
- unsigned long mant1, mant2;
+ volatile union float_long fl1, fl2;
+ long mant1, mant2;
int exp1, exp2;
unsigned long sign = 0;
}
mant1 += mant2;
- if ((long)mant1 < 0)
+ if (mant1 < 0)
{
mant1 = -mant1;
sign = SIGNBIT;
}
/* round off */
- while (0 != (mant1 & 0xff000000)) {
+ while (mant1 & 0xff000000) {
if (mant1&1)
mant1 += 2;
mant1 >>= 1 ;
/* divide two floats */
float __fsdiv (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
long result;
unsigned long mask;
long mant1, mant2;
- int exp ;
+ int exp;
char sign;
fl1.f = a1;
/* compare two floats */
char __fseq (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
fl1.f = a1;
fl2.f = a2;
/* compare two floats */
char __fsgt (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
fl1.f = a1;
fl2.f = a2;
/* compare two floats */
char __fslt (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
fl1.f = a1;
fl2.f = a2;
/* multiply two floats */
float __fsmul (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
unsigned long result;
int exp;
char sign;
result += ((fl1.l & (unsigned long) 0xFF) * (fl2.l >> 8)) >> 8;
result += ((fl2.l & (unsigned long) 0xFF) * (fl1.l >> 8)) >> 8;
- if (0 != (result & SIGNBIT))
+ if (result & SIGNBIT)
{
/* round */
result += 0x80;
/* compare two floats */
char __fsneq (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
fl1.f = a1;
fl2.f = a2;
/* subtract two floats */
float __fssub (float a1, float a2) _FS_REENTRANT
{
- FS_STATIC volatile union float_long fl1, fl2;
+ volatile union float_long fl1, fl2;
fl1.f = a1;
fl2.f = a2;
float __ulong2fs (unsigned long a ) _FS_REENTRANT
{
int exp = 24 + EXCESS;
- FS_STATIC volatile union float_long fl;
+ volatile union float_long fl;
if (!a)
{
long l;
};
-#define volatile
-
/* convert float to unsigned long */
unsigned long __fs2ulong (float a1) _FS_REENTRANT
{
volatile union float_long fl1;
- volatile int exp;
- volatile long l;
+ int exp;
+ unsigned long l;
fl1.f = a1;
/* add two floats */
float __fsadd (float a1, float a2) _FS_REENTRANT
{
- volatile long mant1, mant2;
volatile union float_long fl1, fl2;
- volatile int exp1, exp2;
- volatile unsigned long sign = 0;
+ long mant1, mant2;
+ int exp1, exp2;
+ unsigned long sign = 0;
fl1.f = a1;
fl2.f = a2;
float __fsdiv (float a1, float a2) _FS_REENTRANT
{
volatile union float_long fl1, fl2;
- volatile long result;
- volatile unsigned long mask;
- volatile long mant1, mant2;
- volatile int exp;
+ long result;
+ unsigned long mask;
+ long mant1, mant2;
+ int exp;
char sign;
fl1.f = a1;
float __fsmul (float a1, float a2) _FS_REENTRANT
{
volatile union float_long fl1, fl2;
- volatile unsigned long result;
- volatile int exp;
+ unsigned long result;
+ int exp;
char sign;
fl1.f = a1;
/* for this we just need to flip the
first it then copy the rest in place */
size = AOP_SIZE(op) - 1;
- l = aopGet(AOP(op),3,FALSE,FALSE);
- MOVA(l);
-
- pic14_emitcode("cpl","acc.7");
- aopPut(AOP(result),"a",3);
+ mov2w_op(op, size);
+ emitpcode(POC_XORLW, popGetLit(0x80));
+ movwf(AOP(result), size);
while(size--) {
- aopPut(AOP(result),
- aopGet(AOP(op),offset,FALSE,FALSE),
- offset);
- offset++;
- }
+ mov2w_op(op, size);
+ movwf(AOP(result), size);
+ } // while
}
/*-----------------------------------------------------------------*/