aboutsummaryrefslogtreecommitdiff
path: root/x86_64-gen.c
diff options
context:
space:
mode:
Diffstat (limited to 'x86_64-gen.c')
-rw-r--r--x86_64-gen.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/x86_64-gen.c b/x86_64-gen.c
index c94eb05..7b61b48 100644
--- a/x86_64-gen.c
+++ b/x86_64-gen.c
@@ -752,25 +752,21 @@ void gen_offs_sp(int b, int r, int d)
ST_FUNC int gfunc_sret(CType *vt, int variadic, CType *ret, int *ret_align, int *regsize)
{
int size, align;
- *regsize = 8;
*ret_align = 1; // Never have to re-align return values for x86-64
+ *regsize = 8;
size = type_size(vt, &align);
- ret->ref = NULL;
- if (size > 8) {
+ if (size > 8 || (size & (size - 1)))
return 0;
- } else if (size > 4) {
+ if (size == 8)
ret->t = VT_LLONG;
- return 1;
- } else if (size > 2) {
+ else if (size == 4)
ret->t = VT_INT;
- return 1;
- } else if (size > 1) {
+ else if (size == 2)
ret->t = VT_SHORT;
- return 1;
- } else {
+ else
ret->t = VT_BYTE;
- return 1;
- }
+ ret->ref = NULL;
+ return 1;
}
static int is_sse_float(int t) {