Deleted cross order of registers in functions 44, 45. Some optimizations of them.

git-svn-id: svn://kolibrios.org@765 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Rus 2008-03-01 11:43:09 +00:00
parent 70dc0ef970
commit 8d83c4684d
2 changed files with 44 additions and 44 deletions

View File

@ -145,10 +145,10 @@ iglobal
dd sys_getbackground ; 39-GetBackgroundSize,ReadBgrData,. dd sys_getbackground ; 39-GetBackgroundSize,ReadBgrData,.
dd 0 dd 0
dd 0 dd 0
dd 0 ; 42-ReadIrqData dd 0
dd sys_outport ; 43-SendDeviceData dd sys_outport ; 43-SendDeviceData
dd sys_programirq ; 44-ProgramIrqs dd 0
dd reserve_free_irq ; 45-ReserveIrq and FreeIrq dd 0
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
dd display_number ; 47-WriteNum dd display_number ; 47-WriteNum
dd display_settings ; 48-SetRedrawType and SetButtonType dd display_settings ; 48-SetRedrawType and SetButtonType
@ -227,8 +227,8 @@ iglobal
dd syscall_getirqowner ; 41-GetIrqOwner dd syscall_getirqowner ; 41-GetIrqOwner
dd get_irq_data ; 42-ReadIrqData dd get_irq_data ; 42-ReadIrqData
dd cross_order ; 43-SendDeviceData dd cross_order ; 43-SendDeviceData
dd cross_order ; 44-ProgramIrqs dd sys_programirq ; 44-ProgramIrqs
dd cross_order ; 45-ReserveIrq and FreeIrq dd reserve_free_irq ; 45-ReserveIrq and FreeIrq
dd cross_order ; 46-ReservePortArea and FreePortArea dd cross_order ; 46-ReservePortArea and FreePortArea
dd cross_order ; 47-WriteNum dd cross_order ; 47-WriteNum
dd cross_order ; 48-SetRedrawType and SetButtonType dd cross_order ; 48-SetRedrawType and SetButtonType

View File

@ -3888,28 +3888,29 @@ align 4
sys_programirq: sys_programirq:
mov edi,[TASK_BASE] mov eax, [TASK_BASE]
add eax,[edi+TASKDATA.mem_start] add ebx, [eax + TASKDATA.mem_start]
cmp ebx,16 cmp ecx, 16
jae .not_owner jae .not_owner
mov edi,[TASK_BASE] mov edi, [eax + TASKDATA.pid]
mov edi,[edi+TASKDATA.pid] cmp edi, [irq_owner + 4 * ecx]
cmp edi,[irq_owner+ebx*4] je .spril1
je spril1
.not_owner: .not_owner:
mov [esp+36],dword 1 xor ecx, ecx
ret jmp .end
spril1: .spril1:
shl ecx, 6
mov esi, ebx
lea edi, [irq00read + ecx]
push 16
pop ecx
mov esi,eax
shl ebx,6
add ebx,irq00read
mov edi,ebx
mov ecx,16
cld cld
rep movsd rep movsd
mov [esp+36],dword 0 .end:
mov [esp+32], ecx
ret ret
@ -4173,35 +4174,34 @@ free_port_area:
reserve_free_irq: reserve_free_irq:
mov ecx, 1 xor esi, esi
cmp ebx, 16 inc esi
jae fril1 cmp ecx, 16
test eax,eax jae ril1
jz reserve_irq
lea edi,[irq_owner+ebx*4] lea ecx, [irq_owner + 4 * ecx]
mov edx,[edi] mov edx, [ecx]
mov eax,[TASK_BASE] mov eax, [TASK_BASE]
cmp edx,[eax+TASKDATA.pid] mov edi, [eax + TASKDATA.pid]
jne fril1 dec ebx
dec ecx jnz reserve_irq
mov [edi],ecx
fril1: cmp edx, edi
mov [esp+36],ecx ; return in eax jne ril1
ret dec esi
mov [ecx], esi
jmp ril1
reserve_irq: reserve_irq:
lea edi,[irq_owner+ebx*4] cmp dword [ecx], 0
cmp dword [edi], 0 jne ril1
jnz ril1
mov edx,[TASK_BASE] mov [ecx], edi
mov edx,[edx+TASKDATA.pid] dec esi
mov [edi],edx
dec ecx
ril1: ril1:
mov [esp+36],ecx ; return in eax mov [esp+32], esi ; return in eax
ret ret
drawbackground: drawbackground: