23 for(uint32_t i=0; i<len; i++, inbuff++, outbuff++){
24 uint16_t inword = *inbuff;
25 uint8_t *inptr = (uint8_t*)&inword;
26 uint8_t *outptr = (uint8_t*)&outbuff[1];
27 *(--outptr) = *inptr++;
28 *(--outptr) = *inptr++;
37 for(uint32_t i=0; i<len; i++, inbuff++, outbuff++){
38 uint32_t inword = *inbuff;
39 uint8_t *inptr = (uint8_t*)&inword;
40 uint8_t *outptr = (uint8_t*)&outbuff[1];
41 *(--outptr) = *inptr++;
42 *(--outptr) = *inptr++;
43 *(--outptr) = *inptr++;
44 *(--outptr) = *inptr++;
53 for(uint32_t i=0; i<len; i++, inbuff++, outbuff++){
54 uint64_t inword = *inbuff;
55 uint8_t *inptr = (uint8_t*)&inword;
56 uint8_t *outptr = (uint8_t*)&outbuff[1];
57 *(--outptr) = *inptr++;
58 *(--outptr) = *inptr++;
59 *(--outptr) = *inptr++;
60 *(--outptr) = *inptr++;
62 *(--outptr) = *inptr++;
63 *(--outptr) = *inptr++;
64 *(--outptr) = *inptr++;
65 *(--outptr) = *inptr++;
72 uint32_t
swap_bank_out(uint32_t *outbuff, uint32_t *inbuff, uint32_t len)
86 cerr <<
"Attempt to swap bank with len<2" << endl;
92 uint32_t bank_len = inbuff[0];
93 if((bank_len+1) > len){
94 cerr <<
"WARNING: Bank length word exceeds valid words in buffer (" << bank_len+1 <<
" > " << len <<
")" << endl;
98 uint32_t type = (inbuff[1]>>8) & 0xFF;
99 uint32_t Nwords = bank_len - 1;
100 uint32_t Nswapped = 2;
105 swap_block_out((uint64_t*)&inbuff[2], Nwords/2, (uint64_t*)&outbuff[2]);
116 swap_block_out((uint16_t*)&inbuff[2], Nwords*2, (uint16_t*)&outbuff[2]);
122 memcpy((uint8_t*)&outbuff[2], (uint8_t*)&inbuff[2], Nwords*
sizeof(uint32_t));
126 while(Nswapped < (Nwords+2)){
127 uint32_t N =
swap_tagsegment_out(&outbuff[Nswapped], &inbuff[Nswapped], (Nwords+2)-Nswapped);
128 if(N == 0)
return Nswapped;
134 while(Nswapped < (Nwords+2)){
135 uint32_t N =
swap_segment_out(&outbuff[Nswapped], &inbuff[Nswapped], (Nwords+2)-Nswapped);
136 if(N == 0)
return Nswapped;
142 while(Nswapped < (Nwords+2)){
143 uint32_t N =
swap_bank_out(&outbuff[Nswapped], &inbuff[Nswapped], (Nwords+2)-Nswapped);
144 if(N == 0)
return Nswapped;
149 cerr <<
"WARNING: unknown bank type (0x" << hex << type << dec <<
")" << endl;
165 cerr <<
"Attempt to swap segment with len<1" << endl;
171 uint32_t bank_len = inbuff[0] & 0xFFFF;
172 if((bank_len) > len){
173 cerr <<
"Tag Segment length word exceeds valid words in buffer (" << bank_len <<
" > " << len <<
")" << endl;
177 uint32_t type = (inbuff[0]>>16) & 0x0F;
178 uint32_t Nwords = bank_len;
179 uint32_t Nswapped = 1;
184 swap_block_out((uint64_t*)&inbuff[1], Nwords/2, (uint64_t*)&outbuff[1]);
195 swap_block_out((uint16_t*)&inbuff[1], Nwords*2, (uint16_t*)&outbuff[1]);
201 memcpy((uint8_t*)&outbuff[1], (uint8_t*)&inbuff[1], Nwords*
sizeof(uint32_t));
221 cerr <<
"Attempt to swap segment with len<1" << endl;
227 uint32_t bank_len = inbuff[0] & 0xFFFF;
228 if((bank_len) > len){
229 cerr <<
"Segment length word exceeds valid words in buffer (" << bank_len <<
" > " << len <<
")" << endl;
233 uint32_t type = (inbuff[0]>>16) & 0x3F;
234 uint32_t Nwords = bank_len;
235 uint32_t Nswapped = 1;
240 swap_block_out((uint64_t*)&inbuff[1], Nwords/2, (uint64_t*)&outbuff[1]);
251 swap_block_out((uint16_t*)&inbuff[1], Nwords*2, (uint16_t*)&outbuff[1]);
257 memcpy((uint8_t*)&outbuff[1], (uint8_t*)&inbuff[1], Nwords*
sizeof(uint32_t));
void swap_block_out(uint16_t *inbuff, uint16_t len, uint16_t *outbuff)
uint32_t swap_tagsegment_out(uint32_t *outbuff, uint32_t *inbuff, uint32_t len)
uint32_t swap_segment_out(uint32_t *outbuff, uint32_t *inbuff, uint32_t len)
uint32_t swap_bank_out(uint32_t *outbuff, uint32_t *inbuff, uint32_t len)