Mercurial > hg > CbC > old > device
changeset 710:4348f61a5e54
*** empty log message ***
author | kono |
---|---|
date | Thu, 25 Oct 2007 13:58:42 +0900 |
parents | 8b54c40081de |
children | 35e6841ba01a |
files | Changes test/code-gen-all.c test/code-gen.c |
diffstat | 3 files changed, 78 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Wed Oct 24 21:54:26 2007 +0900 +++ b/Changes Thu Oct 25 13:58:42 2007 +0900 @@ -9611,4 +9611,32 @@ adhoc に code_save_register_stack とか使ったけど、本当は、 削除出来るんだろ。 - +Thu Oct 25 08:19:20 JST 2007 + +Mac OS X も、LP64 なので、 + +http://www.unix.org/version2/whatsnew/lp64_wp.html + +このcompilerも、int->long に書き換える必要がある。 +ということは... + #define int long +でも、いいんだけど... + int i; + printf("%d\n",i); +で、こける。 + int i; + printf("%ld\n",i); +でないとだめ。 + +やっぱり、pointer が入る部分だけ、long に書き直すのが良いのかな。 + +ふーん.... PPCの書き換えは、それほど大変ではなさそうだが... + +むしろ、long double の実装の方がなぁ... + +switch で、long long ってのもありみたいだね。まぁ、64bit のみで +実装と言うのが良いんでしょうけど。 + +long を64にするのは、難しくないが、int がshort と同じ扱いになるの? +extend するのもあれだが... +
--- a/test/code-gen-all.c Wed Oct 24 21:54:26 2007 +0900 +++ b/test/code-gen-all.c Thu Oct 25 13:58:42 2007 +0900 @@ -2,11 +2,15 @@ int main() { #define FLOAT_CODE 1 #define LONGLONG_CODE 1 +#define LONG_DOUBLE_CODE 0 #ifdef INLINE #else #define INLINE #endif code_endian(); +#if 1 +#else +#endif code_lvar(); code_lvar_address(); code_label(); @@ -32,7 +36,11 @@ code_return_int(); #if FLOAT_CODE code_return_float(); +#if LONG_DOUBLE_CODE +#endif code_return_double(); +#if LONG_DOUBLE_CODE +#endif #endif #if LONGLONG_CODE code_return_longlong(); @@ -56,6 +64,10 @@ code_srindirect(); #if FLOAT_CODE code_drindirect(); +#if LONG_DOUBLE_CODE +#endif +#if LONG_DOUBLE_CODE +#endif #endif #if LONGLONG_CODE code_lrindirect();
--- a/test/code-gen.c Wed Oct 24 21:54:26 2007 +0900 +++ b/test/code-gen.c Thu Oct 25 13:58:42 2007 +0900 @@ -2,12 +2,14 @@ #define FLOAT_CODE 1 #define LONGLONG_CODE 1 +#define LONG_DOUBLE_CODE 0 #ifdef INLINE #else #define INLINE #endif + // code_lvar(int e2,int creg) extern int printf(const char *fmt,...); @@ -19,11 +21,15 @@ unsigned char a[8]; unsigned short s; unsigned int i; - unsigned long long l; + unsigned long l; + unsigned long long ll; } u; - printf("sizeof(int)=%d\n",sizeof(char)); + u.ll = 0; + printf("sizeof(char)=%d\n",sizeof(char)); printf("sizeof(short)=%d\n",sizeof(short)); printf("sizeof(int)=%d\n",sizeof(int)); + printf("sizeof(long)=%d\n",sizeof(long)); + printf("sizeof(int*)=%d\n",sizeof(int*)); printf("sizeof(long long)=%d\n",sizeof(long long)); printf("sizeof(float)=%d\n",sizeof(float)); printf("sizeof(double)=%d\n",sizeof(double)); @@ -32,9 +38,17 @@ printf("#0025:endian s : %02x %02x\n",u.a[0],u.a[1]); u.i = 0x01234567; printf("#0027:endian i : %02x %02x %02x %02x\n",u.a[0],u.a[1],u.a[2],u.a[3]); +#if 1 + u.l = 0x01234567L; + printf("#0027:endian l : %02x %02x %02x %02x\n",u.a[0],u.a[1],u.a[2],u.a[3]); +#else u.l = 0x0123456789abcdefULL; printf("#0029:endian l : %02x %02x %02x %02x\n",u.a[0],u.a[1],u.a[2],u.a[3]); printf("#0030:endian l : %02x %02x %02x %02x\n",u.a[4],u.a[5],u.a[6],u.a[7]); +#endif + u.ll = 0x0123456789abcdefULL; + printf("#0029:endian ll: %02x %02x %02x %02x\n",u.a[0],u.a[1],u.a[2],u.a[3]); + printf("#0030:endian ll: %02x %02x %02x %02x\n",u.a[4],u.a[5],u.a[6],u.a[7]); } INLINE void @@ -310,12 +324,23 @@ { return 1.0; } +#if LONG_DOUBLE_CODE +INLINE long double + code_return_long_double0() +{ + return 1.0; +} +#endif INLINE void code_return_double() { printf("#0307:code_return_double %g\n",code_return_double0()); +#if LONG_DOUBLE_CODE + printf("#0307:code_return_double %Lg\n",code_return_long_double0()); +#endif } + #endif #if LONGLONG_CODE @@ -853,16 +878,26 @@ { float i1,i2; double ui1,ui2; + double di1,di2; float *pi1,*pi2; double *pui1,*pui2; +#if LONG_DOUBLE_CODE + long double *pdi1,*pdi2; +#endif i1 = -55; i2= 55; ui1 = 200; ui2= 128; + di1 = 200; di2= 128; pi1 = &i1; pi2 = &i2; pui1 = &ui1; pui2 = &ui2; printf("#0856:code_dindirect %g %g %g %g\n",*pi1,*pi2,*pui1,*pui2); +#if LONG_DOUBLE_CODE + pdi1 = &di1; + pdi2 = &di2; + printf("#0856:code_dindirect %Lg %Lg\n",*pdi1,*pdi2); +#endif } #endif