- jmp 0b
-
-
-LEAF_ENTRY(lck_mtx_lock_decr_waiter)
- LOAD_LMTX_REG(L_ARG0) /* fetch lock pointer - no indirection here */
-1:
- mov M_STATE(LMTX_REG), LMTX_C_REG32
-
- test $(M_WAITERS_MSK), LMTX_C_REG
- je 2f
- test $(M_ILOCKED_MSK), LMTX_C_REG /* have to wait for interlock to clear */
- jne 3f
-
- mov LMTX_C_REG, LMTX_A_REG /* eax contains snapshot for cmpxchgl */
- dec LMTX_C_REG /* decrement waiter count */
- lock
- cmpxchg LMTX_C_REG32, M_STATE(LMTX_REG) /* atomic compare and exchange */
- jne 3f /* branch on failure to spin loop */
-
- mov $1, LMTX_RET_REG
- LEAF_RET
-2:
- xor LMTX_RET_REG, LMTX_RET_REG
- LEAF_RET
-3:
- PAUSE
- jmp 1b
-
-
-
-LEAF_ENTRY(lck_mtx_lock_get_pri)
- LOAD_LMTX_REG(L_ARG0) /* fetch lock pointer - no indirection here */
-1: