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