Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

110 lines
2.6 KiB

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