comparison src/cpu/sparc/vm/sparc.ad @ 181:823298b11afc

6709165: Tests hang or misbahve with HS 13.0-b01 on solaris-sparcv9 Reviewed-by: kvn, jrose
author never
date Wed, 04 Jun 2008 21:56:27 -0700
parents 437d03ea40b1
children 44abbb0d4c18
comparison
equal deleted inserted replaced
180:b9ebd46331d2 181:823298b11afc
6675 enc_iflags_ne_to_boolean(res) ); 6675 enc_iflags_ne_to_boolean(res) );
6676 #endif 6676 #endif
6677 ins_pipe( long_memory_op ); 6677 ins_pipe( long_memory_op );
6678 %} 6678 %}
6679 6679
6680 instruct compareAndSwapN_bool_comp(iRegP mem_ptr, iRegN oldval, iRegN newval, iRegI res, o7RegI tmp, flagsReg ccr ) %{ 6680 instruct compareAndSwapN_bool(iRegP mem_ptr, iRegN oldval, iRegN newval, iRegI res, o7RegI tmp1, flagsReg ccr ) %{
6681 match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval))); 6681 match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval)));
6682 effect( USE mem_ptr, KILL ccr, KILL tmp); 6682 effect( USE mem_ptr, KILL ccr, KILL tmp1);
6683
6684 format %{ 6683 format %{
6685 "MOV $newval,O7\n\t" 6684 "MOV $newval,O7\n\t"
6686 "CASA [$mem_ptr],$oldval,O7\t! If $oldval==[$mem_ptr] Then store O7 into [$mem_ptr], set O7=[$mem_ptr] in any case\n\t" 6685 "CASA [$mem_ptr],$oldval,O7\t! If $oldval==[$mem_ptr] Then store O7 into [$mem_ptr], set O7=[$mem_ptr] in any case\n\t"
6687 "CMP $oldval,O7\t\t! See if we made progress\n\t" 6686 "CMP $oldval,O7\t\t! See if we made progress\n\t"
6688 "MOV 1,$res\n\t" 6687 "MOV 1,$res\n\t"
6689 "MOVne icc,R_G0,$res" 6688 "MOVne icc,R_G0,$res"
6690 %} 6689 %}
6691 ins_encode %{ 6690 ins_encode( enc_casi(mem_ptr, oldval, newval),
6692 Register Rmem = reg_to_register_object($mem_ptr$$reg); 6691 enc_iflags_ne_to_boolean(res) );
6693 Register Rold = reg_to_register_object($oldval$$reg);
6694 Register Rnew = reg_to_register_object($newval$$reg);
6695 Register Rres = reg_to_register_object($res$$reg);
6696
6697 __ cas(Rmem, Rold, Rnew);
6698 __ cmp( Rold, Rnew );
6699 __ mov(1, Rres);
6700 __ movcc( Assembler::notEqual, false, Assembler::icc, G0, Rres );
6701 %}
6702
6703 ins_pipe( long_memory_op ); 6692 ins_pipe( long_memory_op );
6704 %} 6693 %}
6705 6694
6706 //--------------------- 6695 //---------------------
6707 // Subtraction Instructions 6696 // Subtraction Instructions