Changeset 5f259f3


Ignore:
Timestamp:
Jun 10, 2020, 12:03:53 PM (4 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
a5873bd
Parents:
8c60d59
Message:

Missing some of the BMI2 fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/thierry_delisle_PhD/code/relaxed_list.hpp

    r8c60d59 r5f259f3  
    220220                                        if(maski == 0 && maskj == 0) continue;
    221221
    222                                         unsigned bi = rand_bit(ri >> snzm.depth, maski);
    223                                         unsigned bj = rand_bit(rj >> snzm.depth, maskj);
    224 
    225                                         assertf(bi < 64, "%zu %u", maski, bi);
    226                                         assertf(bj < 64, "%zu %u", maskj, bj);
     222                                        #if defined(__BMI2__)
     223                                                uint64_t idxsi = _pext_u64(snzm.indexes, maski);
     224                                                uint64_t idxsj = _pext_u64(snzm.indexes, maskj);
     225
     226                                                auto pi = __builtin_popcountll(maski);
     227                                                auto pj = __builtin_popcountll(maskj);
     228
     229                                                ri = pi ? ri & ((pi >> 3) - 1) : 0;
     230                                                rj = pj ? rj & ((pj >> 3) - 1) : 0;
     231
     232                                                unsigned bi = (idxsi >> (ri << 3)) & 0xff;
     233                                                unsigned bj = (idxsj >> (rj << 3)) & 0xff;
     234                                        #else
     235                                                unsigned bi = rand_bit(ri >> snzm.depth, maski);
     236                                                unsigned bj = rand_bit(rj >> snzm.depth, maskj);
     237                                        #endif
    227238
    228239                                        i = (bi << snzm.depth) | wdxi;
    229240                                        j = (bj << snzm.depth) | wdxj;
    230241
    231                                         assertf(i < numLists, "%u %u", bj, wdxi);
    232                                         assertf(j < numLists, "%u %u", bj, wdxj);
     242                                        /* paranoid */ assertf(i < numLists, "%u %u", bj, wdxi);
     243                                        /* paranoid */ assertf(j < numLists, "%u %u", bj, wdxj);
    233244                                }
    234245
Note: See TracChangeset for help on using the changeset viewer.