diff options
| author | Vivian Wang <dramforever@live.com> | 2024-03-16 01:36:39 +0800 |
|---|---|---|
| committer | Anup Patel <anup@brainfault.org> | 2024-04-05 17:23:51 +0530 |
| commit | 5c9a73565f5e6d07cf30ecd7fa511d872050bd2c (patch) | |
| tree | cc0b27b475728a733370de2937ff84012289018f /include | |
| parent | 06fc453ec13de75e156261e8fe4073334d0e00c2 (diff) | |
| download | opensbi-5c9a73565f5e6d07cf30ecd7fa511d872050bd2c.zip opensbi-5c9a73565f5e6d07cf30ecd7fa511d872050bd2c.tar.gz opensbi-5c9a73565f5e6d07cf30ecd7fa511d872050bd2c.tar.bz2 | |
include: sbi: Support byteorder macros in assembly
Avoid using C types and casts if sbi/sbi_byteorder.h is included in
assembly code
Signed-off-by: Vivian Wang <dramforever@live.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/sbi/sbi_byteorder.h | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/include/sbi/sbi_byteorder.h b/include/sbi/sbi_byteorder.h index db6eb2b..2b4981e 100644 --- a/include/sbi/sbi_byteorder.h +++ b/include/sbi/sbi_byteorder.h @@ -7,7 +7,12 @@ #ifndef __SBI_BYTEORDER_H__ #define __SBI_BYTEORDER_H__ -#include <sbi/sbi_types.h> +#ifdef __ASSEMBLER__ +# define _conv_cast(type, val) (val) +#else +# include <sbi/sbi_types.h> +# define _conv_cast(type, val) ((type)(val)) +#endif #define BSWAP16(x) ((((x) & 0x00ff) << 8) | \ (((x) & 0xff00) >> 8)) @@ -25,37 +30,37 @@ (((x) & 0xff00000000000000ULL) >> 56)) #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ /* CPU(little-endian) */ -#define cpu_to_be16(x) ((uint16_t)BSWAP16(x)) -#define cpu_to_be32(x) ((uint32_t)BSWAP32(x)) -#define cpu_to_be64(x) ((uint64_t)BSWAP64(x)) +#define cpu_to_be16(x) _conv_cast(uint16_t, BSWAP16(x)) +#define cpu_to_be32(x) _conv_cast(uint32_t, BSWAP32(x)) +#define cpu_to_be64(x) _conv_cast(uint64_t, BSWAP64(x)) -#define be16_to_cpu(x) ((uint16_t)BSWAP16(x)) -#define be32_to_cpu(x) ((uint32_t)BSWAP32(x)) -#define be64_to_cpu(x) ((uint64_t)BSWAP64(x)) +#define be16_to_cpu(x) _conv_cast(uint16_t, BSWAP16(x)) +#define be32_to_cpu(x) _conv_cast(uint32_t, BSWAP32(x)) +#define be64_to_cpu(x) _conv_cast(uint64_t, BSWAP64(x)) -#define cpu_to_le16(x) ((uint16_t)(x)) -#define cpu_to_le32(x) ((uint32_t)(x)) -#define cpu_to_le64(x) ((uint64_t)(x)) +#define cpu_to_le16(x) _conv_cast(uint16_t, (x)) +#define cpu_to_le32(x) _conv_cast(uint32_t, (x)) +#define cpu_to_le64(x) _conv_cast(uint64_t, (x)) -#define le16_to_cpu(x) ((uint16_t)(x)) -#define le32_to_cpu(x) ((uint32_t)(x)) -#define le64_to_cpu(x) ((uint64_t)(x)) +#define le16_to_cpu(x) _conv_cast(uint16_t, (x)) +#define le32_to_cpu(x) _conv_cast(uint32_t, (x)) +#define le64_to_cpu(x) _conv_cast(uint64_t, (x)) #else /* CPU(big-endian) */ -#define cpu_to_be16(x) ((uint16_t)(x)) -#define cpu_to_be32(x) ((uint32_t)(x)) -#define cpu_to_be64(x) ((uint64_t)(x)) +#define cpu_to_be16(x) _conv_cast(uint16_t, (x)) +#define cpu_to_be32(x) _conv_cast(uint32_t, (x)) +#define cpu_to_be64(x) _conv_cast(uint64_t, (x)) -#define be16_to_cpu(x) ((uint16_t)(x)) -#define be32_to_cpu(x) ((uint32_t)(x)) -#define be64_to_cpu(x) ((uint64_t)(x)) +#define be16_to_cpu(x) _conv_cast(uint16_t, (x)) +#define be32_to_cpu(x) _conv_cast(uint32_t, (x)) +#define be64_to_cpu(x) _conv_cast(uint64_t, (x)) -#define cpu_to_le16(x) ((uint16_t)BSWAP16(x)) -#define cpu_to_le32(x) ((uint32_t)BSWAP32(x)) -#define cpu_to_le64(x) ((uint64_t)BSWAP64(x)) +#define cpu_to_le16(x) _conv_cast(uint16_t, BSWAP16(x)) +#define cpu_to_le32(x) _conv_cast(uint32_t, BSWAP32(x)) +#define cpu_to_le64(x) _conv_cast(uint64_t, BSWAP64(x)) -#define le16_to_cpu(x) ((uint16_t)BSWAP16(x)) -#define le32_to_cpu(x) ((uint32_t)BSWAP32(x)) -#define le64_to_cpu(x) ((uint64_t)BSWAP64(x)) +#define le16_to_cpu(x) _conv_cast(uint16_t, BSWAP16(x)) +#define le32_to_cpu(x) _conv_cast(uint32_t, BSWAP32(x)) +#define le64_to_cpu(x) _conv_cast(uint64_t, BSWAP64(x)) #endif #if __riscv_xlen == 64 |
