diff options
author | Alexey Kardashevskiy | 2022-06-28 10:05:44 +0200 |
---|---|---|
committer | Daniel Henrique Barboza | 2022-07-06 15:22:38 +0200 |
commit | 95444afcab4dd7ecd117b67aae5af8f8665be0ff (patch) | |
tree | 169a6e17c6336a0c52fff98165d06520b03e4ec0 /target/ppc/cpu.h | |
parent | target/ppc: use int128.h methods in vsubcuq (diff) | |
download | qemu-95444afcab4dd7ecd117b67aae5af8f8665be0ff.tar.gz qemu-95444afcab4dd7ecd117b67aae5af8f8665be0ff.tar.xz qemu-95444afcab4dd7ecd117b67aae5af8f8665be0ff.zip |
ppc: Define SETFIELD for the ppc target
It keeps repeating, move it to the header. This uses __builtin_ffsll() to
allow using the macros in #define.
This is not using the QEMU's FIELD macros as this would require changing
all such macros found in skiboot (the PPC PowerNV firmware).
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20220628080544.1509428-1-aik@ozlabs.ru>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Diffstat (limited to 'target/ppc/cpu.h')
-rw-r--r-- | target/ppc/cpu.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index e109b5902b..b38c651af4 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -47,6 +47,18 @@ PPC_BIT32(bs)) #define PPC_BITMASK8(bs, be) ((PPC_BIT8(bs) - PPC_BIT8(be)) | PPC_BIT8(bs)) +/* + * QEMU version of the GETFIELD/SETFIELD macros from skiboot + * + * It might be better to use the existing extract64() and + * deposit64() but this means that all the register definitions will + * change and become incompatible with the ones found in skiboot. + */ +#define MASK_TO_LSH(m) (__builtin_ffsll(m) - 1) +#define GETFIELD(m, v) (((v) & (m)) >> MASK_TO_LSH(m)) +#define SETFIELD(m, v, val) \ + (((v) & ~(m)) | ((((typeof(v))(val)) << MASK_TO_LSH(m)) & (m))) + /*****************************************************************************/ /* Exception vectors definitions */ enum { |