60 // Support for jlong Atomic::add(volatile jlong* dest, jlong add_value) 61 .inline _Atomic_add_long,2 62 movq %rdi, %rax // save add_value for return 63 lock 64 xaddq %rdi, (%rsi) 65 addq %rdi, %rax 66 .end 67 68 // Support for jint Atomic::xchg(volatile jint* dest, jint exchange_value). 69 .inline _Atomic_xchg,2 70 xchgl (%rsi), %edi 71 movl %edi, %eax 72 .end 73 74 // Support for jlong Atomic::xchg(volatile jlong* dest, jlong exchange_value). 75 .inline _Atomic_xchg_long,2 76 xchgq (%rsi), %rdi 77 movq %rdi, %rax 78 .end 79 80 // Support for jbyte Atomic::cmpxchg(jbyte exchange_value, 81 // volatile jbyte *dest, 82 // jbyte compare_value) 83 .inline _Atomic_cmpxchg_byte,3 84 movb %dl, %al // compare_value 85 lock 86 cmpxchgb %dil, (%rsi) 87 .end 88 89 // Support for jint Atomic::cmpxchg(jint exchange_value, 90 // volatile jint *dest, 91 // jint compare_value) 92 .inline _Atomic_cmpxchg,3 93 movl %edx, %eax // compare_value 94 lock 95 cmpxchgl %edi, (%rsi) 96 .end 97 98 // Support for jlong Atomic::cmpxchg(jlong exchange_value, 99 // volatile jlong* dest, 100 // jlong compare_value) 101 .inline _Atomic_cmpxchg_long,3 102 movq %rdx, %rax // compare_value 103 lock 104 cmpxchgq %rdi, (%rsi) 105 .end 106 107 // Support for u2 Bytes::swap_u2(u2 x) 108 .inline _raw_swap_u2,1 109 movw %di, %ax 110 rorw $8, %ax 111 .end 112 113 // Support for u4 Bytes::swap_u4(u4 x) 114 .inline _raw_swap_u4,1 115 movl %edi, %eax 116 bswapl %eax 117 .end 118 119 // Support for u8 Bytes::swap_u8(u8 x) 120 .inline _raw_swap_u8,1 | 60 // Support for jlong Atomic::add(volatile jlong* dest, jlong add_value) 61 .inline _Atomic_add_long,2 62 movq %rdi, %rax // save add_value for return 63 lock 64 xaddq %rdi, (%rsi) 65 addq %rdi, %rax 66 .end 67 68 // Support for jint Atomic::xchg(volatile jint* dest, jint exchange_value). 69 .inline _Atomic_xchg,2 70 xchgl (%rsi), %edi 71 movl %edi, %eax 72 .end 73 74 // Support for jlong Atomic::xchg(volatile jlong* dest, jlong exchange_value). 75 .inline _Atomic_xchg_long,2 76 xchgq (%rsi), %rdi 77 movq %rdi, %rax 78 .end 79 80 // Support for jbyte Atomic::cmpxchg(volatile jbyte *dest, 81 // jbyte compare_value, 82 // jbyte exchange_value) 83 .inline _Atomic_cmpxchg_byte,3 84 movb %dl, %al // compare_value 85 lock 86 cmpxchgb %dil, (%rsi) 87 .end 88 89 // Support for jint Atomic::cmpxchg(volatile jint *dest, 90 // int compare_value, 91 // jint exchange_value) 92 .inline _Atomic_cmpxchg,3 93 movl %edx, %eax // compare_value 94 lock 95 cmpxchgl %edi, (%rsi) 96 .end 97 98 // Support for jlong Atomic::cmpxchg(volatile jlong* dest, 99 // jlong compare_value, 100 // jlong exchange_value) 101 .inline _Atomic_cmpxchg_long,3 102 movq %rdx, %rax // compare_value 103 lock 104 cmpxchgq %rdi, (%rsi) 105 .end 106 107 // Support for u2 Bytes::swap_u2(u2 x) 108 .inline _raw_swap_u2,1 109 movw %di, %ax 110 rorw $8, %ax 111 .end 112 113 // Support for u4 Bytes::swap_u4(u4 x) 114 .inline _raw_swap_u4,1 115 movl %edi, %eax 116 bswapl %eax 117 .end 118 119 // Support for u8 Bytes::swap_u8(u8 x) 120 .inline _raw_swap_u8,1 |