changeset 484:f84d4525ffc8

lvar alignment
author kono
date Mon, 12 Dec 2005 12:40:48 +0900
parents 77cab9687d3f
children b2db99073076
files Changes mc-code-arm.c mc-codegen.c mc-codegen.h
diffstat 4 files changed, 10 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Sun Dec 11 23:53:27 2005 +0900
+++ b/Changes	Mon Dec 12 12:40:48 2005 +0900
@@ -7354,6 +7354,9 @@
 attribute は変数にしかつかない。関数の型にconstを入れるとすれば、
 ANSI-Cとの互換性を考えても type system に入れるべきでしょう。
 
+emit_data で、型だけ見て処理してました。値の型を見ないとね。
+address 以外は型検査で落していたらしい。
+
 int a0();
 int a5();
 
--- a/mc-code-arm.c	Sun Dec 11 23:53:27 2005 +0900
+++ b/mc-code-arm.c	Mon Dec 12 12:40:48 2005 +0900
@@ -550,7 +550,6 @@
     size_of_double = SIZE_OF_DOUBLE;
     size_of_longlong = SIZE_OF_LONGLONG;
     endian = ENDIAN;
-    disp_align = 4;
     init_src = init_src0;
 
     reg=RET_LREGISTER;
--- a/mc-codegen.c	Sun Dec 11 23:53:27 2005 +0900
+++ b/mc-codegen.c	Mon Dec 12 12:40:48 2005 +0900
@@ -18,7 +18,6 @@
 int size_of_longlong;
 int bit_of_byte;
 int endian;
-int disp_align;
 
 static void assign(int e1);
 #if ASM_CODE
@@ -2825,9 +2824,7 @@
 	    nsc = car(ndsp);
 	    ndsp = cadr(ndsp);
 	} else {
-            if (sz%size_of_int==0) {
-                disp = ((disp+(size_of_int-1))&~(size_of_int-1));
-            }
+	    /* local variable alignment is done by new_lvar */
 	    nsc = LVAR;
 	    ndsp = new_lvar(sz);
 	}
@@ -3971,14 +3968,13 @@
 extern int
 new_lvar0(int sz)
 {
-    switch (disp_align) {
-    default:
-    case 0: return disp-=sz;
-    case 4:
-	disp-=sz;
-	if (sz>=4) disp &= -4;
-	return disp;
+    disp-=sz;
+#if 1
+    if (sz>=4 && (disp & (4-1))) {
+	disp &= ~(4-1);
     }
+#endif
+    return disp;
 }
 
 extern int
--- a/mc-codegen.h	Sun Dec 11 23:53:27 2005 +0900
+++ b/mc-codegen.h	Mon Dec 12 12:40:48 2005 +0900
@@ -12,7 +12,6 @@
 extern int size_of_longlong;
 extern int bit_of_byte;
 extern int endian;
-extern int disp_align;
 
 #define USE_CREG (-1)
 #define ASM_INPUT	1