32 33 // Get current sp 34 .inline _get_current_sp,0 35 .volatile 36 movq %rsp, %rax 37 .end 38 39 // Get current fp 40 .inline _get_current_fp,0 41 .volatile 42 movq %rbp, %rax 43 .end 44 45 // Support for os::rdtsc() 46 .inline _raw_rdtsc,0 47 rdtsc 48 salq $32, %rdx 49 orq %rdx, %rax 50 .end 51 52 // Support for jint Atomic::add(jint add_value, volatile jint* dest) 53 .inline _Atomic_add,2 54 movl %edi, %eax // save add_value for return 55 lock 56 xaddl %edi, (%rsi) 57 addl %edi, %eax 58 .end 59 60 // Support for jlong Atomic::add(jlong add_value, volatile jlong* dest) 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(jint exchange_value, volatile jint* dest). 69 .inline _Atomic_xchg,2 70 xchgl (%rsi), %edi 71 movl %edi, %eax 72 .end 73 74 // Support for jlong Atomic::xchg(jlong exchange_value, volatile jlong* dest). 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, | 32 33 // Get current sp 34 .inline _get_current_sp,0 35 .volatile 36 movq %rsp, %rax 37 .end 38 39 // Get current fp 40 .inline _get_current_fp,0 41 .volatile 42 movq %rbp, %rax 43 .end 44 45 // Support for os::rdtsc() 46 .inline _raw_rdtsc,0 47 rdtsc 48 salq $32, %rdx 49 orq %rdx, %rax 50 .end 51 52 // Support for jint Atomic::add(volatile jint* dest, jint add_value) 53 .inline _Atomic_add,2 54 movl %edi, %eax // save add_value for return 55 lock 56 xaddl %edi, (%rsi) 57 addl %edi, %eax 58 .end 59 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(jint exchange_value, volatile jint* dest). 69 .inline _Atomic_xchg,2 70 xchgl (%rsi), %edi 71 movl %edi, %eax 72 .end 73 74 // Support for jlong Atomic::xchg(jlong exchange_value, volatile jlong* dest). 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, |