| 314 | } |
| 315 | |
| 316 | void KeyCompare::AndByteVectors(LightContext* ctx, uint32_t num_elements, |
| 317 | uint8_t* bytevector_A, const uint8_t* bytevector_B) { |
| 318 | uint32_t num_processed = 0; |
| 319 | #if defined(ARROW_HAVE_RUNTIME_AVX2) |
| 320 | if (ctx->has_avx2()) { |
| 321 | num_processed = AndByteVectors_avx2(num_elements, bytevector_A, bytevector_B); |
| 322 | } |
| 323 | #endif |
| 324 | |
| 325 | for (uint32_t i = num_processed / 8; i < bit_util::CeilDiv(num_elements, 8); ++i) { |
| 326 | uint64_t* a = reinterpret_cast<uint64_t*>(bytevector_A); |
| 327 | const uint64_t* b = reinterpret_cast<const uint64_t*>(bytevector_B); |
| 328 | a[i] &= b[i]; |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | void KeyCompare::CompareColumnsToRows( |
| 333 | uint32_t num_rows_to_compare, const uint16_t* sel_left_maybe_null, |