< prev index next >

src/hotspot/os_cpu/solaris_x86/solaris_x86_64.il

Print this page




  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,
  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


  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(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
< prev index next >