Mercurial > hg > graal-compiler
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()) { |