comparison gen/toir.cpp @ 164:a64becf2a702 trunk

[svn r180] Fixed complex negation, and tango.math.Math now compiles.
author lindquist
date Mon, 05 May 2008 20:28:59 +0200
parents a8cd9bc1021a
children adca7f32fb6d
comparison
equal deleted inserted replaced
163:a8cd9bc1021a 164:a64becf2a702
2392 { 2392 {
2393 Logger::print("NegExp::toElem: %s | %s\n", toChars(), type->toChars()); 2393 Logger::print("NegExp::toElem: %s | %s\n", toChars(), type->toChars());
2394 LOG_SCOPE; 2394 LOG_SCOPE;
2395 2395
2396 DValue* l = e1->toElem(p); 2396 DValue* l = e1->toElem(p);
2397
2398 if (type->iscomplex()) {
2399 return DtoComplexNeg(type, l);
2400 }
2401
2397 llvm::Value* val = l->getRVal(); 2402 llvm::Value* val = l->getRVal();
2398
2399 Type* t = DtoDType(type); 2403 Type* t = DtoDType(type);
2400 2404
2401 llvm::Value* zero = 0; 2405 llvm::Value* zero = 0;
2402 if (t->isintegral()) 2406 if (t->isintegral())
2403 zero = llvm::ConstantInt::get(val->getType(), 0, true); 2407 zero = llvm::ConstantInt::get(val->getType(), 0, true);
2405 if (t->ty == Tfloat32 || t->ty == Timaginary32) 2409 if (t->ty == Tfloat32 || t->ty == Timaginary32)
2406 zero = llvm::ConstantFP::get(val->getType(), llvm::APFloat(0.0f)); 2410 zero = llvm::ConstantFP::get(val->getType(), llvm::APFloat(0.0f));
2407 else if (t->ty == Tfloat64 || t->ty == Tfloat80 || t->ty == Timaginary64 || t->ty == Timaginary80) 2411 else if (t->ty == Tfloat64 || t->ty == Tfloat80 || t->ty == Timaginary64 || t->ty == Timaginary80)
2408 zero = llvm::ConstantFP::get(val->getType(), llvm::APFloat(0.0)); 2412 zero = llvm::ConstantFP::get(val->getType(), llvm::APFloat(0.0));
2409 else 2413 else
2410 assert(0); 2414 {
2415 Logger::println("unhandled fp negation of type %s", t->toChars());
2416 assert(0);
2417 }
2411 } 2418 }
2412 else 2419 else
2413 assert(0); 2420 assert(0);
2414 2421
2415 val = llvm::BinaryOperator::createSub(zero,val,"tmp",p->scopebb()); 2422 val = llvm::BinaryOperator::createSub(zero,val,"tmp",p->scopebb());