Fix a few floating-point conversions in 8c. [rsc] --rw-rw-r-- M 1428987 glenda sys 23789 Jan 28 09:53 sys/src/cmd/8c/txt.c /n/sourcesdump/2006/0128/plan9/sys/src/cmd/8c/txt.c:791,799 - /n/sourcesdump/2006/0129/plan9/sys/src/cmd/8c/txt.c:791,797 case CASE( TFLOAT, TSHORT): case CASE( TFLOAT, TUSHORT): case CASE( TFLOAT, TINT): - case CASE( TFLOAT, TUINT): case CASE( TFLOAT, TLONG): - case CASE( TFLOAT, TULONG): case CASE( TFLOAT, TIND): case CASE( TDOUBLE,TCHAR): /n/sourcesdump/2006/0128/plan9/sys/src/cmd/8c/txt.c:801,820 - /n/sourcesdump/2006/0129/plan9/sys/src/cmd/8c/txt.c:799,806 case CASE( TDOUBLE,TSHORT): case CASE( TDOUBLE,TUSHORT): case CASE( TDOUBLE,TINT): - case CASE( TDOUBLE,TUINT): case CASE( TDOUBLE,TLONG): - case CASE( TDOUBLE,TULONG): case CASE( TDOUBLE,TIND): - - case CASE( TVLONG, TCHAR): - case CASE( TVLONG, TUCHAR): - case CASE( TVLONG, TSHORT): - case CASE( TVLONG, TUSHORT): - case CASE( TVLONG, TINT): - case CASE( TVLONG, TUINT): - case CASE( TVLONG, TLONG): - case CASE( TVLONG, TULONG): - case CASE( TVLONG, TIND): if(fproundflg) { regsalloc(&nod, ®node); gins(AFMOVLP, f, &nod); /n/sourcesdump/2006/0128/plan9/sys/src/cmd/8c/txt.c:834,846 - /n/sourcesdump/2006/0129/plan9/sys/src/cmd/8c/txt.c:820,845 return; /* + * float to ulong + */ + case CASE( TDOUBLE, TULONG): + case CASE( TFLOAT, TULONG): + case CASE( TDOUBLE, TUINT): + case CASE( TFLOAT, TUINT): + regsalloc(&nod, ®node); + gmove(f, &fregnode0); + gins(AFADDD, nodfconst(-2147483648.), &fregnode0); + gins(AFMOVLP, f, &nod); + gins(ASUBL, nodconst(-2147483648), &nod); + gmove(&nod, t); + return; + + /* * ulong to float */ case CASE( TULONG, TDOUBLE): - case CASE( TULONG, TVLONG): case CASE( TULONG, TFLOAT): case CASE( TUINT, TDOUBLE): - case CASE( TUINT, TVLONG): case CASE( TUINT, TFLOAT): regalloc(&nod, f, f); gmove(f, &nod); /n/sourcesdump/2006/0128/plan9/sys/src/cmd/8c/txt.c:873,886 - /n/sourcesdump/2006/0129/plan9/sys/src/cmd/8c/txt.c:872,877 case CASE( TINT, TDOUBLE): case CASE( TLONG, TDOUBLE): case CASE( TIND, TDOUBLE): - - case CASE( TCHAR, TVLONG): - case CASE( TUCHAR, TVLONG): - case CASE( TSHORT, TVLONG): - case CASE( TUSHORT,TVLONG): - case CASE( TINT, TVLONG): - case CASE( TLONG, TVLONG): - case CASE( TIND, TVLONG): regsalloc(&nod, ®node); gmove(f, &nod); gins(AFMOVL, &nod, &fregnode0); /n/sourcesdump/2006/0128/plan9/sys/src/cmd/8c/txt.c:891,905 - /n/sourcesdump/2006/0129/plan9/sys/src/cmd/8c/txt.c:882,890 */ case CASE( TFLOAT, TFLOAT): case CASE( TDOUBLE,TFLOAT): - case CASE( TVLONG, TFLOAT): case CASE( TFLOAT, TDOUBLE): case CASE( TDOUBLE,TDOUBLE): - case CASE( TVLONG, TDOUBLE): - - case CASE( TFLOAT, TVLONG): - case CASE( TDOUBLE,TVLONG): - case CASE( TVLONG, TVLONG): a = AFMOVD; break; } if(a == AMOVL || a == AFMOVD)