[PD-cvs] externals/tb/volctl~ volctl~.c,1.5,1.6

Tim Blechmann timblech at users.sourceforge.net
Fri Apr 29 21:04:39 CEST 2005


Update of /cvsroot/pure-data/externals/tb/volctl~
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1607

Modified Files:
	volctl~.c 
Log Message:
simd code for msvc ... 

Index: volctl~.c
===================================================================
RCS file: /cvsroot/pure-data/externals/tb/volctl~/volctl~.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** volctl~.c	29 Apr 2005 16:29:40 -0000	1.5
--- volctl~.c	29 Apr 2005 19:04:37 -0000	1.6
***************
*** 178,189 ****
      t_float *in = (t_float *)(w[2]);
      t_float *out = (t_float *)(w[3]);
  
      if (x->x_ticksleft)
!     { 
! 		int n = (int)(w[4]);
! 	
! 		x->x_ticksleft--;
! 
! #if defined(__GNUC__) && (defined(_X86_) || defined(__i386__) || defined(__i586__) || defined(__i686__) )
  		asm(
  			".set T_FLOAT,4                          \n"
--- 178,186 ----
      t_float *in = (t_float *)(w[2]);
      t_float *out = (t_float *)(w[3]);
+ 	int n = (int)(w[4]);
  
      if (x->x_ticksleft)
!     {
! #if defined(__GNUC__) && (defined(_X86_) || defined(__i386__) || defined(__i586__) || defined(__i686__))
  		asm(
  			".set T_FLOAT,4                          \n"
***************
*** 227,312 ****
  			"r"((t_float*)x->x_slopes), "r"(&(t_float)(x->x_slope_step))
  			:"%xmm0", "%xmm1", "%xmm2");
- 		
- 		x->x_value += n*(x->x_slope);
- 	}
-     else
-     {
- 		switch(x->x_target)
- 		{
- 		case 0:
- 			asm(
- 				".set T_FLOAT,4                          \n"
- 			
- 				"xorps     %%xmm0, %%xmm0                \n"
- 				"shrl      $4, %1                        \n"
- 			
- 				"1:                                      \n"
- 				"movaps    %%xmm0, (%0)                  \n" 
- 				"movaps    %%xmm0, 4*T_FLOAT(%0)         \n"
- 				"movaps    %%xmm0, 8*T_FLOAT(%0)         \n"
- 				"movaps    %%xmm0, 12*T_FLOAT(%0)        \n"
- 				"addl      $16*T_FLOAT, %0               \n"
- 				"loop      1b                            \n"
- 				:
- 				:"r"(out),
- 				"c"(w[4])
- 				: "%xmm0");
- 			break;
  
! 		case 1:
! 			if (in != out)
! 				asm(
! 					".set T_FLOAT,4                            \n"
! 			
! 					"shrl      $4, %1                          \n"
  
! 					"1:                                        \n"
! 					"movaps    (%1), %%xmm0                    \n"
! 					"movaps    4*T_FLOAT(%1), %%xmm1           \n"
! 					"movaps    8*T_FLOAT(%1), %%xmm2           \n"
! 					"movaps    12*T_FLOAT(%1), %%xmm3          \n"
! 					"movaps    %%xmm0, (%2)                    \n"
! 					"movaps    %%xmm1, 4*T_FLOAT(%2)           \n"
! 					"movaps    %%xmm2, 8*T_FLOAT(%2)           \n"
! 					"movaps    %%xmm3, 12*T_FLOAT(%2)          \n"
! 				
! 					"addl      $16*T_FLOAT,%1                  \n"
! 					"addl      $16*T_FLOAT,%2                  \n"
! 					"loop      1b                              \n"
! 					:
! 					:"c"(w[4]),"r"(in),"r"(out)
! 					:"%xmm0","%xmm1","%xmm2","%xmm3");
! 			break;
  
! 		default:
! 			asm(
! 				".set T_FLOAT,4                          \n"
! 			
! 				"movss     (%3), %%xmm0                  \n"
! 				"shufps    $0, %%xmm0, %%xmm0            \n"
! 				"shrl      $4, %2                        \n"
  			
! 				"1:                                      \n"
! 				"movaps    (%0), %%xmm1                  \n"
! 				"mulps     %%xmm0, %%xmm1                \n"
! 				"movaps    %%xmm1, (%1)                  \n" 
! 				"movaps    4*T_FLOAT(%0), %%xmm2         \n"
! 				"mulps     %%xmm0, %%xmm2                \n"
! 				"movaps    %%xmm2, 4*T_FLOAT(%1)         \n"
! 				"movaps    8*T_FLOAT(%0), %%xmm3         \n"
! 				"mulps     %%xmm0, %%xmm3                \n"
! 				"movaps    %%xmm3, 8*T_FLOAT(%1)         \n"
! 				"movaps    12*T_FLOAT(%0), %%xmm4        \n"
! 				"mulps     %%xmm0, %%xmm4                \n"
! 				"movaps    %%xmm4, 12*T_FLOAT(%1)        \n"
! 				"addl      $16*T_FLOAT, %0               \n"
! 				"addl      $16*T_FLOAT, %1               \n"
! 				"loop      1b                            \n"
! 				:
! 				: "r"(in), "r"(out),
! 				"c"(w[4]),"r"(&(t_float)(x->x_target))
! 				: "%xmm0", "%xmm1","%xmm2","%xmm3","%xmm4");
  		}
!     }
      return (w+5);
  }
--- 224,320 ----
  			"r"((t_float*)x->x_slopes), "r"(&(t_float)(x->x_slope_step))
  			:"%xmm0", "%xmm1", "%xmm2");
  
! #elif defined(NT) && defined(_MSC_VER)
! 		__asm {
! 			mov			ecx,n
! 			mov			ebx,in
! 			mov			edx,out
  
! 			movss		xmm0,xmmword prt [x->x_value]
! 			shufps		xmm0,xmm0,0
! 			movaps		xmm1,xmmword prt [x->x_slopes]
! 			addps		xmm1,xmm0
  
! 			movss		xmm0,xmmword prt [x->x_slope_step]
! 			shufps		xmm0,xmm0,0
  			
! 			shr			ecx,4
! 
! 		loopa:
! 			movaps		xmm2,xmmword ptr[ebx]
! 			mulps		xmm2,xmm1
! 			movaps		xmmword prt[edx],xmm2
! 			addps		xmm1,xmm0
! 
! 			movaps		xmm2,xmmword ptr[ebx+4*TYPE t_float]
! 			mulps		xmm2,xmm1
! 			movaps		xmmword prt[edx+4*TYPE t_float],xmm2
! 			addps		xmm1,xmm0
! 
! 			movaps		xmm2,xmmword ptr[ebx+8*TYPE t_float]
! 			mulps		xmm2,xmm1
! 			movaps		xmmword prt[edx+8*TYPE t_float],xmm2
! 			addps		xmm1,xmm0
! 
! 			movaps		xmm2,xmmword ptr[ebx+12*TYPE t_float]
! 			mulps		xmm2,xmm1
! 			movaps		xmmword prt[edx+12*TYPE t_float],xmm2
! 			addps		xmm1,xmm0
! 
! 			add		ebx,16*TYPE t_float
! 			add		edx,16*TYPE t_float
! 			loop	loopa 
  		}
! 
! #else /* not yet implemented ... */
! 		t_float f = x->x_value;
! 		t_float x_slope = x->x_slope;
! 
! 		n = n>>3;
! 		while (n--)
! 		{
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 			*out++ = *in++ * f;
! 			f+=x_slope;
! 		}
! #endif
! 
! 		x->x_ticksleft--;
! 		x->x_value += n*(x->x_slope);
! 	}
!     else
!     {
! 		if (x->x_target == 0.f)
! 			zerovec_simd(out, n);
! 		else 
! 			if (x->x_target == 1.f)
! 				{
! 					if (in != out)
! 						copyvec_simd(out, in, n);
! 				}
! 			else
! 			{
! 				t_int args[6]={0,
! 							   (t_int)in,
! 							   (t_int)&x->x_target,
! 							   (t_int)out,
! 							   n,
! 							   0};
! 				scalartimes_perf_simd(args);
! 			}
! 	}
      return (w+5);
  }





More information about the Pd-cvs mailing list