MCPcopy Create free account
hub / github.com/F-Stack/f-stack / eval_arsh

Function eval_arsh

dpdk/lib/bpf/bpf_validate.c:347–379  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

345}
346
347static void
348eval_arsh(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, size_t opsz,
349 uint64_t msk)
350{
351 uint32_t shv;
352
353 /* check if shift value is less then max result bits */
354 if (rs->u.max >= opsz) {
355 eval_max_bound(rd, msk);
356 return;
357 }
358
359 rd->u.max = (int64_t)rd->u.max >> rs->u.min;
360 rd->u.min = (int64_t)rd->u.min >> rs->u.max;
361
362 /* if we have 32-bit values - extend them to 64-bit */
363 if (opsz == sizeof(uint32_t) * CHAR_BIT) {
364 rd->s.min <<= opsz;
365 rd->s.max <<= opsz;
366 shv = opsz;
367 } else
368 shv = 0;
369
370 if (rd->s.min < 0)
371 rd->s.min = (rd->s.min >> (rs->u.min + shv)) & msk;
372 else
373 rd->s.min = (rd->s.min >> (rs->u.max + shv)) & msk;
374
375 if (rd->s.max < 0)
376 rd->s.max = (rd->s.max >> (rs->u.max + shv)) & msk;
377 else
378 rd->s.max = (rd->s.max >> (rs->u.min + shv)) & msk;
379}
380
381static uint64_t
382eval_umax_bits(uint64_t v, size_t opsz)

Callers 1

eval_aluFunction · 0.85

Calls 1

eval_max_boundFunction · 0.85

Tested by

no test coverage detected