From: tecodev Date: Fri, 10 Apr 2009 00:48:21 +0000 (+0000) Subject: * device/lib/pic/libsdcc/fs2ulong.c, device/lib/pic/libsdcc/fsadd.c, X-Git-Url: https://git.gag.com/?p=fw%2Fsdcc;a=commitdiff_plain;h=a88a9c2fcb469861c47346d3fe35cd403c31a5d8 * 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() git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5430 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index d35835c6..1a46e870 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2009-04-10 Raphael Neider + + * 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 * device/lib/z80/mod.s, diff --git a/device/lib/pic/libsdcc/fs2ulong.c b/device/lib/pic/libsdcc/fs2ulong.c index cf47d4b7..fa90457d 100644 --- a/device/lib/pic/libsdcc/fs2ulong.c +++ b/device/lib/pic/libsdcc/fs2ulong.c @@ -31,9 +31,9 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/fsadd.c b/device/lib/pic/libsdcc/fsadd.c index 56fd5fa9..be83809a 100644 --- a/device/lib/pic/libsdcc/fsadd.c +++ b/device/lib/pic/libsdcc/fsadd.c @@ -29,8 +29,8 @@ union float_long /* 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; @@ -70,7 +70,7 @@ float __fsadd (float a1, float a2) _FS_REENTRANT } mant1 += mant2; - if ((long)mant1 < 0) + if (mant1 < 0) { mant1 = -mant1; sign = SIGNBIT; @@ -85,7 +85,7 @@ float __fsadd (float a1, float a2) _FS_REENTRANT } /* round off */ - while (0 != (mant1 & 0xff000000)) { + while (mant1 & 0xff000000) { if (mant1&1) mant1 += 2; mant1 >>= 1 ; diff --git a/device/lib/pic/libsdcc/fsdiv.c b/device/lib/pic/libsdcc/fsdiv.c index f4a44e6b..de368f1e 100644 --- a/device/lib/pic/libsdcc/fsdiv.c +++ b/device/lib/pic/libsdcc/fsdiv.c @@ -31,11 +31,11 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/fseq.c b/device/lib/pic/libsdcc/fseq.c index cdb2ccbd..4446fc59 100644 --- a/device/lib/pic/libsdcc/fseq.c +++ b/device/lib/pic/libsdcc/fseq.c @@ -31,7 +31,7 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/fsgt.c b/device/lib/pic/libsdcc/fsgt.c index 8306d5bf..04dcdde5 100644 --- a/device/lib/pic/libsdcc/fsgt.c +++ b/device/lib/pic/libsdcc/fsgt.c @@ -31,7 +31,7 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/fslt.c b/device/lib/pic/libsdcc/fslt.c index 1bc71016..4cf5c087 100644 --- a/device/lib/pic/libsdcc/fslt.c +++ b/device/lib/pic/libsdcc/fslt.c @@ -31,7 +31,7 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/fsmul.c b/device/lib/pic/libsdcc/fsmul.c index 34279826..cdca1ab9 100644 --- a/device/lib/pic/libsdcc/fsmul.c +++ b/device/lib/pic/libsdcc/fsmul.c @@ -31,7 +31,7 @@ union float_long /* 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; @@ -55,7 +55,7 @@ float __fsmul (float a1, float a2) _FS_REENTRANT 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; diff --git a/device/lib/pic/libsdcc/fsneq.c b/device/lib/pic/libsdcc/fsneq.c index 48eabe8d..338aa236 100644 --- a/device/lib/pic/libsdcc/fsneq.c +++ b/device/lib/pic/libsdcc/fsneq.c @@ -31,7 +31,7 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/fssub.c b/device/lib/pic/libsdcc/fssub.c index e3c2172b..a69e3326 100644 --- a/device/lib/pic/libsdcc/fssub.c +++ b/device/lib/pic/libsdcc/fssub.c @@ -31,7 +31,7 @@ union float_long /* 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; diff --git a/device/lib/pic/libsdcc/ulong2fs.c b/device/lib/pic/libsdcc/ulong2fs.c index 1f3841c5..7f673c2b 100644 --- a/device/lib/pic/libsdcc/ulong2fs.c +++ b/device/lib/pic/libsdcc/ulong2fs.c @@ -31,7 +31,7 @@ union float_long 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) { diff --git a/device/lib/pic16/libsdcc/float/fs2ulong.c b/device/lib/pic16/libsdcc/float/fs2ulong.c index 0f305558..fa90457d 100644 --- a/device/lib/pic16/libsdcc/float/fs2ulong.c +++ b/device/lib/pic16/libsdcc/float/fs2ulong.c @@ -28,14 +28,12 @@ union float_long 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; diff --git a/device/lib/pic16/libsdcc/float/fsadd.c b/device/lib/pic16/libsdcc/float/fsadd.c index aaf9f60e..be83809a 100644 --- a/device/lib/pic16/libsdcc/float/fsadd.c +++ b/device/lib/pic16/libsdcc/float/fsadd.c @@ -29,10 +29,10 @@ union float_long /* 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; diff --git a/device/lib/pic16/libsdcc/float/fsdiv.c b/device/lib/pic16/libsdcc/float/fsdiv.c index 767f8032..de368f1e 100644 --- a/device/lib/pic16/libsdcc/float/fsdiv.c +++ b/device/lib/pic16/libsdcc/float/fsdiv.c @@ -32,10 +32,10 @@ union float_long 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; diff --git a/device/lib/pic16/libsdcc/float/fsmul.c b/device/lib/pic16/libsdcc/float/fsmul.c index a0813cf0..cdca1ab9 100644 --- a/device/lib/pic16/libsdcc/float/fsmul.c +++ b/device/lib/pic16/libsdcc/float/fsmul.c @@ -32,8 +32,8 @@ union float_long 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; diff --git a/src/pic/gen.c b/src/pic/gen.c index 04b5cf9a..568bd61f 100644 --- a/src/pic/gen.c +++ b/src/pic/gen.c @@ -1628,19 +1628,15 @@ static void genUminusFloat(operand *op,operand *result) /* 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 } /*-----------------------------------------------------------------*/