| 626 | } |
| 627 | |
| 628 | static __inline uint64_t |
| 629 | atomic_load_64(volatile uint64_t *p) |
| 630 | { |
| 631 | uint64_t ret; |
| 632 | |
| 633 | /* |
| 634 | * The only way to atomically load 64 bits is with LDREXD which puts the |
| 635 | * exclusive monitor into the exclusive state, so reset it to open state |
| 636 | * with CLREX because we don't actually need to store anything. |
| 637 | */ |
| 638 | __asm __volatile( |
| 639 | "ldrexd %Q[ret], %R[ret], [%[ptr]] \n" |
| 640 | "clrex \n" |
| 641 | : [ret] "=&r" (ret) |
| 642 | : [ptr] "r" (p) |
| 643 | : "cc", "memory"); |
| 644 | return (ret); |
| 645 | } |
| 646 | |
| 647 | static __inline uint64_t |
| 648 | atomic_load_acq_64(volatile uint64_t *p) |
no outgoing calls
no test coverage detected