static void spu_memload_stereo8(int leftpos,int rightpos,void *src0,size_t size) { uint8 *src = src0; uint32 *left = (uint32*)(leftpos +SPU_RAM_BASE); uint32 *right = (uint32*)(rightpos+SPU_RAM_BASE); size = (size+7)/8; while(size--) { unsigned lval,rval,old; lval = *src++; rval = *src++; lval|= (*src++)<<8; rval|= (*src++)<<8; lval|= (*src++)<<16; rval|= (*src++)<<16; lval|= (*src++)<<24; rval|= (*src++)<<24; g2_fifo_wait(); G2_LOCK(old); *left++=lval; *right++=rval; G2_UNLOCK(old); // g2_write_32(*left++,lval); // g2_write_32(*right++,rval); // g2_fifo_wait(); } }
static void spu_memload_stereo16(int leftpos, int rightpos, void *src0, size_t size) { register uint16 *src = src0; #if 0 sep_data(src, size, 1); dcache_flush_range((unsigned)sep_buffer, size); dmadest = rightpos; dmacnt = size / 2; spu_dma_transfer(sep_buffer[0], leftpos, size / 2, -1, spu_dma_transfer2, 0); //spu_dma_transfer(sep_buffer[1], rightpos, size / 2, -1, NULL, 0); #else register uint32 *left = (uint32*)(leftpos + SPU_RAM_BASE); register uint32 *right = (uint32*)(rightpos + SPU_RAM_BASE); size = (size+7)/8; unsigned lval, rval, old = 0; while(size--) { lval = *src++; rval = *src++; lval|= (*src++)<<16; rval|= (*src++)<<16; g2_fifo_wait(); G2_LOCK(old); *left++=lval; *right++=rval; G2_UNLOCK(old); /* g2_write_32(*left++,lval); g2_write_32(*right++,rval); g2_fifo_wait();*/ } #endif }