Mercurial > hg > CbC > old > device
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