| 479 | } |
| 480 | |
| 481 | static __inline int |
| 482 | atomic_cmpset_64_i586(volatile uint64_t *dst, uint64_t expect, uint64_t src) |
| 483 | { |
| 484 | u_char res; |
| 485 | |
| 486 | __asm __volatile( |
| 487 | " " MPLOCKED " " |
| 488 | " cmpxchg8b %1 ; " |
| 489 | " sete %0" |
| 490 | : "=q" (res), /* 0 */ |
| 491 | "+m" (*dst), /* 1 */ |
| 492 | "+A" (expect) /* 2 */ |
| 493 | : "b" ((uint32_t)src), /* 3 */ |
| 494 | "c" ((uint32_t)(src >> 32)) /* 4 */ |
| 495 | : "memory", "cc"); |
| 496 | return (res); |
| 497 | } |
| 498 | |
| 499 | static __inline int |
| 500 | atomic_fcmpset_64_i586(volatile uint64_t *dst, uint64_t *expect, uint64_t src) |