aboutsummaryrefslogtreecommitdiff
path: root/x86_64-gen.c
diff options
context:
space:
mode:
authorgrischka <grischka>2014-01-07 14:57:07 +0100
committergrischka <grischka>2014-01-07 14:57:07 +0100
commit3fe2a95d7fe854c8cf496a009a467bb65cdf030d (patch)
tree217e2470122e020f6c71acf97c2bdaf4d7f5943e /x86_64-gen.c
parent2bd0daabbe1fc40e65e4a4631e68f5ca093ea1fb (diff)
downloadtinycc-3fe2a95d7fe854c8cf496a009a467bb65cdf030d.tar.gz
tinycc-3fe2a95d7fe854c8cf496a009a467bb65cdf030d.tar.bz2
be stricter with aliasing
Refactoring (no logical changes): - use memcpy in tccgen.c:ieee_finite(double d) - use union to store attribute flags in Sym Makefile: "CFLAGS+=-fno-strict-aliasing" basically not necessary anymore but I left it for now because gcc sometimes behaves unexpectedly without. Also: - configure: back to mode 100755 - tcc.h: remove unused variables tdata/tbss_section - x86_64-gen.c: adjust gfunc_sret for prototype
Diffstat (limited to 'x86_64-gen.c')
-rw-r--r--x86_64-gen.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/x86_64-gen.c b/x86_64-gen.c
index 9aee875..9acca3c 100644
--- a/x86_64-gen.c
+++ b/x86_64-gen.c
@@ -933,7 +933,8 @@ typedef enum X86_64_Mode {
x86_64_mode_x87
} X86_64_Mode;
-static X86_64_Mode classify_x86_64_merge(X86_64_Mode a, X86_64_Mode b) {
+static X86_64_Mode classify_x86_64_merge(X86_64_Mode a, X86_64_Mode b)
+{
if (a == b)
return a;
else if (a == x86_64_mode_none)
@@ -950,7 +951,8 @@ static X86_64_Mode classify_x86_64_merge(X86_64_Mode a, X86_64_Mode b) {
return x86_64_mode_sse;
}
-static X86_64_Mode classify_x86_64_inner(CType *ty) {
+static X86_64_Mode classify_x86_64_inner(CType *ty)
+{
X86_64_Mode mode;
Sym *f;
@@ -988,7 +990,8 @@ static X86_64_Mode classify_x86_64_inner(CType *ty) {
assert(0);
}
-static X86_64_Mode classify_x86_64_arg(CType *ty, CType *ret, int *psize, int *palign, int *reg_count) {
+static X86_64_Mode classify_x86_64_arg(CType *ty, CType *ret, int *psize, int *palign, int *reg_count)
+{
X86_64_Mode mode;
int size, align, ret_t = 0;
@@ -1045,7 +1048,8 @@ static X86_64_Mode classify_x86_64_arg(CType *ty, CType *ret, int *psize, int *p
return mode;
}
-ST_FUNC int classify_x86_64_va_arg(CType *ty) {
+ST_FUNC int classify_x86_64_va_arg(CType *ty)
+{
/* This definition must be synced with stdarg.h */
enum __va_arg_type {
__va_gen_reg, __va_float_reg, __va_stack
@@ -1061,7 +1065,8 @@ ST_FUNC int classify_x86_64_va_arg(CType *ty) {
/* Return the number of registers needed to return the struct, or 0 if
returning via struct pointer. */
-int gfunc_sret(CType *vt, CType *ret, int *ret_align) {
+ST_FUNC int gfunc_sret(CType *vt, int variadic, CType *ret, int *ret_align)
+{
int size, align, reg_count;
*ret_align = 1; // Never have to re-align return values for x86-64
return (classify_x86_64_arg(vt, ret, &size, &align, &reg_count) != x86_64_mode_memory);