Skip to content

Commit

Permalink
pull 217
Browse files Browse the repository at this point in the history
  • Loading branch information
WalterBright committed Aug 5, 2011
2 parents d29588f + 651c422 commit 133dce6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/backend/cod1.c
Expand Up @@ -2968,7 +2968,7 @@ STATIC code * funccall(elem *e,unsigned numpara,unsigned numalign,regm_t *pretre
ce = scodelem(e11,&retregs,keepmsk,TRUE);
cgstate.stackclean--;
/* Kill registers destroyed by an arbitrary function call */
ce = cat(ce,getregs((mBP | ALLREGS | mES) & ~fregsaved));
ce = cat(ce,getregs((mBP | ALLREGS | mES | XMMREGS) & ~fregsaved));
if (e11ty == TYfptr)
{ unsigned lsreg;
LF1:
Expand Down Expand Up @@ -3001,7 +3001,7 @@ STATIC code * funccall(elem *e,unsigned numpara,unsigned numalign,regm_t *pretre
// CALL [function]
cs.Iflags = 0;
cgstate.stackclean++;
ce = loadea(e11,&cs,0xFF,farfunc ? 3 : 2,0,keepmsk,(ALLREGS|mES|mBP) & ~fregsaved);
ce = loadea(e11,&cs,0xFF,farfunc ? 3 : 2,0,keepmsk,(mBP|ALLREGS|mES|XMMREGS) & ~fregsaved);
cgstate.stackclean--;
freenode(e11);
}
Expand Down
26 changes: 26 additions & 0 deletions test/runnable/test42.d
Expand Up @@ -4233,6 +4233,30 @@ int test6229()
return b;
}

/***************************************************/
// XMMBug

class XMMPainter
{
float call()
{
return sumFloats(0.0f, 0.0f);
}

static float sumFloats(float a, float b)
{
return a + b;
}
}

void test6270()
{
auto painter = new XMMPainter;
assert(XMMPainter.sumFloats(20, painter.call()) == 20.0f);
auto dg = () { return XMMPainter.sumFloats(0.0f, 0.0f); };
assert(XMMPainter.sumFloats(20, dg()) == 20.0f);
}

/***************************************************/

void test236()
Expand Down Expand Up @@ -4530,6 +4554,8 @@ int main()
test237();
test238();
test239();
test6229();
test6270();

writefln("Success");
return 0;
Expand Down

0 comments on commit 133dce6

Please sign in to comment.