summaryrefslogtreecommitdiff
path: root/support/regression/tests/bug-3532.c
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);
}