Code: Select all
; a.d = b.d
FLD qword [esp+8]
FSTP qword [esp]
; b.d = a,d
FLD qword [esp]
FSTP qword [esp+8]
Code: Select all
Procedure LPF201(*buffer_audio_ptr, *lpf_table_ptr, *out_buffer_ptr)
;/ http://forum.purebasic.com/english/viewtopic.php?f=35&t=47679
; Thanks "Wilbert in Netherlands"
!MOV Ecx, [p.p_lpf_table_ptr]
!MOV Edx, [p.p_buffer_audio_ptr]
!SUB Edx, 800
!PXOR xmm2, xmm2
!MOV Eax, 201
!align 4
!InterLoop3:
!movq xmm0, [Ecx] ; lpf
!movlhps xmm0, xmm0
!cvtps2pd xmm1, [Edx] ; L + R float
!mulpd xmm1, xmm0
!ADDPD xmm2, xmm1
!ADD Ecx, 8
!ADD Edx, 8
!DEC Eax
!JNZ InterLoop3
!cvtpd2ps xmm2, xmm2 ; double to float
!MOV Edx, [p.p_out_buffer_ptr]
!movq [Edx], xmm2 ; float, *out_buffer_prt
EndProcedure
Code: Select all
Procedure LPF201(*buffer_audio_ptr, *lpf_table_ptr, *out_buffer_ptr)
;/ http://forum.purebasic.com/english/viewtopic.php?f=35&t=47679
; Thanks "Wilbert in Netherlands"
!MOV Ecx, [p.p_lpf_table_ptr]
!MOV Edx, [p.p_buffer_audio_ptr]
!SUB Edx, 800
!PXOR xmm2, xmm2
!MOV Eax, 201
!align 4
!InterLoop3:
!movq xmm0, [Ecx] ; lpf
!movlhps xmm0, xmm0
!cvtps2pd xmm1, [Edx] ; L + R !! Double !!
!mulpd xmm1, xmm0
!ADDPD xmm2, xmm1
!ADD Ecx, 8
!ADD Edx, 8
!DEC Eax
!JNZ InterLoop3
!cvtpd2ps xmm2, xmm2 ; !! Remove !! double to float
!MOV Edx, [p.p_out_buffer_ptr]
!movq [Edx], xmm2 ; !! double !!, *out_buffer_prt
EndProcedure