src/hotspot/os_cpu/bsd_x86/orderAccess_bsd_x86.hpp
changeset 59247 56bf71d64d51
parent 54323 846bc643f4ef
equal deleted inserted replaced
59246:fcad92f425c5 59247:56bf71d64d51
    62 inline void OrderAccess::cross_modify_fence() {
    62 inline void OrderAccess::cross_modify_fence() {
    63   int idx = 0;
    63   int idx = 0;
    64   __asm__ volatile ("cpuid " : "+a" (idx) : : "ebx", "ecx", "edx", "memory");
    64   __asm__ volatile ("cpuid " : "+a" (idx) : : "ebx", "ecx", "edx", "memory");
    65 }
    65 }
    66 
    66 
    67 template<>
       
    68 struct OrderAccess::PlatformOrderedStore<1, RELEASE_X_FENCE>
       
    69 {
       
    70   template <typename T>
       
    71   void operator()(T v, volatile T* p) const {
       
    72     __asm__ volatile (  "xchgb (%2),%0"
       
    73                       : "=q" (v)
       
    74                       : "0" (v), "r" (p)
       
    75                       : "memory");
       
    76   }
       
    77 };
       
    78 
       
    79 template<>
       
    80 struct OrderAccess::PlatformOrderedStore<2, RELEASE_X_FENCE>
       
    81 {
       
    82   template <typename T>
       
    83   void operator()(T v, volatile T* p) const {
       
    84     __asm__ volatile (  "xchgw (%2),%0"
       
    85                       : "=r" (v)
       
    86                       : "0" (v), "r" (p)
       
    87                       : "memory");
       
    88   }
       
    89 };
       
    90 
       
    91 template<>
       
    92 struct OrderAccess::PlatformOrderedStore<4, RELEASE_X_FENCE>
       
    93 {
       
    94   template <typename T>
       
    95   void operator()(T v, volatile T* p) const {
       
    96     __asm__ volatile (  "xchgl (%2),%0"
       
    97                       : "=r" (v)
       
    98                       : "0" (v), "r" (p)
       
    99                       : "memory");
       
   100   }
       
   101 };
       
   102 
       
   103 #ifdef AMD64
       
   104 template<>
       
   105 struct OrderAccess::PlatformOrderedStore<8, RELEASE_X_FENCE>
       
   106 {
       
   107   template <typename T>
       
   108   void operator()(T v, volatile T* p) const {
       
   109     __asm__ volatile (  "xchgq (%2), %0"
       
   110                       : "=r" (v)
       
   111                       : "0" (v), "r" (p)
       
   112                       : "memory");
       
   113   }
       
   114 };
       
   115 #endif // AMD64
       
   116 
       
   117 #endif // OS_CPU_BSD_X86_ORDERACCESS_BSD_X86_HPP
    67 #endif // OS_CPU_BSD_X86_ORDERACCESS_BSD_X86_HPP