64-bit tests now pass (well, nearly).
tcctest1-3 fail, but this appears to be due to bugs in GCC rather than TCC (from manual inspection of the output).
This commit is contained in:
28
tccgen.c
28
tccgen.c
@ -851,7 +851,13 @@ ST_FUNC int gv(int rc)
|
||||
t = vtop->type.t;
|
||||
t1 = t;
|
||||
/* compute memory access type */
|
||||
if (vtop->r & VT_LVAL_BYTE)
|
||||
if (vtop->r & VT_REF)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
t = VT_PTR;
|
||||
#else
|
||||
t = VT_INT;
|
||||
#endif
|
||||
else if (vtop->r & VT_LVAL_BYTE)
|
||||
t = VT_BYTE;
|
||||
else if (vtop->r & VT_LVAL_SHORT)
|
||||
t = VT_SHORT;
|
||||
@ -3712,7 +3718,24 @@ ST_FUNC void unary(void)
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_PE)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
#ifdef TCC_TARGET_PE
|
||||
case TOK_builtin_va_start:
|
||||
{
|
||||
next();
|
||||
skip('(');
|
||||
expr_eq();
|
||||
skip(',');
|
||||
expr_eq();
|
||||
skip(')');
|
||||
if ((vtop->r & VT_VALMASK) != VT_LOCAL)
|
||||
tcc_error("__builtin_va_start expects a local variable");
|
||||
vtop->r &= ~(VT_LVAL | VT_REF);
|
||||
vtop->type = char_pointer_type;
|
||||
vstore();
|
||||
}
|
||||
break;
|
||||
#else
|
||||
case TOK_builtin_va_arg_types:
|
||||
{
|
||||
CType type;
|
||||
@ -3724,6 +3747,7 @@ ST_FUNC void unary(void)
|
||||
vpushi(classify_x86_64_va_arg(&type));
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
case TOK_INC:
|
||||
case TOK_DEC:
|
||||
|
||||
Reference in New Issue
Block a user