/* SPDX-License-Identifier: LGPL-2.1-only */ /* Copyright (C) 2021 Gediminas Jakutis */ #ifndef ALGOS_UTIL_H_INCLUDED #define ALGOS_UTIL_H_INCLUDED #include "defs.h" static inline int is_less_equal(const field a, const field b) __attribute__((always_inline)); static inline int is_less_equal(const field a, const field b) { int ret; /* all sizes fitting in a primitive type */ #if entry_field_size <= 64 ret = a <= b; /* composite of two 64bit */ #elif entry_field_size == 128 if (unlikely(a.high == b.high)) { ret = a.low <= b.low; } else { ret = a.high < b.high; } /* composite of four 64bit */ #elif entry_field_size == 256 if (likely(a.high != b.high)) { ret = a.high < b.high; } else if (likely(a.midhigh != b.midhigh)){ ret = a.midhigh < b.midhigh; } else if (likely(a.midlow != b.midlow)){ ret = a.midlow < b.midlow; } else { ret = a.low <= b.low; } #endif return ret; } #endif /* ALGOS_UTIL_H_INCLUDED */