Windows2000/private/ntos/ex/i386/resoura.asm
2020-09-30 17:12:32 +02:00

111 lines
2.6 KiB
NASM

title "Resource package x86 optimzations"
;Copyright (c) 1991 Microsoft Corporation
;Module Name:
; resoura.asm
;Abstract:
; Optimized preambles for some HOT resource code paths.
; Takes first crack at satisfying the ExResource API, if it
; can't it passes it onto the full blown API.
; Optimized for UP free builds only!
;Author:
; Ken Reneris (kenr) 13-Jan-1992
;Revision History:
.386p
include ks386.inc
include callconv.inc ; calling convention macros
include mac386.inc
EXTRNP _ExpReleaseResourceForThread,2
ExculsiveWaiter equ 1 ; From ddkresrc.c
SharedWaiter equ 2 ; From ddkresrc.c
AnyWaiter equ (ExculsiveWaiter+SharedWaiter)
_TEXT$00 SEGMENT PARA PUBLIC 'CODE'
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
ifdef NT_UP
ife DBG
; VOID
; ExReleaseResourceForThread(
; IN PNTDDK_ERESOURCE Resource,
; IN ERESOURCE_THREAD OurThread
; )
; Routine Description:
; This routine release the input resource the indcated thread. The
; resource can have been acquired for either shared or exclusive access.
; Arguments:
; Resource - Supplies the resource to release
; Thread - Supplies the thread that originally acquired the resource
; Return Value:
; None.
cPublicProc _ExReleaseResourceForThread,2
cPublicFpo 2,0
mov ecx, [esp+4] ; resource
mov eax, [esp+8] ; our thread
cli
test byte ptr [ecx].RsFlag, AnyWaiter ; any waiter?
jnz short rrt_longway_ddk ; yes, go long
test byte ptr [ecx].RsFlag, RsOwnedExclusive ; exclusive?
jz short rrt_longway_ddk ; bad release, go abort
mov edx, [ecx].RsOwnerThreads ; (edx) = ownerthread table
cmp [edx], eax ; our thread at table[0]?
jne short rrt_longway_ddk ; bad release, go abort
mov eax, [ecx].RsOwnerCounts
dec byte ptr [eax] ; thread count -= 1
jnz short rrt_exit_ddk ; if not zero, all done
mov dword ptr [edx], 0 ; clear thread table[0]
dec word ptr [ecx].RsActiveCount ; resource count -= 1
and byte ptr [ecx].RsFlag, not RsOwnedExclusive
rrt_exit_ddk:
sti
stdRET _ExReleaseResourceForThread
rrt_longway_ddk:
sti
jmp _ExpReleaseResourceForThread@8
stdENDP _ExReleaseResourceForThread
endif
endif
_TEXT$00 ends
end