From de846063927c050cb3dba2b1afff14580913788c Mon Sep 17 00:00:00 2001 From: frief Date: Sat, 4 Dec 2004 11:13:34 +0000 Subject: [PATCH] added (ds390 skips some test cases) git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3600 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- support/regression/tests/rotate.c | 110 ++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 support/regression/tests/rotate.c diff --git a/support/regression/tests/rotate.c b/support/regression/tests/rotate.c new file mode 100644 index 00000000..c1fae86b --- /dev/null +++ b/support/regression/tests/rotate.c @@ -0,0 +1,110 @@ +/** Tests covering rotate operations + size: 8,16,32 + msb: 0,1 +*/ +#include + +#define SIZE ({size}) +#define MSB ({msb}) + +#if SIZE == 8 +# define TYPE unsigned char +# if MSB +# define TEST_VECT 0xa4 +# else +# define TEST_VECT 0x53 +# endif +#endif + +#if SIZE == 16 +# define TYPE unsigned int +# if MSB +# define TEST_VECT 0xa8ce +# else +# define TEST_VECT 0x5357 +# endif +#endif + +#if SIZE == 32 +# define TYPE unsigned long +# if MSB +# define TEST_VECT 0xa8c5a5c6 +# else +# define TEST_VECT 0x55357553 +# 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)); } +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 +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)); } +TYPE rol11(TYPE s){ return (s<<11) | (s>>(SIZE-11)); } +TYPE rol12(TYPE s){ return (s<<12) | (s>>(SIZE-12)); } +TYPE rol13(TYPE s){ return (s<<13) | (s>>(SIZE-13)); } +TYPE rol14(TYPE s){ return (s<<14) | (s>>(SIZE-14)); } +TYPE rol15(TYPE s){ return (s<<15) | (s>>(SIZE-15)); } +#endif + +#if SIZE >=32 +TYPE rol16(TYPE s){ return (s<<16) | (s>>(SIZE-16)); } +TYPE rol17(TYPE s){ return (s<<17) | (s>>(SIZE-17)); } + +TYPE rol23(TYPE s){ return (s<<23) | (s>>(SIZE-23)); } +TYPE rol24(TYPE s){ return (s<<24) | (s>>(SIZE-24)); } +TYPE rol25(TYPE s){ return (s<<25) | (s>>(SIZE-25)); } + +TYPE rol30(TYPE s){ return (s<<30) | (s>>(SIZE-30)); } +TYPE rol31(TYPE s){ return (s<<31) | (s>>(SIZE-31)); } +#endif + +static void +testRol(void) +{ + volatile TYPE t = TEST_VECT; + 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))) ); + ASSERT( rol4(u) == (TYPE)((TEST_VECT<<4) | (TEST_VECT>>(SIZE-4))) ); + 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 + 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))) ); + ASSERT( rol11(u) == (TYPE)((TEST_VECT<<11) | (TEST_VECT>>(SIZE-11))) ); + ASSERT( rol12(u) == (TYPE)((TEST_VECT<<12) | (TEST_VECT>>(SIZE-12))) ); + ASSERT( rol13(u) == (TYPE)((TEST_VECT<<13) | (TEST_VECT>>(SIZE-13))) ); + ASSERT( rol14(u) == (TYPE)((TEST_VECT<<14) | (TEST_VECT>>(SIZE-14))) ); + ASSERT( rol15(u) == (TYPE)((TEST_VECT<<15) | (TEST_VECT>>(SIZE-15))) ); +#endif + +#if SIZE >=32 + ASSERT( rol16(u) == (TYPE)((TEST_VECT<<16) | (TEST_VECT>>(SIZE-16))) ); + ASSERT( rol17(u) == (TYPE)((TEST_VECT<<17) | (TEST_VECT>>(SIZE-17))) ); + + ASSERT( rol23(u) == (TYPE)((TEST_VECT<<23) | (TEST_VECT>>(SIZE-23))) ); + ASSERT( rol24(u) == (TYPE)((TEST_VECT<<24) | (TEST_VECT>>(SIZE-24))) ); + ASSERT( rol25(u) == (TYPE)((TEST_VECT<<25) | (TEST_VECT>>(SIZE-25))) ); + + ASSERT( rol30(u) == (TYPE)((TEST_VECT<<30) | (TEST_VECT>>(SIZE-30))) ); + ASSERT( rol31(u) == (TYPE)((TEST_VECT<<31) | (TEST_VECT>>(SIZE-31))) ); +#endif +} + -- 2.30.2