X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=support%2Fregression%2Ftests%2Fbitfields.c;h=1d3b2f2c2d2dc88f7392ed68f9a8ae3c22312d4a;hb=9e98cf002aeb4e50e7681beb84a25c76358d3aa3;hp=b511baa8bdb46ebb2da5bc1029fdd6e76da62976;hpb=c02fdff56d7f28d5733180fd355e27551d04638f;p=fw%2Fsdcc diff --git a/support/regression/tests/bitfields.c b/support/regression/tests/bitfields.c index b511baa8..1d3b2f2c 100644 --- a/support/regression/tests/bitfields.c +++ b/support/regression/tests/bitfields.c @@ -1,5 +1,7 @@ /** Bitfield tests. + SDCC pic16 port currently does not support bitfields of size > 8, + so they are ifdefed out. */ #include @@ -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 */ }