Mercurial > projects > ldc
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()); |