| 496 | #define LUT_MATCH_POS 0x12131210 |
| 497 | |
| 498 | static int |
| 499 | table_lookup(void *table, |
| 500 | void *mailbox, |
| 501 | uint8_t **key, |
| 502 | uint64_t *action_id, |
| 503 | uint8_t **action_data, |
| 504 | size_t *entry_id, |
| 505 | int *hit) |
| 506 | { |
| 507 | struct table *t = table; |
| 508 | struct mailbox *m = mailbox; |
| 509 | |
| 510 | switch (m->state) { |
| 511 | case 0: { |
| 512 | uint8_t *input_key = &(*key)[t->params.key_offset]; |
| 513 | struct bucket_extension *bkt; |
| 514 | uint32_t input_sig, bkt_id; |
| 515 | |
| 516 | input_sig = t->params.hash_func(input_key, t->params.key_size, 0); |
| 517 | bkt_id = input_sig & (t->n_buckets - 1); |
| 518 | bkt = &t->buckets[bkt_id]; |
| 519 | rte_prefetch0(bkt); |
| 520 | |
| 521 | m->bkt = bkt; |
| 522 | m->input_sig = (input_sig >> 16) | 1; |
| 523 | m->state++; |
| 524 | return 0; |
| 525 | } |
| 526 | |
| 527 | case 1: { |
| 528 | struct bucket_extension *bkt = m->bkt; |
| 529 | uint32_t input_sig = m->input_sig; |
| 530 | uint32_t bkt_sig0, bkt_sig1, bkt_sig2, bkt_sig3; |
| 531 | uint32_t mask0 = 0, mask1 = 0, mask2 = 0, mask3 = 0, mask_all; |
| 532 | uint32_t sig_match = LUT_MATCH; |
| 533 | uint32_t sig_match_many = LUT_MATCH_MANY; |
| 534 | uint32_t sig_match_pos = LUT_MATCH_POS; |
| 535 | uint32_t bkt_key_id; |
| 536 | |
| 537 | bkt_sig0 = input_sig ^ bkt->sig[0]; |
| 538 | if (!bkt_sig0) |
| 539 | mask0 = 1 << 0; |
| 540 | |
| 541 | bkt_sig1 = input_sig ^ bkt->sig[1]; |
| 542 | if (!bkt_sig1) |
| 543 | mask1 = 1 << 1; |
| 544 | |
| 545 | bkt_sig2 = input_sig ^ bkt->sig[2]; |
| 546 | if (!bkt_sig2) |
| 547 | mask2 = 1 << 2; |
| 548 | |
| 549 | bkt_sig3 = input_sig ^ bkt->sig[3]; |
| 550 | if (!bkt_sig3) |
| 551 | mask3 = 1 << 3; |
| 552 | |
| 553 | mask_all = (mask0 | mask1) | (mask2 | mask3); |
| 554 | sig_match = (sig_match >> mask_all) & 1; |
| 555 | sig_match_many = (sig_match_many >> mask_all) & 1; |
nothing calls this directly
no test coverage detected