/* { dg-do run } */ #include #define NUM_OF_STATES 4 typedef unsigned int entry_t[2]; typedef struct entries_item { entry_t metricEntries_[0]; } entries_item_t; void __attribute__((noinline,noclone)) test_00(size_t numOfStates, entries_item_t* p_bm, const unsigned int* polyArray, size_t polyArraySize) { size_t idx; unsigned int hlp0, hlp1; for (idx = 0; idx < numOfStates; ++idx) { size_t idy; hlp0 = (idx << 1) | 0x00; hlp1 = (idx << 1) | 0x01; p_bm->metricEntries_[idx][0] = 0; p_bm->metricEntries_[idx][1] = 0; for (idy = 0; idy < polyArraySize; ++idy) { p_bm->metricEntries_[idx][0] |= __builtin_parity(hlp0 & polyArray[idy]) << idy; p_bm->metricEntries_[idx][1] |= __builtin_parity(hlp1 & polyArray[idy]) << idy; } } } int main() { unsigned int polyArray[] = { 0x07, 0x05 }; entries_item_t* pBranchMetrics; pBranchMetrics = malloc(sizeof(entry_t) * NUM_OF_STATES); test_00(NUM_OF_STATES, pBranchMetrics, polyArray, sizeof(polyArray) / sizeof(polyArray[0])); if (pBranchMetrics->metricEntries_[0][0] != 0 || pBranchMetrics->metricEntries_[0][1] != 3 || pBranchMetrics->metricEntries_[1][0] != 1 || pBranchMetrics->metricEntries_[1][1] != 2 || pBranchMetrics->metricEntries_[2][0] != 3 || pBranchMetrics->metricEntries_[2][1] != 0 || pBranchMetrics->metricEntries_[3][0] != 2 || pBranchMetrics->metricEntries_[3][1] != 1) abort (); free(pBranchMetrics); return 0; }