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