summaryrefslogtreecommitdiff
path: root/support/regression/tests/z88dk.c
blob: 921bcdb98e2bb9faf2d24985ef752143277d4802 (plain) (blame)
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
/** z88dk.c
*/
#include <testfwk.h>
#include <stdlib.h>

#ifndef __SDCC_pdk14
#if !defined(__SDCC_z80) && !defined(__SDCC_z180) && !defined(__SDCC_r2k) && !defined(__SDCC_r3ka) && !defined(__SDCC_tlcs90) && !defined(__SDCC_ez80_z80)
#define __z88dk_fastcall
#define __z88dk_callee
#endif
#if !defined(__SDCC_z80) && !defined(__SDCC_z180) && !defined(__SDCC_r2k) && !defined(__SDCC_r3ka) && !defined(__SDCC_tlcs90) && !defined(__SDCC_ez80_z80)
#define __smallc
#endif

/* __z88dk_fastcall is supported both on the caller and the callee side */

unsigned char f1(unsigned char c) __z88dk_fastcall
{
	return c + 1;
}

unsigned int f2(unsigned int c) __z88dk_fastcall
{
	return c + 1;
}

#if !defined(__SDCC_hc08) && !defined(__SDCC_s08)
unsigned long int f4(unsigned long int c) __z88dk_fastcall
#else
unsigned long int f4(unsigned long int c) __z88dk_fastcall __reentrant
#endif
{
	return c + 1;
}

unsigned char (*p1)(unsigned char) __z88dk_fastcall;
unsigned int (*p2)(unsigned int) __z88dk_fastcall;
#if !defined(__SDCC_hc08) && !defined(__SDCC_s08)
unsigned long int (*p4)(unsigned long int) __z88dk_fastcall;
#else
unsigned long int (*p4)(unsigned long int) __z88dk_fastcall __reentrant;
#endif

/* __z88dk_callee is currently only supported on the caller side */

void s1(int x, int y) __smallc;

void s2(int x, int y) __z88dk_callee;

void s3(int x, int y) __smallc __z88dk_callee;
#endif

void
testZ88dk(void)
{
#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15)
  ASSERT (f1 (23) == 24);
  ASSERT (f2 (23) == 24);
  ASSERT (f4 (23) == 24);

  p1 = &f1;
  p2 = &f2;
  p4 = &f4;

  ASSERT ((*p1) (23) == 24);
  ASSERT ((*p2) (23) == 24);
  ASSERT ((*p4) (23) == 24);
#endif
}