diff --git a/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge10to8_1pol.cpp b/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge10to8_1pol.cpp index ccfa356a6dcf540f2e6f180418fc19eb27b93fa6..fc166d63cec76ff7ae9db1b3c9f4bd6eb236eab6 100644 --- a/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge10to8_1pol.cpp +++ b/psrdada_cpp/effelsberg/edd/src/EDDPolnMerge10to8_1pol.cpp @@ -22,58 +22,58 @@ uint64_t *unpack5(uint64_t *qword, uint8_t *out) val = be64toh(*qword); //printf("0x%016lX\n",val); qword++; - out[0] = ((int64_t)(( 0xFFC0000000000000 & val) << 0) >> 54) & 0xFF; - out[1] = ((int64_t)(( 0x003FF00000000000 & val) << 10) >> 54) & 0xFF; - out[2] = ((int64_t)(( 0x00000FFC00000000 & val) << 20) >> 54) & 0xFF; - out[3] = ((int64_t)(( 0x00000003FF000000 & val) << 30) >> 54) & 0xFF; - out[4] = ((int64_t)(( 0x0000000000FFC000 & val) << 40) >> 54) & 0xFF; - out[5] = ((int64_t)(( 0x0000000000003FF0 & val) << 50) >> 54) & 0xFF; + out[0] = (int8_t)(((int64_t)(( 0xFFC0000000000000 & val) << 0) >> 54) >> 2); + out[1] = (int8_t)(((int64_t)(( 0x003FF00000000000 & val) << 10) >> 54) >> 2); + out[2] = (int8_t)(((int64_t)(( 0x00000FFC00000000 & val) << 20) >> 54) >> 2); + out[3] = (int8_t)(((int64_t)(( 0x00000003FF000000 & val) << 30) >> 54) >> 2); + out[4] = (int8_t)(((int64_t)(( 0x0000000000FFC000 & val) << 40) >> 54) >> 2); + out[5] = (int8_t)(((int64_t)(( 0x0000000000003FF0 & val) << 50) >> 54) >> 2); rest = ( 0x000000000000000F & val) << 60; // 4 bits rest. // 2nd: val = be64toh(*qword); //printf("0x%016lX\n",val); qword++; - out[6] = ((int64_t)(((0xFC00000000000000 & val) >> 4) | rest) >> 54) & 0xFF; - out[7] = ((int64_t)(( 0x03FF000000000000 & val) << 6) >> 54) & 0xFF; - out[8] = ((int64_t)(( 0x0000FFC000000000 & val) << 16) >> 54) & 0xFF; - out[9] = ((int64_t)(( 0x0000003FF0000000 & val) << 26) >> 54) & 0xFF; - out[10] = ((int64_t)(( 0x000000000FFC0000 & val) << 36) >> 54) & 0xFF; - out[11] = ((int64_t)(( 0x000000000003FF00 & val) << 46) >> 54) & 0xFF; + out[6] = (int8_t)(((int64_t)(((0xFC00000000000000 & val) >> 4) | rest) >> 54) >> 2); + out[7] = (int8_t)(((int64_t)(( 0x03FF000000000000 & val) << 6) >> 54) >> 2); + out[8] = (int8_t)(((int64_t)(( 0x0000FFC000000000 & val) << 16) >> 54) >> 2); + out[9] = (int8_t)(((int64_t)(( 0x0000003FF0000000 & val) << 26) >> 54) >> 2); + out[10] = (int8_t)(((int64_t)(( 0x000000000FFC0000 & val) << 36) >> 54) >> 2); + out[11] = (int8_t)(((int64_t)(( 0x000000000003FF00 & val) << 46) >> 54) >> 2); rest = ( 0x00000000000000FF & val) << 56; // 8 bits rest. // 3rd: val = be64toh(*qword); //printf("0x%016lX\n",val); qword++; - out[12] = ((int64_t)(((0xC000000000000000 & val) >> 8) | rest) >> 54) & 0xFF; - out[13] = ((int64_t)(( 0x3FF0000000000000 & val) << 2) >> 54) & 0xFF; - out[14] = ((int64_t)(( 0x000FFC0000000000 & val) << 12) >> 54) & 0xFF; - out[15] = ((int64_t)(( 0x000003FF00000000 & val) << 22) >> 54) & 0xFF; - out[16] = ((int64_t)(( 0x00000000FFC00000 & val) << 32) >> 54) & 0xFF; - out[17] = ((int64_t)(( 0x00000000003FF000 & val) << 42) >> 54) & 0xFF; - out[18] = ((int64_t)(( 0x0000000000000FFC & val) << 52) >> 54) & 0xFF; + out[12] = (int8_t)(((int64_t)(((0xC000000000000000 & val) >> 8) | rest) >> 54) >> 2); + out[13] = (int8_t)(((int64_t)(( 0x3FF0000000000000 & val) << 2) >> 54) >> 2); + out[14] = (int8_t)(((int64_t)(( 0x000FFC0000000000 & val) << 12) >> 54) >> 2); + out[15] = (int8_t)(((int64_t)(( 0x000003FF00000000 & val) << 22) >> 54) >> 2); + out[16] = (int8_t)(((int64_t)(( 0x00000000FFC00000 & val) << 32) >> 54) >> 2); + out[17] = (int8_t)(((int64_t)(( 0x00000000003FF000 & val) << 42) >> 54) >> 2); + out[18] = (int8_t)(((int64_t)(( 0x0000000000000FFC & val) << 52) >> 54) >> 2); rest = ( 0x0000000000000003 & val) << 62; // 2 bits rest. // 4th: val = be64toh(*qword); //printf("0x%016lX\n",val); qword++; - out[19] = ((int64_t)(((0xFF00000000000000 & val) >> 2) | rest) >> 54) & 0xFF; - out[20] = ((int64_t)(( 0x00FFC00000000000 & val) << 8) >> 54) & 0xFF; - out[21] = ((int64_t)(( 0x00003FF000000000 & val) << 18) >> 54) & 0xFF; - out[22] = ((int64_t)(( 0x0000000FFC000000 & val) << 28) >> 54) & 0xFF; - out[23] = ((int64_t)(( 0x0000000003FF0000 & val) << 38) >> 54) & 0xFF; - out[24] = ((int64_t)(( 0x000000000000FFC0 & val) << 48) >> 54) & 0xFF; + out[19] = (int8_t)(((int64_t)(((0xFF00000000000000 & val) >> 2) | rest) >> 54) >> 2); + out[20] = (int8_t)(((int64_t)(( 0x00FFC00000000000 & val) << 8) >> 54) >> 2); + out[21] = (int8_t)(((int64_t)(( 0x00003FF000000000 & val) << 18) >> 54) >> 2); + out[22] = (int8_t)(((int64_t)(( 0x0000000FFC000000 & val) << 28) >> 54) >> 2); + out[23] = (int8_t)(((int64_t)(( 0x0000000003FF0000 & val) << 38) >> 54) >> 2); + out[24] = (int8_t)(((int64_t)(( 0x000000000000FFC0 & val) << 48) >> 54) >> 2); rest = ( 0x000000000000003F & val) << 58; // 6 bits rest. // 5th: val = be64toh(*qword); //printf("0x%016lX\n",val); qword++; - out[25] = ((int64_t)(((0xF000000000000000 & val) >> 6) | rest) >> 54) & 0xFF; - out[26] = ((int64_t)(( 0x0FFC000000000000 & val) << 4) >> 54) & 0xFF; - out[27] = ((int64_t)(( 0x0003FF0000000000 & val) << 14) >> 54) & 0xFF; - out[28] = ((int64_t)(( 0x000000FFC0000000 & val) << 24) >> 54) & 0xFF; - out[29] = ((int64_t)(( 0x000000003FF00000 & val) << 34) >> 54) & 0xFF; - out[30] = ((int64_t)(( 0x00000000000FFC00 & val) << 44) >> 54) & 0xFF; - out[31] = ((int64_t)(( 0x00000000000003FF & val) << 54) >> 54) & 0xFF; + out[25] = (int8_t)(((int64_t)(((0xF000000000000000 & val) >> 6) | rest) >> 54) >> 2); + out[26] = (int8_t)(((int64_t)(( 0x0FFC000000000000 & val) << 4) >> 54) >> 2); + out[27] = (int8_t)(((int64_t)(( 0x0003FF0000000000 & val) << 14) >> 54) >> 2); + out[28] = (int8_t)(((int64_t)(( 0x000000FFC0000000 & val) << 24) >> 54) >> 2); + out[29] = (int8_t)(((int64_t)(( 0x000000003FF00000 & val) << 34) >> 54) >> 2); + out[30] = (int8_t)(((int64_t)(( 0x00000000000FFC00 & val) << 44) >> 54) >> 2); + out[31] = (int8_t)(((int64_t)(( 0x00000000000003FF & val) << 54) >> 54) >> 2); rest = 0; // No rest. return qword; }