* src/ds390/gen.c (emitcode): don't change properties of previous lines,
[fw/sdcc] / support / regression / tests / bitfields.c
index b511baa8bdb46ebb2da5bc1029fdd6e76da62976..1d3b2f2c2d2dc88f7392ed68f9a8ae3c22312d4a 100644 (file)
@@ -1,5 +1,7 @@
 /** Bitfield tests.
 
+  SDCC pic16 port currently does not support bitfields of size > 8,
+  so they are ifdefed out.
 */
 #include <testfwk.h>
 
@@ -8,6 +10,7 @@ struct {
   char c3_5 : 5;
 } c_bf;
 
+#if !defined(SDCC_pic16)
 struct {
   int i0_7 : 7;
   int i7_9 : 9;
@@ -32,6 +35,7 @@ struct {
   unsigned int b8 : 1;
   unsigned int b9 : 1;
 } sb_bf;
+#endif  /* !SDCC_pic16 */
 
 struct {
   unsigned int b0 : 1;
@@ -56,6 +60,7 @@ struct {
   unsigned int b1 : 1;
 } size2a_bf;
 
+#if !defined(SDCC_pic16)
 struct {
   unsigned int b0 : 1;
   unsigned int b1 : 1;
@@ -90,7 +95,7 @@ struct {
   signed int s7_1  : 1;
   signed int s8_9  : 9;
 } s_bf;
-
+#endif  /* !SDCC_pic16 */
 
 void
 testBitfieldSizeof(void)
@@ -102,12 +107,13 @@ testBitfieldSizeof(void)
   ASSERT( sizeof(size1a_bf) >= 1);
   ASSERT( sizeof(size1b_bf) >= 1);
   ASSERT( sizeof(size1c_bf) >= 1);
+#if !defined(SDCC_pic16)
   ASSERT( sizeof(size2b_bf) >= 2);
   ASSERT( sizeof(size2c_bf) >= 2);
   ASSERT( sizeof(size2d_bf) >= 2);
   ASSERT( sizeof(size3a_bf) >= 2);
   ASSERT( sizeof(size1a_bf) <= sizeof(size1b_bf));
-
+#endif  /* !SDCC_pic16 */
   /* Some SDCC specific assertions. SDCC uses 8 bit storage units.
      Bitfields that are less than 8 bits, but would (due to earlier
      bitfield declarations) span a storage unit boundary are
@@ -120,10 +126,12 @@ testBitfieldSizeof(void)
   ASSERT( sizeof(size1b_bf) == 1);
   ASSERT( sizeof(size1c_bf) == 1);
   ASSERT( sizeof(size2a_bf) == 2);
+#if !defined(SDCC_pic16)
   ASSERT( sizeof(size2b_bf) == 2);
   ASSERT( sizeof(size2c_bf) == 2);
   ASSERT( sizeof(size2d_bf) == 2);
   ASSERT( sizeof(size3a_bf) == 3);
+#endif  /* !SDCC_pic16 */
 #endif
 }
 
@@ -131,16 +139,17 @@ testBitfieldSizeof(void)
 void
 testBitfieldsSingleBitLiteral(void)
 {
-  size2b_bf.b0 = 0; 
-  size2b_bf.b1 = 0; 
-  size2b_bf.b2 = 0; 
-  size2b_bf.b3 = 0; 
-  size2b_bf.b4 = 0; 
-  size2b_bf.b5 = 0; 
-  size2b_bf.b6 = 0; 
-  size2b_bf.b7 = 0; 
-  size2b_bf.b8 = 0; 
-  size2b_bf.b9 = 0; 
+#if !defined(SDCC_pic16)
+  size2b_bf.b0 = 0;
+  size2b_bf.b1 = 0;
+  size2b_bf.b2 = 0;
+  size2b_bf.b3 = 0;
+  size2b_bf.b4 = 0;
+  size2b_bf.b5 = 0;
+  size2b_bf.b6 = 0;
+  size2b_bf.b7 = 0;
+  size2b_bf.b8 = 0;
+  size2b_bf.b9 = 0;
 
   /* make sure modulo 2 truncation works */
   size2b_bf.b0 = 0x3fe;
@@ -178,24 +187,26 @@ testBitfieldsSingleBitLiteral(void)
   ASSERT(size2b_bf.b7==0);
   ASSERT(size2b_bf.b8==0);
   ASSERT(size2b_bf.b9==1);
+#endif  /* !SDCC_pic16 */
 }
 
 void
 testBitfieldsSingleBit(void)
 {
+#if !defined(SDCC_pic16)
   volatile unsigned char c;
 
   c = 0;
-  size2b_bf.b0 = c; 
-  size2b_bf.b1 = c; 
-  size2b_bf.b2 = c; 
-  size2b_bf.b3 = c; 
-  size2b_bf.b4 = c; 
-  size2b_bf.b5 = c; 
-  size2b_bf.b6 = c; 
-  size2b_bf.b7 = c; 
-  size2b_bf.b8 = c; 
-  size2b_bf.b9 = c; 
+  size2b_bf.b0 = c;
+  size2b_bf.b1 = c;
+  size2b_bf.b2 = c;
+  size2b_bf.b3 = c;
+  size2b_bf.b4 = c;
+  size2b_bf.b5 = c;
+  size2b_bf.b6 = c;
+  size2b_bf.b7 = c;
+  size2b_bf.b8 = c;
+  size2b_bf.b9 = c;
 
   /* make sure modulo 2 truncation works */
   c = 0xfe;
@@ -235,11 +246,13 @@ testBitfieldsSingleBit(void)
   ASSERT(size2b_bf.b7==0);
   ASSERT(size2b_bf.b8==0);
   ASSERT(size2b_bf.b9==1);
+#endif  /* !SDCC_pic16 */
 }
 
 void
 testBitfieldsMultibitLiteral(void)
 {
+#if !defined(SDCC_pic16)
   size2c_bf.b0 = 0xff; /* should truncate to 0x0f */
   size2c_bf.b1 = 0;
   ASSERT(size2c_bf.b0==0x0f);
@@ -279,15 +292,17 @@ testBitfieldsMultibitLiteral(void)
   size2d_bf.b1 = 5;
   ASSERT(size2d_bf.b0==0x0a46);
   ASSERT(size2d_bf.b1==5);
+#endif  /* !SDCC_pic16 */
 }
 
 void
 testBitfieldsMultibit(void)
 {
+#if !defined(SDCC_pic16)
   volatile int allones = 0xffff;
   volatile int zero = 0;
   volatile int x;
-  
+
   size2c_bf.b0 = allones;      /* should truncate to 0x0f */
   size2c_bf.b1 = zero;
   ASSERT(size2c_bf.b0==0x0f);
@@ -321,6 +336,7 @@ testBitfieldsMultibit(void)
   size2d_bf.b1 = x;
   ASSERT(size2d_bf.b0==0x0a46);
   ASSERT(size2d_bf.b1==5);
+#endif  /* !SDCC_pic16 */
 }
 
 void
@@ -328,7 +344,12 @@ testBitfields(void)
 {
   c_bf.c0_3 = 2;
   c_bf.c3_5 = 3;
+#if defined(PORT_HOST) && (defined(__ppc__) || defined(__PPC__))
+  /* bitfields on powerpc architecture are allocated from left to right */
+  ASSERT(*(char *)(&c_bf) == ((2<<(8-3)) + 3) );
+#else
   ASSERT(*(char *)(&c_bf) == (2 + (3<<3)) );
+#endif
 
 #if 0 // not yet
   i_bf.i0_7 = 23;
@@ -345,7 +366,7 @@ testBitfields(void)
 void
 testSignedBitfields(void)
 {
-#if !defined(SDCC_hc08) && !defined(SDCC_z80) && !defined(SDCC_gbz80)
+#if !defined(SDCC_pic16)
   s_bf.s0_7 =   0xf0;
   s_bf.s7_1 =      1;
   s_bf.s8_9 = 0xfff8;
@@ -364,5 +385,5 @@ testSignedBitfields(void)
   ASSERT(s_bf.s8_9 == 0xff);
   ASSERT(s_bf.s0_7 > 0);
   ASSERT(s_bf.s8_9 > 0);
-#endif
+#endif  /* !SDCC_pic16 */
 }