aboutsummaryrefslogtreecommitdiff
path: root/arm-gen.c
diff options
context:
space:
mode:
authorJames Lyon <jamesly0n@hotmail.com>2013-04-19 00:40:48 +0100
committerJames Lyon <jamesly0n@hotmail.com>2013-04-19 00:46:49 +0100
commit55ea6d3fc175b0e01e2e946ca9b319c1fbe8aa67 (patch)
tree7f541d052ececf742853561cd1d8099635ee5ae8 /arm-gen.c
parent3f1d9000071eeebe315795079c3adbe4022d6d19 (diff)
downloadtinycc-55ea6d3fc175b0e01e2e946ca9b319c1fbe8aa67.tar.gz
tinycc-55ea6d3fc175b0e01e2e946ca9b319c1fbe8aa67.tar.bz2
x86-64 ABI fixes.
abitest now passes; however test1-3 fail in init_test. All other tests pass. I need to re-test Win32 and Linux-x86. I've added a dummy implementation of gfunc_sret to c67-gen.c so it should now compile, and I think it should behave as before I created gfunc_sret.
Diffstat (limited to 'arm-gen.c')
-rw-r--r--arm-gen.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/arm-gen.c b/arm-gen.c
index 03262aa..0f70062 100644
--- a/arm-gen.c
+++ b/arm-gen.c
@@ -801,16 +801,21 @@ int assign_fpreg(struct avail_regs *avregs, int align, int size)
#endif
/* Return 1 if this function returns via an sret pointer, 0 otherwise */
-ST_FUNC int gfunc_sret(CType *vt, CType *ret, int *align) {
+ST_FUNC int gfunc_sret(CType *vt, CType *ret, int *ret_align) {
+#if TCC_ARM_EABI
+ int size, align;
size = type_size(vt, &align);
if (size > 4) {
return 1;
} else {
- *align = 4;
+ *ret_align = 4;
ret->ref = NULL;
ret->t = VT_INT;
+ return 0;
}
- return 0;
+#else
+ return 1;
+#endif
}
/* Generate function call. The function address is pushed first, then