forked from KolibriOS/kolibrios
resampler optimization, reduce cache pollution
git-svn-id: svn://kolibrios.org@285 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5462727f9c
commit
6ab013ea0b
@ -566,14 +566,18 @@ proc new_mem_resize stdcall, new_size:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
; param
|
||||||
|
; eax= linear address
|
||||||
|
;
|
||||||
|
; retval
|
||||||
|
; eax= phisical page address
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc get_pg_addr stdcall, lin_addr:dword
|
get_pg_addr:
|
||||||
mov ebx, [lin_addr]
|
shr eax, 12
|
||||||
shr ebx, 12
|
mov eax, [pages_tab+eax*4]
|
||||||
mov eax, [pages_tab+ebx*4]
|
|
||||||
and eax, 0xFFFFF000
|
and eax, 0xFFFFF000
|
||||||
ret
|
ret
|
||||||
endp
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc page_fault_handler
|
proc page_fault_handler
|
||||||
|
@ -981,7 +981,7 @@ devices dd (R8500 shl 16)+VID_ATI
|
|||||||
dd (R9800XT shl 16)+VID_ATI
|
dd (R9800XT shl 16)+VID_ATI
|
||||||
dd 0 ;terminator
|
dd 0 ;terminator
|
||||||
|
|
||||||
version dd 0x00020002
|
version dd 0x00030003
|
||||||
|
|
||||||
sz_ati_srv db 'HWCURSOR',0
|
sz_ati_srv db 'HWCURSOR',0
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ if used AllocPages
|
|||||||
extrn AllocPages
|
extrn AllocPages
|
||||||
end if
|
end if
|
||||||
if used FreePage
|
if used FreePage
|
||||||
extrn zFreePage
|
extrn FreePage
|
||||||
end if
|
end if
|
||||||
if used MapPage
|
if used MapPage
|
||||||
extrn MapPage
|
extrn MapPage
|
||||||
|
@ -190,22 +190,22 @@ proc CreateBuffer stdcall, format:dword
|
|||||||
mov [edi+STREAM.magic], 'WAVE'
|
mov [edi+STREAM.magic], 'WAVE'
|
||||||
mov [edi+STREAM.size], STREAM_SIZE
|
mov [edi+STREAM.size], STREAM_SIZE
|
||||||
|
|
||||||
stdcall KernelAlloc, 180*1024
|
stdcall KernelAlloc, 172*1024
|
||||||
|
|
||||||
mov edi, [str]
|
mov edi, [str]
|
||||||
mov [edi+STREAM.base], eax
|
mov [edi+STREAM.base], eax
|
||||||
|
add eax, 0x1000
|
||||||
mov [edi+STREAM.seg_0], eax
|
mov [edi+STREAM.seg_0], eax
|
||||||
mov [edi+STREAM.curr_seg], eax
|
mov [edi+STREAM.curr_seg], eax
|
||||||
mov [edi+STREAM.notify_off1], eax
|
mov [edi+STREAM.notify_off1], eax
|
||||||
add eax, 0x7FFF
|
add eax, 0x8000
|
||||||
mov [edi+STREAM.lim_0], eax
|
mov [edi+STREAM.lim_0], eax
|
||||||
inc eax
|
add eax, 0x1000
|
||||||
mov [edi+STREAM.seg_1], eax
|
mov [edi+STREAM.seg_1], eax
|
||||||
mov [edi+STREAM.notify_off2], eax
|
mov [edi+STREAM.notify_off2], eax
|
||||||
add eax, 0x7FFF
|
add eax, 0x8000
|
||||||
mov [edi+STREAM.limit], eax
|
mov [edi+STREAM.limit], eax
|
||||||
mov [edi+STREAM.lim_1], eax
|
mov [edi+STREAM.lim_1], eax
|
||||||
inc eax
|
|
||||||
|
|
||||||
mov [edi+STREAM.work_buff], eax
|
mov [edi+STREAM.work_buff], eax
|
||||||
mov [edi+STREAM.work_read], eax
|
mov [edi+STREAM.work_read], eax
|
||||||
@ -213,8 +213,6 @@ proc CreateBuffer stdcall, format:dword
|
|||||||
mov [edi+STREAM.work_count], 0
|
mov [edi+STREAM.work_count], 0
|
||||||
add eax, 0x10000
|
add eax, 0x10000
|
||||||
mov [edi+STREAM.work_top], eax
|
mov [edi+STREAM.work_top], eax
|
||||||
add eax, 1024*32
|
|
||||||
mov [edi+STREAM.r_buff], eax
|
|
||||||
|
|
||||||
mov ebx, [CURRENT_TASK]
|
mov ebx, [CURRENT_TASK]
|
||||||
shl ebx, 5
|
shl ebx, 5
|
||||||
@ -245,8 +243,18 @@ proc CreateBuffer stdcall, format:dword
|
|||||||
mov ebx, [resampler_params+eax+12]
|
mov ebx, [resampler_params+eax+12]
|
||||||
mov [edi+STREAM.resample], ebx
|
mov [edi+STREAM.resample], ebx
|
||||||
|
|
||||||
|
mov edx, [edi+STREAM.base]
|
||||||
|
lea eax, [edx+0x9000]
|
||||||
|
call GetPgAddr ;eax
|
||||||
|
call FreePage ;eax
|
||||||
|
|
||||||
|
mov eax, edx
|
||||||
|
lea ebx, [edx+0x9000]
|
||||||
|
call GetPgAddr ;eax
|
||||||
|
stdcall MapPage, ebx, eax, dword 3
|
||||||
|
|
||||||
mov edi, [edi+STREAM.base]
|
mov edi, [edi+STREAM.base]
|
||||||
mov ecx, 180*1024/4
|
mov ecx, (168*1024)/4
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
@ -338,52 +346,56 @@ align 4
|
|||||||
proc play_buffer stdcall, str:dword
|
proc play_buffer stdcall, str:dword
|
||||||
|
|
||||||
mov ebx, [str]
|
mov ebx, [str]
|
||||||
|
|
||||||
cmp [ebx+STREAM.magic], 'WAVE'
|
cmp [ebx+STREAM.magic], 'WAVE'
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [ebx+STREAM.size], STREAM_SIZE
|
cmp [ebx+STREAM.size], STREAM_SIZE
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
mov [ebx+STREAM.flags], SND_PLAY
|
mov edi,[ebx+STREAM.work_buff]
|
||||||
|
mov [ebx+STREAM.work_read], edi
|
||||||
mov eax,[ebx+STREAM.work_buff]
|
mov [ebx+STREAM.work_write], edi
|
||||||
mov [ebx+STREAM.work_read], eax
|
|
||||||
mov [ebx+STREAM.work_write], eax
|
|
||||||
mov [ebx+STREAM.work_count], 0
|
mov [ebx+STREAM.work_count], 0
|
||||||
|
|
||||||
mov eax, [ebx+STREAM.seg_0]
|
mov edx, [ebx+STREAM.base]
|
||||||
mov [ebx+STREAM.curr_seg], eax
|
add edx, 0x1000
|
||||||
|
mov [ebx+STREAM.seg_0], edx
|
||||||
|
mov [ebx+STREAM.curr_seg], edx
|
||||||
|
add edx, 0x8000
|
||||||
|
mov [ebx+STREAM.lim_0], edx
|
||||||
|
add edx, 0x1000
|
||||||
|
mov [ebx+STREAM.seg_1], edx
|
||||||
|
add edx, 0x8000
|
||||||
|
mov [ebx+STREAM.lim_1], edx
|
||||||
|
|
||||||
mov esi, [ebx+STREAM.curr_seg]
|
mov edx, [ebx+STREAM.seg_0]
|
||||||
mov edi, [ebx+STREAM.work_write]
|
mov ecx, -128
|
||||||
mov edx, [ebx+STREAM.r_buff]
|
|
||||||
|
|
||||||
mov ecx, 32
|
|
||||||
mov eax, [ebx+STREAM.r_silence]
|
mov eax, [ebx+STREAM.r_silence]
|
||||||
@@:
|
@@:
|
||||||
mov [edx], eax
|
mov [edx+ecx], eax
|
||||||
add edx, 4
|
add ecx, 4
|
||||||
dec ecx
|
|
||||||
jnz @B
|
jnz @B
|
||||||
|
|
||||||
mov edx, [ebx+STREAM.r_buff]
|
stdcall [ebx+STREAM.resample], edi, edx,\
|
||||||
|
|
||||||
stdcall [ebx+STREAM.resample], edi, esi, edx,\
|
|
||||||
[ebx+STREAM.r_dt],[ebx+STREAM.r_size],[ebx+STREAM.r_end]
|
[ebx+STREAM.r_dt],[ebx+STREAM.r_size],[ebx+STREAM.r_end]
|
||||||
|
|
||||||
mov ebx, [str]
|
mov ebx, [str]
|
||||||
|
|
||||||
add [ebx+STREAM.work_count], eax;
|
add [ebx+STREAM.work_count], eax
|
||||||
add [ebx+STREAM.work_write], eax;
|
add [ebx+STREAM.work_write], eax
|
||||||
|
|
||||||
mov eax, [ebx+STREAM.r_size]
|
mov edx, [ebx+STREAM.r_size]
|
||||||
add [ebx+STREAM.curr_seg], eax
|
add [ebx+STREAM.curr_seg], edx
|
||||||
|
|
||||||
; if DEBUG
|
mov [ebx+STREAM.flags], SND_PLAY
|
||||||
; mov esi, msgPlay
|
|
||||||
; call [SysMsgBoardStr]
|
mov eax, [ebx+STREAM.r_silence]
|
||||||
; end if
|
mov edi, [ebx+STREAM.work_write]
|
||||||
|
mov ecx, [ebx+STREAM.work_top]
|
||||||
|
sub ecx, edi
|
||||||
|
shr ecx, 2
|
||||||
|
cld
|
||||||
|
rep stosd
|
||||||
|
|
||||||
stdcall dev_play, [hSound]
|
stdcall dev_play, [hSound]
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -437,27 +449,35 @@ proc set_buffer stdcall, str:dword,src:dword,offs:dword,size:dword
|
|||||||
cmp esi, new_app_base
|
cmp esi, new_app_base
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov ecx, [size]
|
mov edi, [offs]
|
||||||
test ecx, ecx
|
mov ecx, 0x8000
|
||||||
jz .fail
|
|
||||||
|
|
||||||
mov eax, [edx+STREAM.base]
|
sub ecx, edi
|
||||||
add eax, [offs]
|
jbe .seg_1
|
||||||
|
|
||||||
cmp eax, [edx+STREAM.base]
|
sub [size], ecx
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov edi, eax
|
add edi, [edx+STREAM.base]
|
||||||
add eax, ecx
|
add edi, 0x1000
|
||||||
sub eax, 1
|
|
||||||
|
|
||||||
cmp eax, [edx+STREAM.limit]
|
|
||||||
ja .fail
|
|
||||||
|
|
||||||
shr ecx, 2
|
shr ecx, 2
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
|
jmp @F
|
||||||
|
.seg_1:
|
||||||
|
add edi, [edx+STREAM.base]
|
||||||
|
add edi, 0x1000
|
||||||
|
@@:
|
||||||
|
add edi, 0x1000
|
||||||
|
mov ecx, [size]
|
||||||
|
test ecx, ecx
|
||||||
|
jz .done
|
||||||
|
cmp ecx, 0x8000
|
||||||
|
ja .fail
|
||||||
|
|
||||||
|
shr ecx, 2
|
||||||
|
rep movsd
|
||||||
|
.done:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
ret
|
ret
|
||||||
@ -505,33 +525,6 @@ proc free_stream
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
if 0
|
|
||||||
align 4
|
|
||||||
proc check_stream
|
|
||||||
|
|
||||||
xor edx, edx
|
|
||||||
mov ecx, [play_count]
|
|
||||||
.l1:
|
|
||||||
mov esi, [play_list+edx]
|
|
||||||
|
|
||||||
mov eax, [esi+STR.curr_seg]
|
|
||||||
cmp eax, [esi+STR.lim_0]
|
|
||||||
jb .next
|
|
||||||
|
|
||||||
mov eax, [esi+STREAM.seg_0]
|
|
||||||
mov ecx, [esi+STREAM.lim_0]
|
|
||||||
xchg eax, [ebx+STREAM.seg_1]
|
|
||||||
xchg ecx, [ebx+STREAM.lim_1]
|
|
||||||
mov [esi+STREAM.seg_0], eax
|
|
||||||
mov [esi+STREAM.lim_0], ecx
|
|
||||||
mov [esi+STR.curr_seg], eax
|
|
||||||
.next:
|
|
||||||
add edx, 4
|
|
||||||
loop .l1
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
end if
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc prepare_playlist
|
proc prepare_playlist
|
||||||
|
|
||||||
@ -723,7 +716,7 @@ mm80 dq 0x8080808080808080
|
|||||||
mm_mask dq 0xFF00FF00FF00FF00
|
mm_mask dq 0xFF00FF00FF00FF00
|
||||||
|
|
||||||
stream_map dd 0xFFFF ; 16
|
stream_map dd 0xFFFF ; 16
|
||||||
version dd 0x00020002
|
version dd 0x00030003
|
||||||
|
|
||||||
szInfinity db 'INFINITY',0
|
szInfinity db 'INFINITY',0
|
||||||
szSound db 'SOUND',0
|
szSound db 'SOUND',0
|
||||||
|
@ -91,7 +91,6 @@ struc STREAM
|
|||||||
.work_write dd 0
|
.work_write dd 0
|
||||||
.work_count dd 0
|
.work_count dd 0
|
||||||
.work_top dd 0
|
.work_top dd 0
|
||||||
.r_buff dd 0
|
|
||||||
.r_size dd 0
|
.r_size dd 0
|
||||||
.r_end dd 0
|
.r_end dd 0
|
||||||
.r_dt dd 0
|
.r_dt dd 0
|
||||||
@ -112,7 +111,7 @@ struc STREAM
|
|||||||
.resample dd 0
|
.resample dd 0
|
||||||
}
|
}
|
||||||
|
|
||||||
STREAM_SIZE equ 27*4
|
STREAM_SIZE equ 26*4
|
||||||
|
|
||||||
virtual at 0
|
virtual at 0
|
||||||
STREAM STREAM
|
STREAM STREAM
|
||||||
|
@ -223,9 +223,8 @@ proc refill stdcall, str:dword
|
|||||||
.m2:
|
.m2:
|
||||||
mov esi, [ebx+STREAM.curr_seg]
|
mov esi, [ebx+STREAM.curr_seg]
|
||||||
mov edi, [ebx+STREAM.work_write]
|
mov edi, [ebx+STREAM.work_write]
|
||||||
mov edx, [ebx+STREAM.r_buff]
|
|
||||||
|
|
||||||
stdcall [ebx+STREAM.resample], edi, esi, edx,\
|
stdcall [ebx+STREAM.resample], edi, esi, \
|
||||||
[ebx+STREAM.r_dt],[ebx+STREAM.r_size],[ebx+STREAM.r_end]
|
[ebx+STREAM.r_dt],[ebx+STREAM.r_size],[ebx+STREAM.r_end]
|
||||||
|
|
||||||
mov ebx, [str]
|
mov ebx, [str]
|
||||||
@ -238,6 +237,13 @@ proc refill stdcall, str:dword
|
|||||||
cmp eax, [ebx+STREAM.lim_0]
|
cmp eax, [ebx+STREAM.lim_0]
|
||||||
jb @f
|
jb @f
|
||||||
|
|
||||||
|
mov esi, [ebx+STREAM.seg_0]
|
||||||
|
lea edi, [esi-128]
|
||||||
|
add esi, 0x7F80
|
||||||
|
mov ecx, 128/4
|
||||||
|
cld
|
||||||
|
rep movsd
|
||||||
|
|
||||||
mov eax, [ebx+STREAM.seg_0]
|
mov eax, [ebx+STREAM.seg_0]
|
||||||
mov ecx, [ebx+STREAM.lim_0]
|
mov ecx, [ebx+STREAM.lim_0]
|
||||||
xchg eax, [ebx+STREAM.seg_1]
|
xchg eax, [ebx+STREAM.seg_1]
|
||||||
@ -273,19 +279,19 @@ proc refill stdcall, str:dword
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc resample_1 stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc resample_1 stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov edi, [r_buff]
|
; dest equ esp+8
|
||||||
add edi, 32*2
|
; src equ esp+12
|
||||||
mov esi, [src]
|
; r_dt equ esp+16
|
||||||
mov ecx, [r_size]
|
; r_size equ esp+20
|
||||||
shr ecx, 2
|
;r_end equ esp+24
|
||||||
rep movsd
|
|
||||||
|
|
||||||
mov edi, [dest]
|
mov edi, [dest]
|
||||||
mov edx, [r_buff]
|
mov edx, [src]
|
||||||
mov eax, 16
|
sub edx, 32*2
|
||||||
|
mov eax, 16
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
.l1:
|
.l1:
|
||||||
@ -318,43 +324,26 @@ align 16
|
|||||||
mov [edi], ebx
|
mov [edi], ebx
|
||||||
add edi, 4
|
add edi, 4
|
||||||
|
|
||||||
add eax, [esp+20] ;rdt
|
add eax, [esp+16]
|
||||||
cmp eax, [esp+28] ;r_end
|
cmp eax, [esp+24]
|
||||||
jb .l1
|
jb .l1
|
||||||
|
|
||||||
mov ebp, esp
|
mov ebp, esp
|
||||||
|
|
||||||
mov esi, [src]
|
|
||||||
add esi, [r_size]
|
|
||||||
sub esi, 32*2
|
|
||||||
mov edx, [r_buff]
|
|
||||||
mov ecx, 16
|
|
||||||
@@:
|
|
||||||
mov ebx, [esi]
|
|
||||||
mov [edx], ebx
|
|
||||||
add esi, 4
|
|
||||||
add edx, 4
|
|
||||||
dec ecx
|
|
||||||
jnz @B
|
|
||||||
|
|
||||||
sub edi, [dest]
|
sub edi, [dest]
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc resample_18 stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc resample_18 stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov edi, [r_buff]
|
|
||||||
add edi, 32
|
|
||||||
mov esi, [src]
|
|
||||||
mov ecx, [r_size]
|
|
||||||
shr ecx, 2
|
|
||||||
rep movsd
|
|
||||||
|
|
||||||
mov edi, [dest]
|
mov edi, [dest]
|
||||||
mov edx, [r_buff]
|
mov edx, [src]
|
||||||
|
sub edx, 32
|
||||||
|
|
||||||
mov esi, 16
|
mov esi, 16
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
@ -393,32 +382,18 @@ align 16
|
|||||||
mov [edi], ebx
|
mov [edi], ebx
|
||||||
add edi, 4
|
add edi, 4
|
||||||
|
|
||||||
add esi, [esp+20] ;rdt
|
add esi, [esp+16]
|
||||||
cmp esi, [esp+28] ;r_end
|
cmp esi, [esp+24]
|
||||||
jb .l1
|
jb .l1
|
||||||
|
|
||||||
mov ebp, esp
|
mov ebp, esp
|
||||||
|
|
||||||
mov esi, [src]
|
|
||||||
add esi, [r_size]
|
|
||||||
sub esi, 32
|
|
||||||
mov edx, [r_buff]
|
|
||||||
mov ecx, 8
|
|
||||||
@@:
|
|
||||||
mov ebx, [esi]
|
|
||||||
mov [edx], ebx
|
|
||||||
add esi, 4
|
|
||||||
add edx, 4
|
|
||||||
dec ecx
|
|
||||||
jnz @B
|
|
||||||
|
|
||||||
sub edi, [dest]
|
sub edi, [dest]
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc copy_stream stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc copy_stream stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov ecx, [r_size]
|
mov ecx, [r_size]
|
||||||
@ -432,93 +407,68 @@ proc copy_stream stdcall, dest:dword,src:dword,r_buff:dword,\
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc resample_2 stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc resample_2 stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov edi, [r_buff]
|
mov edx, [src]
|
||||||
add edi, 32*4
|
sub edx, 32*4
|
||||||
mov esi, [src]
|
mov edi, [dest]
|
||||||
mov ecx, [r_size]
|
mov ebx, [r_dt]
|
||||||
shr ecx, 2
|
mov eax, 16
|
||||||
rep movsd ;call memcpy
|
emms
|
||||||
|
|
||||||
mov edx, [r_buff]
|
|
||||||
mov edi, [dest]
|
|
||||||
mov ebx, [r_dt]
|
|
||||||
mov eax, 16
|
|
||||||
emms
|
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
.l1:
|
.l1:
|
||||||
mov ecx, eax
|
mov ecx, eax
|
||||||
mov esi, eax
|
mov esi, eax
|
||||||
and ecx, 0x7FFF
|
and ecx, 0x7FFF
|
||||||
shr esi, 15
|
shr esi, 15
|
||||||
lea esi, [edx+esi*4]
|
lea esi, [edx+esi*4]
|
||||||
|
|
||||||
movq mm0, [esi]
|
movq mm0, [esi]
|
||||||
movq mm1, mm0
|
movq mm1, mm0
|
||||||
|
|
||||||
movd mm2, ecx
|
movd mm2, ecx
|
||||||
punpcklwd mm2, mm2
|
punpcklwd mm2, mm2
|
||||||
movq mm3, qword [m7] ; // 0x8000
|
movq mm3, qword [m7] ;0x8000
|
||||||
|
|
||||||
psubw mm3, mm2 ; // 0x8000 - iconst
|
psubw mm3, mm2 ; ;0x8000 - iconst
|
||||||
punpckldq mm3, mm2
|
punpckldq mm3, mm2
|
||||||
|
|
||||||
pmulhw mm0, mm3
|
pmulhw mm0, mm3
|
||||||
pmullw mm1, mm3
|
pmullw mm1, mm3
|
||||||
|
|
||||||
movq mm4, mm1
|
movq mm4, mm1
|
||||||
punpcklwd mm1, mm0
|
punpcklwd mm1, mm0
|
||||||
punpckhwd mm4, mm0
|
punpckhwd mm4, mm0
|
||||||
paddd mm1, mm4
|
paddd mm1, mm4
|
||||||
psrad mm1, 15
|
psrad mm1, 15
|
||||||
packssdw mm1, mm1
|
packssdw mm1, mm1
|
||||||
movd [edi], mm1
|
movd [edi], mm1
|
||||||
add edi, 4
|
add edi, 4
|
||||||
|
|
||||||
add eax, ebx
|
add eax, ebx
|
||||||
cmp eax, [r_end]
|
cmp eax, [r_end]
|
||||||
jb .l1
|
jb .l1
|
||||||
emms
|
emms
|
||||||
|
|
||||||
mov esi, [src]
|
sub edi, [dest]
|
||||||
add esi, [r_size]
|
mov eax, edi
|
||||||
sub esi, 32*4
|
ret
|
||||||
mov edx, [r_buff]
|
|
||||||
mov ecx, 32
|
|
||||||
@@:
|
|
||||||
mov ebx, [esi]
|
|
||||||
mov [edx], ebx
|
|
||||||
add esi, 4
|
|
||||||
add edx, 4
|
|
||||||
dec ecx
|
|
||||||
jnz @B
|
|
||||||
|
|
||||||
sub edi, [dest]
|
|
||||||
mov eax, edi
|
|
||||||
ret
|
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc resample_28 stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc resample_28 stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov edi, [r_buff]
|
mov edx, [src]
|
||||||
add edi, 32*2
|
sub edx, 32*2
|
||||||
mov esi, [src]
|
mov edi, [dest]
|
||||||
mov ecx, [r_size]
|
mov ebx, [r_dt]
|
||||||
shr ecx, 2
|
mov eax, 16
|
||||||
rep movsd ;call memcpy
|
emms
|
||||||
|
movq mm7,[mm80]
|
||||||
mov edx, [r_buff]
|
movq mm6,[mm_mask]
|
||||||
mov edi, [dest]
|
|
||||||
mov ebx, [r_dt]
|
|
||||||
mov eax, 16
|
|
||||||
emms
|
|
||||||
movq mm7,[mm80]
|
|
||||||
movq mm6,[mm_mask]
|
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
.l1:
|
.l1:
|
||||||
@ -559,18 +509,6 @@ align 16
|
|||||||
jb .l1
|
jb .l1
|
||||||
emms
|
emms
|
||||||
|
|
||||||
mov esi, [src]
|
|
||||||
add esi, [r_size]
|
|
||||||
sub esi, 32*2
|
|
||||||
mov edx, [r_buff]
|
|
||||||
mov ecx, 16
|
|
||||||
@@:
|
|
||||||
mov ebx, [esi]
|
|
||||||
mov [edx], ebx
|
|
||||||
add esi, 4
|
|
||||||
add edx, 4
|
|
||||||
dec ecx
|
|
||||||
jnz @B
|
|
||||||
|
|
||||||
sub edi, [dest]
|
sub edi, [dest]
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
@ -578,7 +516,7 @@ align 16
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
proc m16_stereo stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc m16_stereo stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov esi, [src]
|
mov esi, [src]
|
||||||
@ -607,7 +545,7 @@ proc m16_stereo stdcall, dest:dword,src:dword,r_buff:dword,\
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc s8_stereo stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc s8_stereo stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov esi, [src]
|
mov esi, [src]
|
||||||
@ -638,7 +576,7 @@ proc s8_stereo stdcall, dest:dword,src:dword,r_buff:dword,\
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
proc m8_stereo stdcall, dest:dword,src:dword,r_buff:dword,\
|
proc m8_stereo stdcall, dest:dword,src:dword,\
|
||||||
r_dt:dword, r_size:dword,r_end:dword
|
r_dt:dword, r_size:dword,r_end:dword
|
||||||
|
|
||||||
mov esi, [src]
|
mov esi, [src]
|
||||||
|
@ -143,7 +143,7 @@ align 4
|
|||||||
devices dd (DEVICE_ID shl 16)+VENDOR_ID
|
devices dd (DEVICE_ID shl 16)+VENDOR_ID
|
||||||
dd 0 ;terminator
|
dd 0 ;terminator
|
||||||
|
|
||||||
version dd 0x00020002
|
version dd 0x00030003
|
||||||
|
|
||||||
my_service db 'MY_SERVICE',0 ;max 16 chars include zero
|
my_service db 'MY_SERVICE',0 ;max 16 chars include zero
|
||||||
|
|
||||||
|
@ -457,7 +457,8 @@ proc create_primary_buff
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
stdcall GetPgAddr, [ctrl.buffer]
|
mov eax, [ctrl.buffer]
|
||||||
|
call GetPgAddr
|
||||||
|
|
||||||
mov ebx, 0xC0004000
|
mov ebx, 0xC0004000
|
||||||
mov ecx, 4
|
mov ecx, 4
|
||||||
@ -501,10 +502,11 @@ proc create_primary_buff
|
|||||||
add edi, 4
|
add edi, 4
|
||||||
loop @B
|
loop @B
|
||||||
|
|
||||||
mov ecx, pcmout_bdl
|
mov eax, pcmout_bdl
|
||||||
stdcall GetPgAddr, ecx
|
mov ebx, eax
|
||||||
and ecx, 0xFFF
|
call GetPgAddr ;eax
|
||||||
add eax, ecx
|
and ebx, 0xFFF
|
||||||
|
add eax, ebx
|
||||||
|
|
||||||
mov edx, PCM_OUT_BDL
|
mov edx, PCM_OUT_BDL
|
||||||
call [ctrl.ctrl_write32]
|
call [ctrl.ctrl_write32]
|
||||||
@ -1130,7 +1132,7 @@ align 4
|
|||||||
devices dd (CTRL_SIS shl 16)+VID_SIS,msg_AC, set_SIS
|
devices dd (CTRL_SIS shl 16)+VID_SIS,msg_AC, set_SIS
|
||||||
dd 0
|
dd 0
|
||||||
|
|
||||||
version dd 0x00020002
|
version dd 0x00030003
|
||||||
|
|
||||||
msg_AC db '7012 AC97 controller',13,10, 0
|
msg_AC db '7012 AC97 controller',13,10, 0
|
||||||
msg_SIS db 'Silicon Integrated Systems',13,10, 0
|
msg_SIS db 'Silicon Integrated Systems',13,10, 0
|
||||||
|
@ -521,7 +521,8 @@ proc create_primary_buff
|
|||||||
cld
|
cld
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
stdcall GetPgAddr, [ctrl.buffer]
|
mov eax, [ctrl.buffer]
|
||||||
|
call GetPgAddr
|
||||||
|
|
||||||
mov ebx, 0xC0002000
|
mov ebx, 0xC0002000
|
||||||
mov ecx, 4
|
mov ecx, 4
|
||||||
@ -572,10 +573,11 @@ proc create_primary_buff
|
|||||||
add edi, 4
|
add edi, 4
|
||||||
loop @B
|
loop @B
|
||||||
|
|
||||||
mov ecx, pcmout_bdl
|
mov eax, pcmout_bdl
|
||||||
stdcall GetPgAddr, ecx
|
mov ebx, eax
|
||||||
and ecx, 0xFFF
|
call GetPgAddr ;eax
|
||||||
add eax, ecx
|
and ebx, 0xFFF
|
||||||
|
add eax, ebx
|
||||||
|
|
||||||
mov edx, PCM_OUT_BDL
|
mov edx, PCM_OUT_BDL
|
||||||
call [ctrl.ctrl_write32]
|
call [ctrl.ctrl_write32]
|
||||||
@ -1351,7 +1353,7 @@ devices dd (CTRL_ICH shl 16)+VID_INTEL,msg_ICH, set_ICH
|
|||||||
|
|
||||||
dd 0 ;terminator
|
dd 0 ;terminator
|
||||||
|
|
||||||
version dd 0x00020002
|
version dd 0x00030003
|
||||||
|
|
||||||
msg_ICH db 'Intel ICH', 13,10, 0
|
msg_ICH db 'Intel ICH', 13,10, 0
|
||||||
msg_ICH0 db 'Intel ICH0', 13,10, 0
|
msg_ICH0 db 'Intel ICH0', 13,10, 0
|
||||||
|
Loading…
Reference in New Issue
Block a user