1 /*
2    bug-2912.c a bug in handling non-spilt register parameters in __z88dk_fastcall functions.
3  */
4 
5 #include <testfwk.h>
6 
7 #if !defined(__SDCC_z80) && !defined(__SDCC_z180) && !defined(__SDCC_r2k) && !defined(__SDCC_r3ka) && !defined(__SDCC_tlcs90) && !defined(__SDCC_ez80_z80)
8 #define __z88dk_fastcall
9 #endif
10 
11 #if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // lack of memory
12 float y, z;
13 
m32_sinf(float x)14 float m32_sinf (float x) __z88dk_fastcall
15 {
16     y = x;
17 }
18 
m32_cosf(float x)19 float m32_cosf (float x) __z88dk_fastcall
20 {
21     z = y;
22 }
23 
m32_tanf(float x)24 float m32_tanf (float x) __z88dk_fastcall
25 {
26     return m32_sinf(x)/m32_cosf(x);
27 }
28 #endif
29 
testBug(void)30 void testBug(void)
31 {
32 #if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // lack of memory
33     volatile float x = 23.0f;
34 
35     m32_tanf(x);
36 
37     ASSERT(y == x);
38     ASSERT(z == x);
39 #endif
40 }
41 
42