[svn r180] Fixed complex negation, and tango.math.Math now compiles.

This commit is contained in:
Tomas Lindquist Olsen 2008-05-05 20:28:59 +02:00
parent a0c6cb6673
commit 071bf5a629
5 changed files with 31 additions and 3 deletions

View file

@ -282,6 +282,24 @@ DValue* DtoComplexDiv(Type* type, DValue* lhs, DValue* rhs)
//////////////////////////////////////////////////////////////////////////////////////////
DValue* DtoComplexNeg(Type* type, DValue* val)
{
val = DtoComplex(type, val);
llvm::Value *a, *b, *re, *im;
// values
DtoGetComplexParts(val, a, b);
// sub up
re = gIR->ir->CreateNeg(a, "tmp");
im = gIR->ir->CreateNeg(b, "tmp");
return new DComplexValue(type, re, im);
}
//////////////////////////////////////////////////////////////////////////////////////////
llvm::Value* DtoComplexEquals(TOK op, DValue* lhs, DValue* rhs)
{
Type* type = lhs->getType();

View file

@ -23,6 +23,7 @@ DValue* DtoComplexAdd(Type* type, DValue* lhs, DValue* rhs);
DValue* DtoComplexSub(Type* type, DValue* lhs, DValue* rhs);
DValue* DtoComplexMul(Type* type, DValue* lhs, DValue* rhs);
DValue* DtoComplexDiv(Type* type, DValue* lhs, DValue* rhs);
DValue* DtoComplexNeg(Type* type, DValue* val);
llvm::Value* DtoComplexEquals(TOK op, DValue* lhs, DValue* rhs);

View file

@ -2394,8 +2394,12 @@ DValue* NegExp::toElem(IRState* p)
LOG_SCOPE;
DValue* l = e1->toElem(p);
llvm::Value* val = l->getRVal();
if (type->iscomplex()) {
return DtoComplexNeg(type, l);
}
llvm::Value* val = l->getRVal();
Type* t = DtoDType(type);
llvm::Value* zero = 0;
@ -2407,8 +2411,11 @@ DValue* NegExp::toElem(IRState* p)
else if (t->ty == Tfloat64 || t->ty == Tfloat80 || t->ty == Timaginary64 || t->ty == Timaginary80)
zero = llvm::ConstantFP::get(val->getType(), llvm::APFloat(0.0));
else
{
Logger::println("unhandled fp negation of type %s", t->toChars());
assert(0);
}
}
else
assert(0);

View file

@ -369,6 +369,8 @@ real tan(real x)
{
version (GNU) {
return tanl(x);
} else version (LLVMDC) {
return tango.stdc.math.tanl(x);
} else {
asm
{

View file

@ -4,5 +4,5 @@ import tango.io.Stdout;
void main()
{
Stdout.formatln("{} {} {}", "a", "b", 1);
Stdout.formatln("{} {} {}", "a", "b", 1.0);
}