tcg: add dup_const_tl wrapper
dup_const always generates a uint64_t, which may exceed the size of a target_long (generating warnings with recent-enough compilers). To ensure that we can use dup_const both for 64bit and 32bit targets, this adds dup_const_tl, which either maps back to dup_const (for 64bit targets) or provides a similar implementation using 32bit constants. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Philipp Tomsich <philipp.tomsich@vrull.eu> Message-Id: <20211003214243.3813425-1-philipp.tomsich@vrull.eu> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
08a13c4b24
commit
db637f270b
@ -1272,6 +1272,18 @@ uint64_t dup_const(unsigned vece, uint64_t c);
|
|||||||
: (qemu_build_not_reached_always(), 0)) \
|
: (qemu_build_not_reached_always(), 0)) \
|
||||||
: dup_const(VECE, C))
|
: dup_const(VECE, C))
|
||||||
|
|
||||||
|
#if TARGET_LONG_BITS == 64
|
||||||
|
# define dup_const_tl dup_const
|
||||||
|
#else
|
||||||
|
# define dup_const_tl(VECE, C) \
|
||||||
|
(__builtin_constant_p(VECE) \
|
||||||
|
? ( (VECE) == MO_8 ? 0x01010101ul * (uint8_t)(C) \
|
||||||
|
: (VECE) == MO_16 ? 0x00010001ul * (uint16_t)(C) \
|
||||||
|
: (VECE) == MO_32 ? 0x00000001ul * (uint32_t)(C) \
|
||||||
|
: (qemu_build_not_reached_always(), 0)) \
|
||||||
|
: (target_long)dup_const(VECE, C))
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Memory helpers that will be used by TCG generated code.
|
* Memory helpers that will be used by TCG generated code.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user