X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/6be108db01439d3463342689446e457a315d6705..6b995c8cb722d10aaacba52999f5c43e43daeb85:/lunaix-os/arch/aarch64/includes/asm/bits.h diff --git a/lunaix-os/arch/aarch64/includes/asm/bits.h b/lunaix-os/arch/aarch64/includes/asm/bits.h new file mode 100644 index 0000000..a30f254 --- /dev/null +++ b/lunaix-os/arch/aarch64/includes/asm/bits.h @@ -0,0 +1,31 @@ +#ifndef __LUNAIX_ARCH_BITS_H +#define __LUNAIX_ARCH_BITS_H + +#include + +#undef _BITS_EXTRACT +#undef _BITS_INSERT + +#define _BITS_EXTRACT(from, h, l) \ + ({ \ + unsigned long _r; \ + asm ("ubfm %0, %1, %2, %3" \ + : "=r"(_r) \ + : "r"(from) \ + "i"(l) "i"(h)); \ + _r; \ + }) + +#define _BITS_INSERT(to, from, h, l) \ + ({ \ + unsigned long _r = to; \ + asm ("bfi %0, %1, %2, %3" \ + : "=r"(_r) \ + : "r"(from) \ + "i"(l) \ + "i"(h - l + 1)); \ + _r; \ + }) + + +#endif /* __LUNAIX_ARCH_BITS_H */