diff options
| author | Zhang Boyang <zhangboyang.id@gmail.com> | 2017-09-10 17:02:48 +0800 |
|---|---|---|
| committer | Zhang Boyang <zhangboyang.id@gmail.com> | 2017-09-10 17:03:34 +0800 |
| commit | f406f63a386a04d81626cb4752521de8bffee6b9 (patch) | |
| tree | df46b01cbd3d86aec6db68a02427b01fa19d32b5 /tests/tests2/98_al_ax_extend.c | |
| parent | 978d1ecce0fdd26b42f8ea8f9f157c91168ff03d (diff) | |
| download | tinycc-f406f63a386a04d81626cb4752521de8bffee6b9.tar.gz tinycc-f406f63a386a04d81626cb4752521de8bffee6b9.tar.bz2 | |
Add test case for AL/AX extending problem
Diffstat (limited to 'tests/tests2/98_al_ax_extend.c')
| -rw-r--r-- | tests/tests2/98_al_ax_extend.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/tests2/98_al_ax_extend.c b/tests/tests2/98_al_ax_extend.c new file mode 100644 index 0000000..bcbaa6c --- /dev/null +++ b/tests/tests2/98_al_ax_extend.c @@ -0,0 +1,41 @@ +#include <stdio.h>
+#include <stdlib.h>
+asm (
+ ".text;"
+ ".globl _us;.globl _ss;.globl _uc;.globl _sc;"
+ "_us:;_ss:;_uc:;_sc:;"
+ "movl $0x1234ABCD, %eax;"
+ "ret;"
+);
+
+#if 1
+#define us _us
+#define ss _ss
+#define uc _uc
+#define sc _sc
+#endif
+
+int main()
+{
+ unsigned short us(void);
+ short ss(void);
+ unsigned char uc(void);
+ signed char sc(void);
+
+ unsigned short (*fpus)(void) = us;
+ short (*fpss)(void) = ss;
+ unsigned char (*fpuc)(void) = uc;
+ signed char (*fpsc)(void) = sc;
+
+ printf("%08X %08X\n", us() + 1, fpus() + 1);
+ printf("%08X %08X\n", ss() + 1, fpss() + 1);
+ printf("%08X %08X\n", uc() + 1, fpuc() + 1);
+ printf("%08X %08X\n", sc() + 1, fpsc() + 1);
+ printf("\n");
+ printf("%08X %08X\n", fpus() + 1, us() + 1);
+ printf("%08X %08X\n", fpss() + 1, ss() + 1);
+ printf("%08X %08X\n", fpuc() + 1, uc() + 1);
+ printf("%08X %08X\n", fpsc() + 1, sc() + 1);
+
+ return 0;
+}
|
