arm64: insn: Add BUILD_BUG_ON() for invalid masks
Detect invalid instruction masks at build time. Some versions of GCC can warn about the situation, but not all of them, it seems. Suggested-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
c5e2edeb01
commit
edbcf50eb8
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef __ASM_INSN_H
|
#ifndef __ASM_INSN_H
|
||||||
#define __ASM_INSN_H
|
#define __ASM_INSN_H
|
||||||
|
#include <linux/build_bug.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
/* A64 instructions are always 32 bits. */
|
/* A64 instructions are always 32 bits. */
|
||||||
@ -268,9 +269,14 @@ enum aarch64_insn_adr_type {
|
|||||||
|
|
||||||
#define __AARCH64_INSN_FUNCS(abbr, mask, val) \
|
#define __AARCH64_INSN_FUNCS(abbr, mask, val) \
|
||||||
static __always_inline bool aarch64_insn_is_##abbr(u32 code) \
|
static __always_inline bool aarch64_insn_is_##abbr(u32 code) \
|
||||||
{ return (code & (mask)) == (val); } \
|
{ \
|
||||||
|
BUILD_BUG_ON(~(mask) & (val)); \
|
||||||
|
return (code & (mask)) == (val); \
|
||||||
|
} \
|
||||||
static __always_inline u32 aarch64_insn_get_##abbr##_value(void) \
|
static __always_inline u32 aarch64_insn_get_##abbr##_value(void) \
|
||||||
{ return (val); }
|
{ \
|
||||||
|
return (val); \
|
||||||
|
}
|
||||||
|
|
||||||
__AARCH64_INSN_FUNCS(adr, 0x9F000000, 0x10000000)
|
__AARCH64_INSN_FUNCS(adr, 0x9F000000, 0x10000000)
|
||||||
__AARCH64_INSN_FUNCS(adrp, 0x9F000000, 0x90000000)
|
__AARCH64_INSN_FUNCS(adrp, 0x9F000000, 0x90000000)
|
||||||
|
Loading…
Reference in New Issue
Block a user