diff options
| author | Alex Bennée <alex.bennee@linaro.org> | 2023-03-02 18:58:00 -0800 |
|---|---|---|
| committer | Alex Bennée <alex.bennee@linaro.org> | 2023-03-07 20:44:09 +0000 |
| commit | 4692a86f1c90a26cad752409fc8d30e591e1f741 (patch) | |
| tree | c682af39c438108f22da5cde16d514963609ea49 /include/exec/target_long.h | |
| parent | bcbc36a98fe84e19c972bac19dd94aaf3a06a628 (diff) | |
| download | focaccia-qemu-4692a86f1c90a26cad752409fc8d30e591e1f741.tar.gz focaccia-qemu-4692a86f1c90a26cad752409fc8d30e591e1f741.zip | |
include: split target_long definition from cpu-defs
While we will continue to include this via cpu-defs it is useful to be able to define this separately for 32 and 64 bit versions of an otherwise target independent compilation unit. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230302190846.2593720-25-alex.bennee@linaro.org> Message-Id: <20230303025805.625589-25-richard.henderson@linaro.org>
Diffstat (limited to 'include/exec/target_long.h')
| -rw-r--r-- | include/exec/target_long.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/exec/target_long.h b/include/exec/target_long.h new file mode 100644 index 0000000000..93c9472971 --- /dev/null +++ b/include/exec/target_long.h @@ -0,0 +1,42 @@ +/* + * Target Long Definitions + * + * Copyright (c) 2003 Fabrice Bellard + * Copyright (c) 2023 Linaro Ltd + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef _TARGET_LONG_H_ +#define _TARGET_LONG_H_ + +/* + * Usually this should only be included via cpu-defs.h however for + * certain cases where we want to build only two versions of a binary + * object we can include directly. However the build-system must + * ensure TARGET_LONG_BITS is defined directly. + */ +#ifndef TARGET_LONG_BITS +#error TARGET_LONG_BITS not defined +#endif + +#define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8) + +/* target_ulong is the type of a virtual address */ +#if TARGET_LONG_SIZE == 4 +typedef int32_t target_long; +typedef uint32_t target_ulong; +#define TARGET_FMT_lx "%08x" +#define TARGET_FMT_ld "%d" +#define TARGET_FMT_lu "%u" +#elif TARGET_LONG_SIZE == 8 +typedef int64_t target_long; +typedef uint64_t target_ulong; +#define TARGET_FMT_lx "%016" PRIx64 +#define TARGET_FMT_ld "%" PRId64 +#define TARGET_FMT_lu "%" PRIu64 +#else +#error TARGET_LONG_SIZE undefined +#endif + +#endif /* _TARGET_LONG_H_ */ |