comparison src/cpu/x86/vm/c1_LinearScan_x86.cpp @ 953:ff1a29907b6c

6855215: Calculation error (NaN) after about 1500 calculations Reviewed-by: kvn
author never
date Mon, 31 Aug 2009 17:07:53 -0700
parents a61af66fc99e
children c18cbe5936b8
comparison
equal deleted inserted replaced
952:ace8397c8563 953:ff1a29907b6c
762 762
763 new_res = to_fpu_stack_top(res); 763 new_res = to_fpu_stack_top(res);
764 break; 764 break;
765 } 765 }
766 766
767 case lir_log:
768 case lir_log10:
769 case lir_abs: 767 case lir_abs:
770 case lir_sqrt: { 768 case lir_sqrt: {
771 // Right argument appears to be unused 769 // Right argument appears to be unused
772 assert(right->is_illegal(), "must be"); 770 assert(right->is_illegal(), "must be");
773 assert(left->is_fpu_register(), "must be"); 771 assert(left->is_fpu_register(), "must be");
780 778
781 new_left = to_fpu_stack_top(res); 779 new_left = to_fpu_stack_top(res);
782 new_res = new_left; 780 new_res = new_left;
783 781
784 op2->set_fpu_stack_size(sim()->stack_size()); 782 op2->set_fpu_stack_size(sim()->stack_size());
783 break;
784 }
785
786 case lir_log:
787 case lir_log10: {
788 // log and log10 needs one temporary fpu stack slot, so there is ontemporary
789 // registers stored in temp of the operation.
790 // the stack allocator must guarantee that the stack slots are really free,
791 // otherwise there might be a stack overflow.
792 assert(right->is_illegal(), "must be");
793 assert(left->is_fpu_register(), "must be");
794 assert(res->is_fpu_register(), "must be");
795 assert(op2->tmp_opr()->is_fpu_register(), "must be");
796
797 insert_free_if_dead(op2->tmp_opr());
798 insert_free_if_dead(res, left);
799 insert_exchange(left);
800 do_rename(left, res);
801
802 new_left = to_fpu_stack_top(res);
803 new_res = new_left;
804
805 op2->set_fpu_stack_size(sim()->stack_size());
806 assert(sim()->stack_size() <= 7, "at least one stack slot must be free");
785 break; 807 break;
786 } 808 }
787 809
788 810
789 case lir_tan: 811 case lir_tan: