79 .inline _Atomic_xchg_long,2 |
79 .inline _Atomic_xchg_long,2 |
80 xchgq (%rsi), %rdi |
80 xchgq (%rsi), %rdi |
81 movq %rdi, %rax |
81 movq %rdi, %rax |
82 .end |
82 .end |
83 |
83 |
84 // Support for jbyte Atomic::cmpxchg(jbyte exchange_value, |
84 // Support for jbyte Atomic::cmpxchg(volatile jbyte *dest, |
85 // volatile jbyte *dest, |
85 // jbyte compare_value, |
86 // jbyte compare_value) |
86 // jbyte exchange_value) |
87 .inline _Atomic_cmpxchg_byte,3 |
87 .inline _Atomic_cmpxchg_byte,3 |
88 movb %dl, %al // compare_value |
88 movb %dl, %al // compare_value |
89 lock |
89 lock |
90 cmpxchgb %dil, (%rsi) |
90 cmpxchgb %dil, (%rsi) |
91 .end |
91 .end |
92 |
92 |
93 // Support for jint Atomic::cmpxchg(jint exchange_value, |
93 // Support for jint Atomic::cmpxchg(volatile jint *dest, |
94 // volatile jint *dest, |
94 // int compare_value, |
95 // jint compare_value) |
95 // jint exchange_value) |
96 .inline _Atomic_cmpxchg,3 |
96 .inline _Atomic_cmpxchg,3 |
97 movl %edx, %eax // compare_value |
97 movl %edx, %eax // compare_value |
98 lock |
98 lock |
99 cmpxchgl %edi, (%rsi) |
99 cmpxchgl %edi, (%rsi) |
100 .end |
100 .end |
101 |
101 |
102 // Support for jlong Atomic::cmpxchg(jlong exchange_value, |
102 // Support for jlong Atomic::cmpxchg(volatile jlong* dest, |
103 // volatile jlong* dest, |
103 // jlong compare_value, |
104 // jlong compare_value) |
104 // jlong exchange_value) |
105 .inline _Atomic_cmpxchg_long,3 |
105 .inline _Atomic_cmpxchg_long,3 |
106 movq %rdx, %rax // compare_value |
106 movq %rdx, %rax // compare_value |
107 lock |
107 lock |
108 cmpxchgq %rdi, (%rsi) |
108 cmpxchgq %rdi, (%rsi) |
109 .end |
109 .end |