blob: 7eebda4394e151c60dd54f7716f62e05ee2e7786 (
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
|
/* bug-3523.c
An issue in handling register arguments of asm functions with __preserves_regs specification.
*/
#include <testfwk.h>
#pragma disable_warning 85
typedef struct tSpriteStruct {
char dummy;
signed char handle;
} SpriteStruct;
SpriteStruct sprites[2];
#if (defined(__SDCC_z80) || defined(__SDCC_z180) || defined(__SDCC_z80n)) && __SDCCCALL == 1
signed char SMS_addSprite (unsigned int y, unsigned int x_tile) __naked __preserves_regs(d,e,iyh,iyl) __sdcccall(1) {
__asm
ld a,l
ret
__endasm;
}
#elif defined(__SDCC_sm83) && __SDCCCALL == 1
signed char SMS_addSprite (unsigned int y, unsigned int x_tile) __naked __preserves_regs(d,e,iyh,iyl) __sdcccall(1) {
__asm
ld a,e
ret
__endasm;
}
#else
signed char SMS_addSprite (unsigned int y, unsigned int x_tile) {
return y;
}
#endif
void f(void) {
sprites[0].handle = SMS_addSprite(0, 0);
sprites[1].handle = SMS_addSprite(0, 0);
}
void
testBug (void) {
sprites[0].handle = -1;
sprites[1].handle = -1;
f();
ASSERT (sprites[0].handle == 0);
ASSERT (sprites[1].handle == 0);
}
|