src/cpu/sparc/vm/sparc.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/cpu/sparc/vm/sparc.ad	Mon Jun  2 13:13:10 2008
--- new/src/cpu/sparc/vm/sparc.ad	Mon Jun  2 13:13:09 2008

*** 6675,6707 **** --- 6675,6696 ---- enc_iflags_ne_to_boolean(res) ); #endif ins_pipe( long_memory_op ); %} ! instruct compareAndSwapN_bool_comp(iRegP mem_ptr, iRegN oldval, iRegN newval, iRegI res, o7RegI tmp, flagsReg ccr ) %{ ! instruct compareAndSwapN_bool(iRegP mem_ptr, iRegN oldval, iRegN newval, iRegI res, o7RegI tmp1, flagsReg ccr ) %{ match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval))); ! effect( USE mem_ptr, KILL ccr, KILL tmp1); format %{ "MOV $newval,O7\n\t" "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" "CMP $oldval,O7\t\t! See if we made progress\n\t" "MOV 1,$res\n\t" "MOVne icc,R_G0,$res" %} ! ins_encode %{ ! Register Rmem = reg_to_register_object($mem_ptr$$reg); Register Rold = reg_to_register_object($oldval$$reg); Register Rnew = reg_to_register_object($newval$$reg); Register Rres = reg_to_register_object($res$$reg); __ cas(Rmem, Rold, Rnew); __ cmp( Rold, Rnew ); __ mov(1, Rres); __ movcc( Assembler::notEqual, false, Assembler::icc, G0, Rres ); %} ! ins_encode( enc_casi(mem_ptr, oldval, newval), ! enc_iflags_ne_to_boolean(res) ); ins_pipe( long_memory_op ); %} //--------------------- // Subtraction Instructions

src/cpu/sparc/vm/sparc.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File