src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
changeset 51996 84743156e780
parent 51976 390f529f4f22
child 52142 ca0c25e01c5b
equal deleted inserted replaced
51995:f7babf9d1592 51996:84743156e780
   605   address generate_atomic_cmpxchg() {
   605   address generate_atomic_cmpxchg() {
   606     StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg");
   606     StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg");
   607     address start = __ pc();
   607     address start = __ pc();
   608 
   608 
   609     __ movl(rax, c_rarg2);
   609     __ movl(rax, c_rarg2);
   610    if ( os::is_MP() ) __ lock();
   610     __ lock();
   611     __ cmpxchgl(c_rarg0, Address(c_rarg1, 0));
   611     __ cmpxchgl(c_rarg0, Address(c_rarg1, 0));
   612     __ ret(0);
   612     __ ret(0);
   613 
   613 
   614     return start;
   614     return start;
   615   }
   615   }
   631   address generate_atomic_cmpxchg_byte() {
   631   address generate_atomic_cmpxchg_byte() {
   632     StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_byte");
   632     StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_byte");
   633     address start = __ pc();
   633     address start = __ pc();
   634 
   634 
   635     __ movsbq(rax, c_rarg2);
   635     __ movsbq(rax, c_rarg2);
   636    if ( os::is_MP() ) __ lock();
   636     __ lock();
   637     __ cmpxchgb(c_rarg0, Address(c_rarg1, 0));
   637     __ cmpxchgb(c_rarg0, Address(c_rarg1, 0));
   638     __ ret(0);
   638     __ ret(0);
   639 
   639 
   640     return start;
   640     return start;
   641   }
   641   }
   657   address generate_atomic_cmpxchg_long() {
   657   address generate_atomic_cmpxchg_long() {
   658     StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_long");
   658     StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_long");
   659     address start = __ pc();
   659     address start = __ pc();
   660 
   660 
   661     __ movq(rax, c_rarg2);
   661     __ movq(rax, c_rarg2);
   662    if ( os::is_MP() ) __ lock();
   662     __ lock();
   663     __ cmpxchgq(c_rarg0, Address(c_rarg1, 0));
   663     __ cmpxchgq(c_rarg0, Address(c_rarg1, 0));
   664     __ ret(0);
   664     __ ret(0);
   665 
   665 
   666     return start;
   666     return start;
   667   }
   667   }
   678   address generate_atomic_add() {
   678   address generate_atomic_add() {
   679     StubCodeMark mark(this, "StubRoutines", "atomic_add");
   679     StubCodeMark mark(this, "StubRoutines", "atomic_add");
   680     address start = __ pc();
   680     address start = __ pc();
   681 
   681 
   682     __ movl(rax, c_rarg0);
   682     __ movl(rax, c_rarg0);
   683    if ( os::is_MP() ) __ lock();
   683     __ lock();
   684     __ xaddl(Address(c_rarg1, 0), c_rarg0);
   684     __ xaddl(Address(c_rarg1, 0), c_rarg0);
   685     __ addl(rax, c_rarg0);
   685     __ addl(rax, c_rarg0);
   686     __ ret(0);
   686     __ ret(0);
   687 
   687 
   688     return start;
   688     return start;
   700   address generate_atomic_add_long() {
   700   address generate_atomic_add_long() {
   701     StubCodeMark mark(this, "StubRoutines", "atomic_add_long");
   701     StubCodeMark mark(this, "StubRoutines", "atomic_add_long");
   702     address start = __ pc();
   702     address start = __ pc();
   703 
   703 
   704     __ movptr(rax, c_rarg0); // Copy to eax we need a return value anyhow
   704     __ movptr(rax, c_rarg0); // Copy to eax we need a return value anyhow
   705    if ( os::is_MP() ) __ lock();
   705     __ lock();
   706     __ xaddptr(Address(c_rarg1, 0), c_rarg0);
   706     __ xaddptr(Address(c_rarg1, 0), c_rarg0);
   707     __ addptr(rax, c_rarg0);
   707     __ addptr(rax, c_rarg0);
   708     __ ret(0);
   708     __ ret(0);
   709 
   709 
   710     return start;
   710     return start;