Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1343 → Rev 1344

/kernel/trunk/kernel.asm
3397,32 → 3397,45
;3 - rdmsr. Counter in edx. (edx:eax) [esi:edi, edx] => [edx:esi, ecx]. Ret in ebx:eax. Block. ok.
;4 - wrmsr. Counter in edx. (edx:eax) [esi:edi, edx] => [edx:esi, ecx]. Ret in ebx:eax. Block. ok.
;---------------------------------------------------------------------------------------------
iglobal
align 4
sheduler:
dd sys_sheduler.00
dd change_task
dd sys_sheduler.02
dd sys_sheduler.03
dd sys_sheduler.04
endg
sys_sheduler:
; old sys_sheduler ;noname & halyavin
; cmp eax,0
; je shed_counter
; cmp eax,2
; je perf_control
; cmp eax,3
; je rdmsr_instr
; cmp eax,4
; je wrmsr_instr
; cmp eax,1
; jne not_supported
; call change_task ;delay,0
;rewritten by <Lrz> 29.12.2009
jmp dword [sheduler+eax*4]
;.shed_counter:
.00:
mov eax,[context_counter]
mov [esp+36],eax
ret
 
;rewritten by <Lrz> 15.11.2009
test eax,eax
jz .shed_counter ;eax=0
dec eax
jz change_task ;eax=1
dec eax
jz .perf_control ;eax=2
dec eax
jz .rdmsr_instr ;eax=3
dec eax
jnz @f
;wrmsr_instr ;eax=4
.02:
;.perf_control:
test ebx,ebx
jz modify_pce ;if ecx=0
dec ebx
jz is_cache_enabled ;if ecx=1
dec ebx
jz cache_enable ;if ecx=2
ret
.03:
;.rdmsr_instr:
;now counter in ecx
;(edx:eax) esi:edi => edx:esi
mov eax,esi
; mov ecx,edx
rdmsr
mov [esp+36],eax
mov [esp+24],edx ;ret in ebx?
ret
 
.04:
;.wrmsr_instr:
;now counter in ecx
;(edx:eax) esi:edi => edx:esi
3439,41 → 3452,13
je @f
 
mov eax, esi
; mov ecx,edx
wrmsr
; mov [esp + 36], eax
; mov [esp + 24], edx ;ret in ebx?
; mov [esp + 32], eax
; mov [esp + 20], edx ;ret in ebx?
@@:
ret
 
.shed_counter:
mov eax,[context_counter]
mov [esp+36],eax
ret
.perf_control:
; inc eax ;now eax=3
add eax,3 ;restore eax=3
cmp ebx,eax
je cache_disable
dec eax
cmp ebx,eax
je cache_enable
dec eax
cmp ebx,eax
je is_cache_enabled
dec eax
cmp ebx,eax
je modify_pce
ret
 
.rdmsr_instr:
;now counter in ecx
;(edx:eax) esi:edi => edx:esi
mov eax,esi
rdmsr
mov [esp+36],eax
mov [esp+24],edx ;ret in ebx?
ret
 
cache_disable:
mov eax,cr0
or eax,01100000000000000000000000000000b