Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17176
Modified Files:
Tag: devel_0_38
m_simd_sse_gcc.c m_simd_sse_gcc.h m_simd_sse_vc.h
m_simd_sse_vc.c
Log Message:
sqrt and rsqrt sse code
Index: m_simd_sse_vc.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_vc.h,v
retrieving revision 1.1.4.2
retrieving revision 1.1.4.3
diff -C2 -d -r1.1.4.2 -r1.1.4.3
*** m_simd_sse_vc.h 10 Nov 2004 21:53:03 -0000 1.1.4.2
--- m_simd_sse_vc.h 29 Nov 2004 18:11:38 -0000 1.1.4.3
***************
*** 35,47 ****
t_int *scalarmin_perf_simd(t_int *w);
t_int *sigwrap_perf_simd(t_int *w);
- t_int *sigsqrt_perf_simd(t_int *w);
- t_int *sigrsqrt_perf_simd(t_int *w);
/* functions in d_math.c */
t_int *clip_perf_simd(t_int *w);
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
! #define sigsqrt_perf_simd sigsqrt_perform /* SIMD not implemented */
! #define sigrsqrt_perf_simd sigrsqrt_perform /* SIMD not implemented */
#endif /* __M_SIMD_SSE_VC_H */
--- 35,46 ----
t_int *scalarmin_perf_simd(t_int *w);
t_int *sigwrap_perf_simd(t_int *w);
/* functions in d_math.c */
t_int *clip_perf_simd(t_int *w);
+ t_int *sigsqrt_perf_simd(t_int *w);
+ t_int *sigrsqrt_perf_simd(t_int *w);
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
!
#endif /* __M_SIMD_SSE_VC_H */
Index: m_simd_sse_vc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_vc.c,v
retrieving revision 1.1.4.4
retrieving revision 1.1.4.5
diff -C2 -d -r1.1.4.4 -r1.1.4.5
*** m_simd_sse_vc.c 18 Nov 2004 22:25:06 -0000 1.1.4.4
--- m_simd_sse_vc.c 29 Nov 2004 18:11:38 -0000 1.1.4.5
***************
*** 835,839 ****
}
! /* tb: fast clipping */
t_int *clip_perf_simd(t_int *w)
{
--- 835,840 ----
}
! /* tb {
! /* fast clipping */
t_int *clip_perf_simd(t_int *w)
{
***************
*** 892,896 ****
! /* TB: runtime check */
int simd_runtime_check()
{
--- 893,983 ----
! t_int *sigsqrt_perf_simd(t_int *w)
! {
! __asm {
! mov esi,dword ptr [w]
!
! mov ebx,dword ptr [esi + 1*TYPE t_int] /* in */
! /* prefetcht0 [ebx] prefetch first cache line */
! mov edx,dword ptr [esi + 2*TYPE t_int] /* out */
!
! mov ecx,dword ptr [esi + 3*TYPE t_int] /* n */
! shr ecx,4
!
! /* prefetcht0 [ebx+8*TYPE t_float] */
!
! loopa:
! /* prefetcht0 [ebx+16*TYPE t_float] */
!
! movaps xmm0,xmmword ptr[ebx]
! sqrtps xmm0,xmm0
! movaps xmmword ptr[edx],xmm0
!
! movaps xmm1,xmmword ptr[ebx+4*TYPE t_float]
! sqrtps xmm1,xmm1
! movaps xmmword ptr[edx+4*TYPE t_float],xmm1
!
! /* prefetcht0 [ebx+24*TYPE t_float] */
!
! movaps xmm2,xmmword ptr[ebx+8*TYPE t_float]
! sqrtps xmm2,xmm2
! movaps xmmword ptr[edx+8*TYPE t_float],xmm2
!
! movaps xmm3,xmmword ptr[ebx+12*TYPE t_float]
! sqrtps xmm3,xmm3
! movaps xmmword ptr[edx+12*TYPE t_float],xmm3
!
! add ebx,16*TYPE t_float
! add edx,16*TYPE t_float
! loop loopa
! }
! return (w+4);
! }
!
!
! t_int *sigrsqrt_perf_simd(t_int *w)
! {
! __asm {
! mov esi,dword ptr [w]
!
! mov ebx,dword ptr [esi + 1*TYPE t_int] /* in */
! /* prefetcht0 [ebx] prefetch first cache line */
! mov edx,dword ptr [esi + 2*TYPE t_int] /* out */
!
! mov ecx,dword ptr [esi + 3*TYPE t_int] /* n */
! shr ecx,4
!
! /* prefetcht0 [ebx+8*TYPE t_float] */
!
! loopa:
! /* prefetcht0 [ebx+16*TYPE t_float] */
!
! movaps xmm0,xmmword ptr[ebx]
! rsqrtps xmm0,xmm0
! movaps xmmword ptr[edx],xmm0
!
! movaps xmm1,xmmword ptr[ebx+4*TYPE t_float]
! rsqrtps xmm1,xmm1
! movaps xmmword ptr[edx+4*TYPE t_float],xmm1
!
! /* prefetcht0 [ebx+24*TYPE t_float] */
!
! movaps xmm2,xmmword ptr[ebx+8*TYPE t_float]
! rsqrtps xmm2,xmm2
! movaps xmmword ptr[edx+8*TYPE t_float],xmm2
!
! movaps xmm3,xmmword ptr[ebx+12*TYPE t_float]
! rsqrtps xmm3,xmm3
! movaps xmmword ptr[edx+12*TYPE t_float],xmm3
!
! add ebx,16*TYPE t_float
! add edx,16*TYPE t_float
! loop loopa
! }
! return (w+4);
! }
!
!
! /* runtime check */
int simd_runtime_check()
{
***************
*** 904,907 ****
--- 991,995 ----
return (0x2000000 & redx);
}
+ /* } tb */
#endif
Index: m_simd_sse_gcc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_gcc.c,v
retrieving revision 1.1.4.6
retrieving revision 1.1.4.7
diff -C2 -d -r1.1.4.6 -r1.1.4.7
*** m_simd_sse_gcc.c 24 Nov 2004 14:31:11 -0000 1.1.4.6
--- m_simd_sse_gcc.c 29 Nov 2004 18:11:34 -0000 1.1.4.7
***************
*** 731,734 ****
--- 731,808 ----
+ t_int* sigsqrt_perf_simd(t_int *w)
+ {
+ asm(
+ ".set T_FLOAT,4 \n"
+
+ "shrl $4, %2 \n" /* divide by 16 */
+
+ /* loop: *out = sqrt(*in) */
+ "1: \n"
+ "movaps (%0), %%xmm0 \n"
+ "sqrtps %%xmm0, %%xmm0 \n"
+ "movaps %%xmm0, (%1) \n"
+
+ "movaps 4*T_FLOAT(%0), %%xmm1 \n"
+ "sqrtps %%xmm1, %%xmm1 \n"
+ "movaps %%xmm1, 4*T_FLOAT(%1) \n"
+
+ "movaps 8*T_FLOAT(%0), %%xmm2 \n"
+ "sqrtps %%xmm2, %%xmm2 \n"
+ "movaps %%xmm2, 8*T_FLOAT(%1) \n"
+
+ "movaps 12*T_FLOAT(%0), %%xmm3 \n"
+ "sqrtps %%xmm3, %%xmm3 \n"
+ "movaps %%xmm3, 12*T_FLOAT(%1) \n"
+
+ "addl $16*T_FLOAT, %0 \n"
+ "addl $16*T_FLOAT, %1 \n"
+ "loop 1b \n"
+ :
+ /* in, out, n */
+ :"r"(w[1]),"r"(w[2]),"c"(w[3])
+ :"%xmm0","%xmm1","%xmm2","%xmm3"
+ );
+ return w+4;
+ }
+
+
+ t_int* sigrsqrt_perf_simd(t_int *w)
+ {
+ asm(
+ ".set T_FLOAT,4 \n"
+
+ "shrl $4, %2 \n" /* divide by 16 */
+
+ /* loop: *out = sqrt(*in) */
+ "1: \n"
+ "movaps (%0), %%xmm0 \n"
+ "rsqrtps %%xmm0, %%xmm0 \n"
+ "movaps %%xmm0, (%1) \n"
+
+ "movaps 4*T_FLOAT(%0), %%xmm1 \n"
+ "rsqrtps %%xmm1, %%xmm1 \n"
+ "movaps %%xmm1, 4*T_FLOAT(%1) \n"
+
+ "movaps 8*T_FLOAT(%0), %%xmm2 \n"
+ "rsqrtps %%xmm2, %%xmm2 \n"
+ "movaps %%xmm2, 8*T_FLOAT(%1) \n"
+
+ "movaps 12*T_FLOAT(%0), %%xmm3 \n"
+ "rsqrtps %%xmm3, %%xmm3 \n"
+ "movaps %%xmm3, 12*T_FLOAT(%1) \n"
+
+ "addl $16*T_FLOAT, %0 \n"
+ "addl $16*T_FLOAT, %1 \n"
+ "loop 1b \n"
+ :
+ /* in, out, n */
+ :"r"(w[1]),"r"(w[2]),"c"(w[3])
+ :"%xmm0","%xmm1","%xmm2","%xmm3"
+ );
+ return w+4;
+ }
+
+
/* TB: runtime check */
int simd_runtime_check()
Index: m_simd_sse_gcc.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_gcc.h,v
retrieving revision 1.1.4.2
retrieving revision 1.1.4.3
diff -C2 -d -r1.1.4.2 -r1.1.4.3
*** m_simd_sse_gcc.h 10 Nov 2004 21:53:02 -0000 1.1.4.2
--- m_simd_sse_gcc.h 29 Nov 2004 18:11:38 -0000 1.1.4.3
***************
*** 34,47 ****
t_int *min_perf_simd(t_int *w);
t_int *scalarmin_perf_simd(t_int *w);
- t_int *sigwrap_perf_simd(t_int *w);
- t_int *sigsqrt_perf_simd(t_int *w);
- t_int *sigrsqrt_perf_simd(t_int *w);
/* functions in d_math.c */
t_int *clip_perf_simd(t_int *w);
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
- #define sigsqrt_perf_simd sigsqrt_perform /* SIMD not implemented */
- #define sigrsqrt_perf_simd sigrsqrt_perform /* SIMD not implemented */
#endif /* __M_SIMD_SSE_GCC_H */
--- 34,45 ----
t_int *min_perf_simd(t_int *w);
t_int *scalarmin_perf_simd(t_int *w);
/* functions in d_math.c */
t_int *clip_perf_simd(t_int *w);
+ t_int *sigwrap_perf_simd(t_int *w);
+ t_int *sigsqrt_perf_simd(t_int *w);
+ t_int *sigrsqrt_perf_simd(t_int *w);
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
#endif /* __M_SIMD_SSE_GCC_H */