]> git.gag.com Git - fw/sdcc/commitdiff
* src/ds390/gen.c (AccAXRrl1, AccAXLrl1): changed to real rotate by 1,
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 25 Apr 2006 21:25:21 +0000 (21:25 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 25 Apr 2006 21:25:21 +0000 (21:25 +0000)
  (AccAXRsh1): added, shift right by 1,
  (AccAXLsh, AccAXRsh, AccAXRshS): updated for AccAXRrl1, AccAXRsh1 and
   AccAXLrl1
* support/regression/tests/rotate.c: use <stdint.h> and enabled ds390

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4127 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/ds390/gen.c
support/regression/tests/rotate.c

index dfc246c0e5d9930b131c0cd26b49bb9c1a48fcd6..2a4975eb9c2f6613e0841c38f209ffc211fead7f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-04-25 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/ds390/gen.c (AccAXRrl1, AccAXLrl1): changed to real rotate by 1,
+         (AccAXRsh1): added, shift right by 1,
+         (AccAXLsh, AccAXRsh, AccAXRshS): updated for AccAXRrl1, AccAXRsh1 and
+          AccAXLrl1
+       * support/regression/tests/rotate.c: use <stdint.h> and enabled ds390
+
 2006-04-25 Bernhard Held <bernhard AT bernhardheld.de>
 
        * src/SDCCast.c (decorateType): partial fix for RFE 1475769,
@@ -28,7 +36,7 @@
        * debugger/mcs51/Makefile.in: build own objects from library sources
        (SLIB, SDCC) in current directory
 
-       * configure, configure.in: renamed --disable-device-lib-build in 
+       * configure, configure.in: renamed --disable-device-lib-build in
        --disable-device-lib; added --enable-doc, the required tools are
        searched by configure; added result message; the toolchain for the
        belonging ports are now only built, if the port is enabled.
 
        * device/examples/main8051.c: deleted - it was removed from CVS
          24.mar.2000 and after that modified 18.feb.2001, so it reappered
-         after the transition to Subversion 
+         after the transition to Subversion
        * src/SDCCalloc.h: deleted - it was removed  from CVS
          3.feb.2001 and after that modified 18.feb.2001, so it reappered
-         after the transition to Subversion 
-       * sim/ucsim/cpu.gif, sim/ucsim/interrupt.gif, sim/ucsim/new.gif, 
+         after the transition to Subversion
+       * sim/ucsim/cpu.gif, sim/ucsim/interrupt.gif, sim/ucsim/new.gif,
          sim/ucsim/serial1.gif, sim/ucsim/serial2.gif,
          sim/ucsim/term_cpuopt.gif, sim/ucsim/timers.gif, sim/ucsim/wins.gif,
          sim/ucsim/post.jpg, sim/ucsim/UCsim.jpg: corrected
index 437ef4a6da7d5022afc1ffb73e5bebaeeb208d5d..4b5871023d6284b451b2c26604f447f583c81066 100644 (file)
@@ -8063,26 +8063,28 @@ movLeft2Result (operand * left, int offl,
 
 #ifdef BETTER_LITERAL_SHIFT
 /*-----------------------------------------------------------------*/
-/* AccAXRrl1 - right rotate c->a:x->c by 1                         */
+/* AccAXRrl1 - right rotate a:x by 1                               */
 /*-----------------------------------------------------------------*/
 static void
 AccAXRrl1 (char *x)
 {
-  emitcode ("rrc", "a");
+  emitcode ("mov", "c,acc.0");
   emitcode ("xch", "a,%s", x);
   emitcode ("rrc", "a");
   emitcode ("xch", "a,%s", x);
+  emitcode ("rrc", "a");
 }
 #endif
 
 #ifdef BETTER_LITERAL_SHIFT
 //REMOVE ME!!!
 /*-----------------------------------------------------------------*/
-/* AccAXLrl1 - left rotate c<-a:x<-c by 1                          */
+/* AccAXLrl1 - left rotate a:x by 1                                */
 /*-----------------------------------------------------------------*/
 static void
 AccAXLrl1 (char *x)
 {
+  emitcode ("mov", "c,acc.7");
   emitcode ("xch", "a,%s", x);
   emitcode ("rlc", "a");
   emitcode ("xch", "a,%s", x);
@@ -8090,6 +8092,20 @@ AccAXLrl1 (char *x)
 }
 #endif
 
+#ifdef BETTER_LITERAL_SHIFT
+/*-----------------------------------------------------------------*/
+/* AccAXRsh1 - right shift c->a:x->c by 1                          */
+/*-----------------------------------------------------------------*/
+static void
+AccAXRsh1 (char *x)
+{
+  emitcode ("rrc", "a");
+  emitcode ("xch", "a,%s", x);
+  emitcode ("rrc", "a");
+  emitcode ("xch", "a,%s", x);
+}
+#endif
+
 #ifdef BETTER_LITERAL_SHIFT
 /*-----------------------------------------------------------------*/
 /* AccAXLsh1 - left shift a:x<-0 by 1                              */
@@ -8124,16 +8140,16 @@ AccAXLsh (char *x, int shCount)
       break;
     case 3:
     case 4:
-    case 5:                     // AAAAABBB:CCCCCDDD
+    case 5:                             // AAAAABBB:CCCCCDDD
 
-      AccRol (shCount);         // BBBAAAAA:CCCCCDDD
+      AccRol (shCount);                 // BBBAAAAA:CCCCCDDD
 
       emitcode ("anl", "a,#!constbyte",
                 SLMask[shCount]);       // BBB00000:CCCCCDDD
 
       emitcode ("xch", "a,%s", x);      // CCCCCDDD:BBB00000
 
-      AccRol (shCount);         // DDDCCCCC:BBB00000
+      AccRol (shCount);                 // DDDCCCCC:BBB00000
 
       emitcode ("xch", "a,%s", x);      // BBB00000:DDDCCCCC
 
@@ -8149,15 +8165,16 @@ AccAXLsh (char *x, int shCount)
       emitcode ("xrl", "a,%s", x);      // BBBCCCCC:DDD00000
 
       break;
-    case 6:                     // AAAAAABB:CCCCCCDD
+    case 6:                             // AAAAAABB:CCCCCCDD
       emitcode ("anl", "a,#!constbyte",
                 SRMask[shCount]);       // 000000BB:CCCCCCDD
+#if 1
+      AccAXRrl1 (x);                    // D000000B:BCCCCCCD
+      AccAXRrl1 (x);                    // DD000000:BBCCCCCC
+      emitcode ("xch", "a,%s", x);      // BBCCCCCC:DD000000
+#else
       emitcode ("mov", "c,acc.0");      // c = B
       emitcode ("xch", "a,%s", x);      // CCCCCCDD:000000BB
-#if 0
-      AccAXRrl1 (x);            // BCCCCCCD:D000000B
-      AccAXRrl1 (x);            // BBCCCCCC:DD000000
-#else
       emitcode("rrc","a");
       emitcode("xch","a,%s", x);
       emitcode("rrc","a");
@@ -8170,16 +8187,14 @@ AccAXLsh (char *x, int shCount)
       emitcode("xch","a,%s", x);
 #endif
       break;
-    case 7:                     // a:x <<= 7
+    case 7:                             // a:x <<= 7
 
       emitcode ("anl", "a,#!constbyte",
                 SRMask[shCount]);       // 0000000B:CCCCCCCD
 
-      emitcode ("mov", "c,acc.0");      // c = B
-
-      emitcode ("xch", "a,%s", x);      // CCCCCCCD:0000000B
+      AccAXRrl1 (x);                    // D0000000:BCCCCCCC
 
-      AccAXRrl1 (x);            // BCCCCCCC:D0000000
+      emitcode ("xch", "a,%s", x);      // BCCCCCCC:D0000000
 
       break;
     default:
@@ -8202,26 +8217,26 @@ AccAXRsh (char *x, int shCount)
       break;
     case 1:
       CLRC;
-      AccAXRrl1 (x);            // 0->a:x
+      AccAXRsh1 (x);                    // 0->a:x
 
       break;
     case 2:
       CLRC;
-      AccAXRrl1 (x);            // 0->a:x
+      AccAXRsh1 (x);                    // 0->a:x
 
       CLRC;
-      AccAXRrl1 (x);            // 0->a:x
+      AccAXRsh1 (x);                    // 0->a:x
 
       break;
     case 3:
     case 4:
-    case 5:                     // AAAAABBB:CCCCCDDD = a:x
+    case 5:                             // AAAAABBB:CCCCCDDD = a:x
 
-      AccRol (8 - shCount);     // BBBAAAAA:DDDCCCCC
+      AccRol (8 - shCount);             // BBBAAAAA:DDDCCCCC
 
       emitcode ("xch", "a,%s", x);      // CCCCCDDD:BBBAAAAA
 
-      AccRol (8 - shCount);     // DDDCCCCC:BBBAAAAA
+      AccRol (8 - shCount);             // DDDCCCCC:BBBAAAAA
 
       emitcode ("anl", "a,#!constbyte",
                 SRMask[shCount]);       // 000CCCCC:BBBAAAAA
@@ -8240,12 +8255,10 @@ AccAXRsh (char *x, int shCount)
       emitcode ("xch", "a,%s", x);      // 000AAAAA:BBBCCCCC
 
       break;
-    case 6:                     // AABBBBBB:CCDDDDDD
-
-      emitcode ("mov", "c,acc.7");
-      AccAXLrl1 (x);            // ABBBBBBC:CDDDDDDA
+    case 6:                             // AABBBBBB:CCDDDDDD
 
-      AccAXLrl1 (x);            // BBBBBBCC:DDDDDDAA
+      AccAXLrl1 (x);                    // ABBBBBBC:CDDDDDDE
+      AccAXLrl1 (x);                    // BBBBBBCC:DDDDDDAA
 
       emitcode ("xch", "a,%s", x);      // DDDDDDAA:BBBBBBCC
 
@@ -8253,11 +8266,9 @@ AccAXRsh (char *x, int shCount)
                 SRMask[shCount]);       // 000000AA:BBBBBBCC
 
       break;
-    case 7:                     // ABBBBBBB:CDDDDDDD
-
-      emitcode ("mov", "c,acc.7");      // c = A
+    case 7:                             // ABBBBBBB:CDDDDDDD
 
-      AccAXLrl1 (x);            // BBBBBBBC:DDDDDDDA
+      AccAXLrl1 (x);                    // BBBBBBBC:DDDDDDDA
 
       emitcode ("xch", "a,%s", x);      // DDDDDDDA:BBBBBBCC
 
@@ -8285,27 +8296,27 @@ AccAXRshS (char *x, int shCount)
       break;
     case 1:
       emitcode ("mov", "c,acc.7");
-      AccAXRrl1 (x);            // s->a:x
+      AccAXRsh1 (x);                    // s->a:x
 
       break;
     case 2:
       emitcode ("mov", "c,acc.7");
-      AccAXRrl1 (x);            // s->a:x
+      AccAXRsh1 (x);                    // s->a:x
 
       emitcode ("mov", "c,acc.7");
-      AccAXRrl1 (x);            // s->a:x
+      AccAXRsh1 (x);                    // s->a:x
 
       break;
     case 3:
     case 4:
-    case 5:                     // AAAAABBB:CCCCCDDD = a:x
+    case 5:                             // AAAAABBB:CCCCCDDD = a:x
 
       tlbl = newiTempLabel (NULL);
-      AccRol (8 - shCount);     // BBBAAAAA:CCCCCDDD
+      AccRol (8 - shCount);             // BBBAAAAA:CCCCCDDD
 
       emitcode ("xch", "a,%s", x);      // CCCCCDDD:BBBAAAAA
 
-      AccRol (8 - shCount);     // DDDCCCCC:BBBAAAAA
+      AccRol (8 - shCount);             // DDDCCCCC:BBBAAAAA
 
       emitcode ("anl", "a,#!constbyte",
                 SRMask[shCount]);       // 000CCCCC:BBBAAAAA
@@ -8328,15 +8339,14 @@ AccAXRshS (char *x, int shCount)
                 (unsigned char) ~SRMask[shCount]);      // 111AAAAA:BBBCCCCC
 
       emitcode ("", "!tlabeldef", tlbl->key + 100);
-      break;                    // SSSSAAAA:BBBCCCCC
+      break;                            // SSSSAAAA:BBBCCCCC
 
-    case 6:                     // AABBBBBB:CCDDDDDD
+    case 6:                             // AABBBBBB:CCDDDDDD
 
       tlbl = newiTempLabel (NULL);
-      emitcode ("mov", "c,acc.7");
-      AccAXLrl1 (x);            // ABBBBBBC:CDDDDDDA
 
-      AccAXLrl1 (x);            // BBBBBBCC:DDDDDDAA
+      AccAXLrl1 (x);                    // ABBBBBBC:CDDDDDDA
+      AccAXLrl1 (x);                    // BBBBBBCC:DDDDDDAA
 
       emitcode ("xch", "a,%s", x);      // DDDDDDAA:BBBBBBCC
 
@@ -8349,12 +8359,11 @@ AccAXRshS (char *x, int shCount)
 
       emitcode ("", "!tlabeldef", tlbl->key + 100);
       break;
-    case 7:                     // ABBBBBBB:CDDDDDDD
+    case 7:                             // ABBBBBBB:CDDDDDDD
 
       tlbl = newiTempLabel (NULL);
-      emitcode ("mov", "c,acc.7");      // c = A
 
-      AccAXLrl1 (x);            // BBBBBBBC:DDDDDDDA
+      AccAXLrl1 (x);                    // BBBBBBBC:DDDDDDDA
 
       emitcode ("xch", "a,%s", x);      // DDDDDDDA:BBBBBBCC
 
index 20dfa6e9c8103bdfecf06d9e84f10a72f82244ee..7f6d92fb1dfe175937944b57032e31aecaa030fa 100644 (file)
@@ -2,13 +2,14 @@
     size: 8,16,32
     msb: 0,1
 */
+#include <stdint.h>
 #include <testfwk.h>
 
 #define SIZE ({size})
 #define MSB ({msb})
 
 #if SIZE == 8
-#  define TYPE unsigned char
+#  define TYPE uint8_t
 #  if MSB
 #    define TEST_VECT 0xa4
 #  else
@@ -17,7 +18,7 @@
 #endif
 
 #if SIZE == 16
-#  define TYPE unsigned int
+#  define TYPE uint16_t
 #  if MSB
 #    define TEST_VECT 0xa8ce
 #  else
 #endif
 
 #if SIZE == 32
-/* long is 64 bits on 64 bit mabhines */
-#  if defined (__alpha__) || defined (__x86_64__)
-#    define TYPE unsigned int
-#  else
-#    define TYPE unsigned long
-#  endif
+#  define TYPE uint32_t
 #  if MSB
 #    define TEST_VECT 0xa8c5a5c6
 #  else
@@ -39,7 +35,6 @@
 #  endif
 #endif
 
-#if !defined __ds390
 TYPE rol1(TYPE s){ return (s<<1) | (s>>(SIZE-1)); }
 TYPE rol2(TYPE s){ return (s<<2) | (s>>(SIZE-2)); }
 TYPE rol3(TYPE s){ return (s<<3) | (s>>(SIZE-3)); }
@@ -47,9 +42,8 @@ TYPE rol4(TYPE s){ return (s<<4) | (s>>(SIZE-4)); }
 TYPE rol5(TYPE s){ return (s<<5) | (s>>(SIZE-5)); }
 TYPE rol6(TYPE s){ return (s<<6) | (s>>(SIZE-6)); }
 TYPE rol7(TYPE s){ return (s<<7) | (s>>(SIZE-7)); }
-#endif
 
-#if SIZE >=16 && !defined __ds390
+#if SIZE >=16
 TYPE rol8 (TYPE s){ return (s<<8 ) | (s>>(SIZE-8 )); }
 TYPE rol9 (TYPE s){ return (s<<9 ) | (s>>(SIZE-9 )); }
 TYPE rol10(TYPE s){ return (s<<10) | (s>>(SIZE-10)); }
@@ -79,7 +73,7 @@ testRol(void)
     TYPE u;
 
     u = t;
-#if !defined __ds390
+
     ASSERT( rol1(u) == (TYPE)((TEST_VECT<<1) | (TEST_VECT>>(SIZE-1))) );
     ASSERT( rol2(u) == (TYPE)((TEST_VECT<<2) | (TEST_VECT>>(SIZE-2))) );
     ASSERT( rol3(u) == (TYPE)((TEST_VECT<<3) | (TEST_VECT>>(SIZE-3))) );
@@ -87,9 +81,8 @@ testRol(void)
     ASSERT( rol5(u) == (TYPE)((TEST_VECT<<5) | (TEST_VECT>>(SIZE-5))) );
     ASSERT( rol6(u) == (TYPE)((TEST_VECT<<6) | (TEST_VECT>>(SIZE-6))) );
     ASSERT( rol7(u) == (TYPE)((TEST_VECT<<7) | (TEST_VECT>>(SIZE-7))) );
-#endif
 
-#if SIZE >=16 && !defined __ds390
+#if SIZE >=16
     ASSERT( rol8 (u) == (TYPE)((TEST_VECT<<8 ) | (TEST_VECT>>(SIZE-8 ))) );
     ASSERT( rol9 (u) == (TYPE)((TEST_VECT<<9 ) | (TEST_VECT>>(SIZE-9 ))) );
     ASSERT( rol10(u) == (TYPE)((TEST_VECT<<10) | (TEST_VECT>>(SIZE-10))) );
@@ -112,4 +105,3 @@ testRol(void)
     ASSERT( rol31(u) == (TYPE)((TEST_VECT<<31) | (TEST_VECT>>(SIZE-31))) );
 #endif
 }
-