Mercurial > projects > ldc
diff gen/binops.cpp @ 524:ca2dfe98036c
Binary ops had the wrong result type for real op imaginary.
Fixes:
run/creal_03
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sun, 17 Aug 2008 12:21:53 +0200 |
parents | a95056b3c996 |
children | cc5fee7836dc |
line wrap: on
line diff
--- a/gen/binops.cpp Sun Aug 17 11:39:36 2008 +0200 +++ b/gen/binops.cpp Sun Aug 17 12:21:53 2008 +0200 @@ -24,15 +24,15 @@ ////////////////////////////////////////////////////////////////////////////// -DValue* DtoBinMul(DValue* lhs, DValue* rhs) +DValue* DtoBinMul(Type* targettype, DValue* lhs, DValue* rhs) { LLValue* v = gIR->ir->CreateMul(lhs->getRVal(), rhs->getRVal(), "tmp"); - return new DImValue( lhs->getType(), v ); + return new DImValue( targettype, v ); } ////////////////////////////////////////////////////////////////////////////// -DValue* DtoBinDiv(DValue* lhs, DValue* rhs) +DValue* DtoBinDiv(Type* targettype, DValue* lhs, DValue* rhs) { Type* t = lhs->getType(); LLValue *l, *r; @@ -45,12 +45,12 @@ res = gIR->ir->CreateSDiv(l, r, "tmp"); else res = gIR->ir->CreateUDiv(l, r, "tmp"); - return new DImValue( lhs->getType(), res ); + return new DImValue( targettype, res ); } ////////////////////////////////////////////////////////////////////////////// -DValue* DtoBinRem(DValue* lhs, DValue* rhs) +DValue* DtoBinRem(Type* targettype, DValue* lhs, DValue* rhs) { Type* t = lhs->getType(); LLValue *l, *r; @@ -63,5 +63,5 @@ res = gIR->ir->CreateSRem(l, r, "tmp"); else res = gIR->ir->CreateURem(l, r, "tmp"); - return new DImValue( lhs->getType(), res ); + return new DImValue( targettype, res ); }