src/os_cpu/linux_zero/vm/os_linux_zero.hpp

Print this page




  36 
  37   // Atomically copy 64 bits of data
  38   static void atomic_copy64(volatile void *src, volatile void *dst) {
  39 #if defined(PPC32)
  40     double tmp;
  41     asm volatile ("lfd  %0, 0(%1)\n"
  42                   "stfd %0, 0(%2)\n"
  43                   : "=f"(tmp)
  44                   : "b"(src), "b"(dst));
  45 #elif defined(S390) && !defined(_LP64)
  46     double tmp;
  47     asm volatile ("ld  %0, 0(%1)\n"
  48                   "std %0, 0(%2)\n"
  49                   : "=r"(tmp)
  50                   : "a"(src), "a"(dst));
  51 #else
  52     *(jlong *) dst = *(jlong *) src;
  53 #endif
  54   }
  55 



  56 #endif // OS_CPU_LINUX_ZERO_VM_OS_LINUX_ZERO_HPP


  36 
  37   // Atomically copy 64 bits of data
  38   static void atomic_copy64(volatile void *src, volatile void *dst) {
  39 #if defined(PPC32)
  40     double tmp;
  41     asm volatile ("lfd  %0, 0(%1)\n"
  42                   "stfd %0, 0(%2)\n"
  43                   : "=f"(tmp)
  44                   : "b"(src), "b"(dst));
  45 #elif defined(S390) && !defined(_LP64)
  46     double tmp;
  47     asm volatile ("ld  %0, 0(%1)\n"
  48                   "std %0, 0(%2)\n"
  49                   : "=r"(tmp)
  50                   : "a"(src), "a"(dst));
  51 #else
  52     *(jlong *) dst = *(jlong *) src;
  53 #endif
  54   }
  55 
  56   // Amount beyond the callee frame size that we bang the stack.
  57   static int extra_bang_size_in_bytes();
  58 
  59 #endif // OS_CPU_LINUX_ZERO_VM_OS_LINUX_ZERO_HPP