Changeset 7103 in vbox
- Timestamp:
- Feb 25, 2008 12:10:04 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asm.h
r7090 r7103 2028 2028 uint32_t u32 = (uint32_t)u64; 2029 2029 __asm__ __volatile__(/*"xchgl %%esi, %5\n\t"*/ 2030 "xchgl %%ebx, % 2\n\t"2030 "xchgl %%ebx, %3\n\t" 2031 2031 "1:\n\t" 2032 "movl (%4), %%eax\n\t" 2033 "movl 4(%4), %%edx\n\t" 2034 "lock; cmpxchg8b (%4)\n\t" 2032 "lock; cmpxchg8b (%5)\n\t" 2035 2033 "jnz 1b\n\t" 2036 "xchgl %%ebx, % 2\n\t"2034 "xchgl %%ebx, %3\n\t" 2037 2035 /*"xchgl %%esi, %5\n\t"*/ 2038 2036 : "=A" (u64), 2039 2037 "=m" (*pu64) 2040 : "m" ( u32 ), 2038 : "0" (*pu64), 2039 "m" ( u32 ), 2041 2040 "c" ( (uint32_t)(u64 >> 32) ), 2042 2041 "S" (pu64) ); 2043 2042 # else /* !PIC */ 2044 2043 __asm__ __volatile__("1:\n\t" 2045 "movl (%4), %%eax\n\t" 2046 "movl 4(%4), %%edx\n\t" 2047 "lock; cmpxchg8b (%4)\n\t" 2044 "lock; cmpxchg8b %1\n\t" 2048 2045 "jnz 1b\n\t" 2049 2046 : "=A" (u64), 2050 2047 "=m" (*pu64) 2051 : " b" ( (uint32_t)u64),2052 " c" ( (uint32_t)(u64 >> 32)),2053 " S" (pu64));2048 : "0" (*pu64), 2049 "b" ( (uint32_t)u64 ), 2050 "c" ( (uint32_t)(u64 >> 32) )); 2054 2051 # endif 2055 2052 # else … … 2059 2056 mov ecx, dword ptr [u64 + 4] 2060 2057 mov edi, pu64 2061 retry:2062 2058 mov eax, dword ptr [edi] 2063 2059 mov edx, dword ptr [edi + 4] 2060 retry: 2064 2061 lock cmpxchg8b [edi] 2065 2062 jnz retry … … 2131 2128 mov rcx, dword ptr [u128 + 8] 2132 2129 mov rdi, pu128 2133 retry:2134 2130 mov rax, dword ptr [rdi] 2135 2131 mov rdx, dword ptr [rdi + 8] 2132 retry: 2136 2133 lock cmpxchg16b [rdi] 2137 2134 jnz retry
Note:
See TracChangeset
for help on using the changeset viewer.