diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/absolute.c | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/absolute.c')
| -rw-r--r-- | support/regression/tests/absolute.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/support/regression/tests/absolute.c b/support/regression/tests/absolute.c new file mode 100644 index 0000000..e2211a3 --- /dev/null +++ b/support/regression/tests/absolute.c @@ -0,0 +1,87 @@ +/** Absolute addressing tests. + + mem: __code, __xdata +*/ +#include <testfwk.h> +#include <stddef.h> + +#ifdef __SDCC_pic16 +# define ADDRESS(x) (0x02 ## x) +#elif defined(__SDCC_pic14) +# define ADDRESS(x) (0x01 ## x) +#elif defined(__SDCC_stm8) +# define ADDRESS(x) (0x10 ## x) +#else +# define ADDRESS(x) (0xCA ## x) +#endif + +#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // TODO: Make test suitable for pdk +typedef struct +{ + int a, b; +} TestStruct; + +{mem} volatile __at(ADDRESS(BC)) TestStruct TestVar = {0,0}; +{mem} __at(ADDRESS(B7)) char u; +{mem} __at(ADDRESS(B7)) char x = 'x'; +{mem} __at(ADDRESS(B9)) char y = 'y'; +{mem} __at(ADDRESS(B0)) int k = 0x1234; + +char * {mem} __at(ADDRESS(A0)) pc = NULL; + +typedef char *Pointer; +{mem} Pointer __at(ADDRESS(A4)) p = NULL; + +typedef char Array[2]; +{mem} Array __at(ADDRESS(A8)) a = {0}; + +typedef void (* const Function)(void); +{mem} Function __at(ADDRESS(AC)) f = NULL; +#endif + +char z = 'z'; + +void +testAbsolute(void) +{ +#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // TODO: Make test suitable for pdk +#if !defined(PORT_HOST) + static {mem} __at(ADDRESS(B6)) char s = 's'; + char {mem} *pC = (char {mem} *)(ADDRESS(B0)); + int {mem} *pI = (int {mem} *)(ADDRESS(B0)); + + ASSERT(u == 'x'); + ASSERT(pC[7] == 'x'); + ASSERT(pC[9] == 'y'); + ASSERT(pC[6] == 's'); + ASSERT(pI[0] == 0x1234); + + ASSERT((unsigned int)&pc==ADDRESS(A0)); + ASSERT((unsigned int)&p==ADDRESS(A4)); + ASSERT((unsigned int)&a==ADDRESS(A8)); + ASSERT((unsigned int)&f==ADDRESS(AC)); + + //bug 2941749 + ASSERT((*((TestStruct *)&k)).a == 0x1234); +#endif +#endif +} + +#if defined(__SDCC_mcs51) || defined(__SDCC_ds390) +volatile __data __at(0x20) unsigned char Byte0 = 0x00; +volatile __data __at(0x22) unsigned char Byte1 = 0x00; +volatile __bit Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8; +#endif + +void +testAbsBdata(void) +{ +#if defined(__SDCC_mcs51) || defined(__SDCC_ds390) + Bit0 = 1; + ASSERT(Byte0 == 0x00); + Byte0 = 0xFF; + Bit0 = 0; + ASSERT(Byte0 == 0xFF); +#endif +} + |
