From cd1cb40a9751d15585d37012f28603dc13c0381c Mon Sep 17 00:00:00 2001 From: MaartenBrock Date: Tue, 25 Apr 2006 21:25:21 +0000 Subject: [PATCH] * 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 and enabled ds390 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4127 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 16 +++-- src/ds390/gen.c | 99 +++++++++++++++++-------------- support/regression/tests/rotate.c | 22 +++---- 3 files changed, 73 insertions(+), 64 deletions(-) diff --git a/ChangeLog b/ChangeLog index dfc246c0..2a4975eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-04-25 Maarten Brock + + * 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 and enabled ds390 + 2006-04-25 Bernhard Held * 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. @@ -72,11 +80,11 @@ * 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 diff --git a/src/ds390/gen.c b/src/ds390/gen.c index 437ef4a6..4b587102 100644 --- a/src/ds390/gen.c +++ b/src/ds390/gen.c @@ -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 diff --git a/support/regression/tests/rotate.c b/support/regression/tests/rotate.c index 20dfa6e9..7f6d92fb 100644 --- a/support/regression/tests/rotate.c +++ b/support/regression/tests/rotate.c @@ -2,13 +2,14 @@ size: 8,16,32 msb: 0,1 */ +#include #include #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 @@ -26,12 +27,7 @@ #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 } - -- 2.30.2