- return lzms_get_slot(value, lzms_position_slot_base,
- LZMS_MAX_NUM_OFFSET_SYMS);
+ u32 order = bsr32(position);
+ u32 l = lzms_order_to_position_slot_bounds[order][0];
+ u32 r = lzms_order_to_position_slot_bounds[order][1];
+
+ for (;;) {
+ u32 slot = (l + r) / 2;
+ if (position >= lzms_position_slot_base[slot]) {
+ if (position < lzms_position_slot_base[slot + 1])
+ return slot;
+ else
+ l = slot + 1;
+ } else {
+ r = slot - 1;
+ }
+ }