http://d.puremagic.com/issues/show_bug.cgi?id=2697
Don <clugd...@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch Summary|[DMC too] Cast of float |Cast of float function |function return to ulong or |return to ulong or uint |uint gives bogus value |gives bogus value --- Comment #7 from Don <clugd...@yahoo.com.au> 2009-09-08 08:44:56 PDT --- Here's a patch against DMD2.032. It also requires a change to llmath.d in druntime (or in Phobos1). The simplest way is to copy the contents of __LDBLULLNG() and put it into __DBLULLNG(). Because there's no need for a difference between those functions (although there can be a performance benefit, so they are both worth retaining, I think). ================= Index: C:/dmd2best/src/dmd/backend/cod4.c =================================================================== --- C:/dmd2best/src/dmd/backend/cod4.c (revision 49) +++ C:/dmd2best/src/dmd/backend/cod4.c (revision 51) @@ -2313,7 +2313,7 @@ case OPd_s64: return cnvt87(e,pretregs); case OPd_u32: // use subroutine, not 8087 -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if 1//TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS retregs = mST0; #else retregs = DOUBLEREGS; @@ -2321,7 +2321,8 @@ goto L1; case OPd_u64: - retregs = DOUBLEREGS; + retregs = mST0; + //retregs = DOUBLEREGS; goto L1; case OPu64_d: if (*pretregs & mST0) Index: C:/dmd2best/src/dmd/backend/cod1.c =================================================================== --- C:/dmd2best/src/dmd/backend/cod1.c (revision 49) +++ C:/dmd2best/src/dmd/backend/cod1.c (revision 51) @@ -1936,14 +1936,15 @@ Y(DOUBLEREGS_16,"_INTDBL@"), Y(DOUBLEREGS_16,"_DBLUNS@"), Y(DOUBLEREGS_16,"_UNSDBL@"), - Y(DOUBLEREGS_16,"_DBLULNG@"), +// Y(DOUBLEREGS_16,"_DBLULNG@"), + Y(DOUBLEREGS_16,"__DBLULNG"), Y(DOUBLEREGS_16,"_ULNGDBL@"), Y(DOUBLEREGS_16,"_DBLFLT@"), Y(ALLREGS,"_FLTDBL@"), Y(DOUBLEREGS_16,"_DBLLLNG@"), Y(DOUBLEREGS_16,"_LLNGDBL@"), -#if 0 +#if 1 Y(DOUBLEREGS_16,"__DBLULLNG"), #else Y(DOUBLEREGS_16,"_DBLULLNG@"), @@ -2022,7 +2023,7 @@ {DOUBLEREGS_16,DOUBLEREGS_32,0,INFfloat,1,1}, // _INTDBL@ intdbl {mAX,mAX,0,INFfloat,1,1}, // _DBLUNS@ dbluns {DOUBLEREGS_16,DOUBLEREGS_32,0,INFfloat,1,1}, // _UNSDBL@ unsdbl -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if 1//TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS {mDX|mAX,mAX,0,INF32|INFfloat,0,1}, // _DBLULNG@ dblulng #else {mDX|mAX,mAX,0,INFfloat,1,1}, // _DBLULNG@ dblulng @@ -2035,7 +2036,7 @@ {DOUBLEREGS_16,mDX|mAX,0,INFfloat,1,1}, // _DBLLLNG@ {DOUBLEREGS_16,DOUBLEREGS_32,0,INFfloat,1,1}, // _LLNGDBL@ -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if 1//TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS {DOUBLEREGS_16,mDX|mAX,0,INFfloat,2,2}, // _DBLULLNG@ #else {DOUBLEREGS_16,mDX|mAX,0,INFfloat,1,1}, // _DBLULLNG@ @@ -2143,7 +2144,6 @@ 0x66,0xf7,0xe1, // mul ECX 0x66,0x0f,0xa4,0xc2,0x10, // shld EDX,EAX,16 ;DX,AX = EAX }; - c = genasm(c,lmul,sizeof(lmul)); } else -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------