comparison src/share/vm/c1/c1_LIRGenerator.cpp @ 2089:037c727f35fb

7009231: C1: Incorrect CAS code for longs on SPARC 32bit Summary: Fix CAS of longs on SPARC 32bit and cmove on SPARC 64bit. Reviewed-by: kvn
author iveresov
date Mon, 27 Dec 2010 21:51:31 -0800
parents 5ddfcf4b079e
children 91fe28b03d6a e31d8c656c5b 403dc4c1d7f5
comparison
equal deleted inserted replaced
2088:8d0b933dda2d 2089:037c727f35fb
854 854
855 LIR_Opr data_offset_reg = new_pointer_register(); 855 LIR_Opr data_offset_reg = new_pointer_register();
856 __ cmove(lir_cond(cond), 856 __ cmove(lir_cond(cond),
857 LIR_OprFact::intptrConst(taken_count_offset), 857 LIR_OprFact::intptrConst(taken_count_offset),
858 LIR_OprFact::intptrConst(not_taken_count_offset), 858 LIR_OprFact::intptrConst(not_taken_count_offset),
859 data_offset_reg); 859 data_offset_reg, as_BasicType(if_instr->x()->type()));
860 860
861 // MDO cells are intptr_t, so the data_reg width is arch-dependent. 861 // MDO cells are intptr_t, so the data_reg width is arch-dependent.
862 LIR_Opr data_reg = new_pointer_register(); 862 LIR_Opr data_reg = new_pointer_register();
863 LIR_Address* data_addr = new LIR_Address(md_reg, data_offset_reg, data_reg->type()); 863 LIR_Address* data_addr = new LIR_Address(md_reg, data_offset_reg, data_reg->type());
864 __ move(data_addr, data_reg); 864 __ move(data_addr, data_reg);
2589 t_val.dont_load_item(); 2589 t_val.dont_load_item();
2590 f_val.dont_load_item(); 2590 f_val.dont_load_item();
2591 LIR_Opr reg = rlock_result(x); 2591 LIR_Opr reg = rlock_result(x);
2592 2592
2593 __ cmp(lir_cond(x->cond()), left.result(), right.result()); 2593 __ cmp(lir_cond(x->cond()), left.result(), right.result());
2594 __ cmove(lir_cond(x->cond()), t_val.result(), f_val.result(), reg); 2594 __ cmove(lir_cond(x->cond()), t_val.result(), f_val.result(), reg, as_BasicType(x->x()->type()));
2595 } 2595 }
2596 2596
2597 2597
2598 void LIRGenerator::do_Intrinsic(Intrinsic* x) { 2598 void LIRGenerator::do_Intrinsic(Intrinsic* x) {
2599 switch (x->id()) { 2599 switch (x->id()) {