equal
deleted
inserted
replaced
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; |