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