Mercurial > projects > ldc
comparison gen/toir.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 | 99e95dae90d5 |
children | b18b6135e54b |
comparison
equal
deleted
inserted
replaced
523:c9a606d6e641 | 524:ca2dfe98036c |
---|---|
651 | 651 |
652 if (type->iscomplex()) { | 652 if (type->iscomplex()) { |
653 return DtoComplexMul(loc, type, l, r); | 653 return DtoComplexMul(loc, type, l, r); |
654 } | 654 } |
655 | 655 |
656 return DtoBinMul(l,r); | 656 return DtoBinMul(type, l, r); |
657 } | 657 } |
658 | 658 |
659 ////////////////////////////////////////////////////////////////////////////////////////// | 659 ////////////////////////////////////////////////////////////////////////////////////////// |
660 | 660 |
661 DValue* MulAssignExp::toElem(IRState* p) | 661 DValue* MulAssignExp::toElem(IRState* p) |
669 DValue* res; | 669 DValue* res; |
670 if (type->iscomplex()) { | 670 if (type->iscomplex()) { |
671 res = DtoComplexMul(loc, type, l, r); | 671 res = DtoComplexMul(loc, type, l, r); |
672 } | 672 } |
673 else { | 673 else { |
674 res = DtoBinMul(l,r); | 674 res = DtoBinMul(type, l, r); |
675 } | 675 } |
676 DtoAssign(loc, l, res); | 676 DtoAssign(loc, l, res); |
677 | 677 |
678 return res; | 678 return res; |
679 } | 679 } |
690 | 690 |
691 if (type->iscomplex()) { | 691 if (type->iscomplex()) { |
692 return DtoComplexDiv(loc, type, l, r); | 692 return DtoComplexDiv(loc, type, l, r); |
693 } | 693 } |
694 | 694 |
695 return DtoBinDiv(l, r); | 695 return DtoBinDiv(type, l, r); |
696 } | 696 } |
697 | 697 |
698 ////////////////////////////////////////////////////////////////////////////////////////// | 698 ////////////////////////////////////////////////////////////////////////////////////////// |
699 | 699 |
700 DValue* DivAssignExp::toElem(IRState* p) | 700 DValue* DivAssignExp::toElem(IRState* p) |
708 DValue* res; | 708 DValue* res; |
709 if (type->iscomplex()) { | 709 if (type->iscomplex()) { |
710 res = DtoComplexDiv(loc, type, l, r); | 710 res = DtoComplexDiv(loc, type, l, r); |
711 } | 711 } |
712 else { | 712 else { |
713 res = DtoBinDiv(l,r); | 713 res = DtoBinDiv(type, l, r); |
714 } | 714 } |
715 DtoAssign(loc, l, res); | 715 DtoAssign(loc, l, res); |
716 | 716 |
717 return res; | 717 return res; |
718 } | 718 } |
725 LOG_SCOPE; | 725 LOG_SCOPE; |
726 | 726 |
727 DValue* l = e1->toElem(p); | 727 DValue* l = e1->toElem(p); |
728 DValue* r = e2->toElem(p); | 728 DValue* r = e2->toElem(p); |
729 | 729 |
730 return DtoBinRem(l, r); | 730 return DtoBinRem(type, l, r); |
731 } | 731 } |
732 | 732 |
733 ////////////////////////////////////////////////////////////////////////////////////////// | 733 ////////////////////////////////////////////////////////////////////////////////////////// |
734 | 734 |
735 DValue* ModAssignExp::toElem(IRState* p) | 735 DValue* ModAssignExp::toElem(IRState* p) |
738 LOG_SCOPE; | 738 LOG_SCOPE; |
739 | 739 |
740 DValue* l = e1->toElem(p); | 740 DValue* l = e1->toElem(p); |
741 DValue* r = e2->toElem(p); | 741 DValue* r = e2->toElem(p); |
742 | 742 |
743 DValue* res = DtoBinRem(l, r); | 743 DValue* res = DtoBinRem(type, l, r); |
744 DtoAssign(loc, l, res); | 744 DtoAssign(loc, l, res); |
745 | 745 |
746 return res; | 746 return res; |
747 } | 747 } |
748 | 748 |