1
2 #include "test.h"
3 #include <stdio.h>
4 #include <stdlib.h>
5
6
int_fastcall(int a,int b)7 int int_fastcall(int a,int b) __z88dk_fastcall {
8 assertEqual(3,a);
9 assertEqual(5,b);
10 return 22;
11 }
12
test_int_fastcall()13 void test_int_fastcall() {
14 int ret;
15 ret = int_fastcall(3,5);
16 assertEqual(22,ret);
17 }
18
test_int_fastcall_ptr()19 void test_int_fastcall_ptr() {
20 int (*func)(int x, int y) __z88dk_fastcall = int_fastcall;
21
22 int ret = (func)(3,5);
23 assertEqual(22,ret);
24 }
25
long_fastcall(long a,long b)26 void long_fastcall(long a,long b) __z88dk_fastcall {
27 assertEqual(3,a);
28 assertEqual(5,b);
29 }
30
test_long_fastcall()31 void test_long_fastcall() {
32 long_fastcall(3,5);
33 }
34
test_long_fastcall_ptr()35 void test_long_fastcall_ptr() {
36 void (*func)(long x, long y) __z88dk_fastcall = long_fastcall;
37
38 (func)(3,5);
39 }
40
41 #ifndef __8080__
42 #ifndef __GBZ80__
int_fastcall_ret_longlong(int a,int b)43 long long int_fastcall_ret_longlong(int a,int b) __z88dk_fastcall {
44 assertEqual(3,a);
45 assertEqual(5,b);
46 return a;
47 }
48
test_int_fastcall_ret_longlong()49 void test_int_fastcall_ret_longlong() {
50 long long ret = int_fastcall_ret_longlong(3,5);
51 assertEqual(3, ret);
52 }
53
test_int_fastcall_ret_longlong_ptr()54 void test_int_fastcall_ret_longlong_ptr() {
55 long long (*func)(int x, int y) __z88dk_fastcall = int_fastcall_ret_longlong;
56 long long ret = func(3,5);
57 assertEqual(3, ret);
58 }
59
longlong_fastcall_ret_longlong(long long a,long long b)60 long long longlong_fastcall_ret_longlong(long long a,long long b) __z88dk_fastcall {
61 assertEqual(3,a);
62 assertEqual(5,b);
63 return a;
64 }
65
test_longlong_fastcall_ret_longlong()66 void test_longlong_fastcall_ret_longlong() {
67 long long ret = longlong_fastcall_ret_longlong(3,5);
68 assertEqual(3, ret);
69 }
70
test_longlong_fastcall_ret_longlong_ptr()71 void test_longlong_fastcall_ret_longlong_ptr() {
72 long long (*func)(long long x, long long y) __z88dk_fastcall = longlong_fastcall_ret_longlong;
73 long long ret = func(3,5);
74 assertEqual(3, ret);
75 }
76 #endif
77 #endif
78
79
suite_fastcall()80 int suite_fastcall()
81 {
82 suite_setup("Fastcall Tests");
83 suite_add_test(test_int_fastcall);
84 suite_add_test(test_int_fastcall_ptr);
85 suite_add_test(test_long_fastcall);
86 suite_add_test(test_long_fastcall_ptr);
87 #ifndef __8080__
88 #ifndef __GBZ80__
89 suite_add_test(test_int_fastcall_ret_longlong);
90 suite_add_test(test_int_fastcall_ret_longlong_ptr);
91 suite_add_test(test_longlong_fastcall_ret_longlong);
92 suite_add_test(test_longlong_fastcall_ret_longlong_ptr);
93 #endif
94 #endif
95
96 return suite_run();
97 }
98
99
main(int argc,char * argv[])100 int main(int argc, char *argv[])
101 {
102 int res = 0;
103
104 res += suite_fastcall();
105
106 exit(res);
107 }
108