blob: bcbfb23991443f1664a20e40c97bd4a95f155c86 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/** 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)
#elif defined(__SDCC_f8)
# define ADDRESS(x) (0x30 ## 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 TestStruct __at(ADDRESS(BC)) TestVar = {0,0};
{mem} char __at(ADDRESS(B7)) u;
{mem} char __at(ADDRESS(B7)) x = 'x';
{mem} char __at(ADDRESS(B9)) y = 'y';
{mem} int __at(ADDRESS(B0)) 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} char __at(ADDRESS(B6)) 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 unsigned char __at(0x20) Byte0 = 0x00;
volatile __data unsigned char __at(0x22) 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
}
|