int main(unsigned long long spe_id, unsigned long long program_data_ea,unsigned long long env) { char array[MAX] __attribute__((aligned(128))); int func,dma_count; unsigned int tag = 1,count,k,byte_size,chunk_size, transfered_size,dest_inc; unsigned int count1,add_inc; unsigned long int rep; char arr[MAX]; unsigned long int array_size = 32768; unsigned long int data_size; spu_write_decrementer(0); rep = spu_read_in_mbox(); data_size = spu_read_in_mbox(); func = spu_read_in_mbox(); byte_size = data_size; k = byte_size - MAX; chunk_size = byte_size; mfc_get(array, (unsigned int)program_data_ea, chunk_size, tag, 0, 0); mfc_write_tag_mask(1<<tag); mfc_read_tag_status_any(); for(count = 0; count < rep;count++) for(count1 = 0 ; count1 < chunk_size ; count1++) { arr[count1%array_size] = array[count1]; } return 0; }
void wait_tagid(int tagid) { assert(tagid >= 0 && tagid < MAX_TAGID); assert(tagmask & (1 << tagid)); // Assign what tagid to look for mfc_write_tag_mask(1 << tagid); // Wait until the previously indicated tagid // is done transfering. unsigned int mask = mfc_read_tag_status_any(); // the openggcm implementation has // some other stuff here. I'm not // sure it's needed for psc. }