On 5/11/2026 12:06 PM, Richard Henderson wrote:
> Move the entire contents of target-info.c into target-info.h,
> marking each function inline.
> 
> Signed-off-by: Richard Henderson <[email protected]>
> ---
>  include/qemu/target-info.h | 82 +++++++++++++++++++++++++++------
>  target-info.c              | 93 --------------------------------------
>  meson.build                |  1 -
>  3 files changed, 68 insertions(+), 108 deletions(-)
>  delete mode 100644 target-info.c
> 
> diff --git a/include/qemu/target-info.h b/include/qemu/target-info.h
> index d8d2194d9b..2c9f5c78fb 100644
> --- a/include/qemu/target-info.h
> +++ b/include/qemu/target-info.h
> @@ -45,14 +45,20 @@ TargetInfo target_info;
>   *
>   * Returns: Canonical target name (i.e. "i386").
>   */
> -const char *target_name(void);
> +static inline const char *target_name(void)
> +{
> +    return target_info.target_name;
> +}
>  
>  /**
>   * target_long_bits:
>   *
>   * Returns: number of bits in a long type for this target (i.e. 64).
>   */
> -unsigned target_long_bits(void);
> +static inline unsigned target_long_bits(void)
> +{
> +    return target_info.long_bits;
> +}
>  
>  /**
>   * target_machine_typename:
> @@ -60,21 +66,30 @@ unsigned target_long_bits(void);
>   * Returns: Name of the QOM interface implemented by machines
>   *          usable on this target binary.
>   */
> -const char *target_machine_typename(void);
> +static inline const char *target_machine_typename(void)
> +{
> +    return target_info.machine_typename;
> +}
>  
>  /**
>   * target_cpu_type:
>   *
>   * Returns: target CPU base QOM type name (i.e. TYPE_X86_CPU).
>   */
> -const char *target_cpu_type(void);
> +static inline const char *target_cpu_type(void)
> +{
> +    return target_info.cpu_type;
> +}
>  
>  /**
>   * target_endian_mode:
>   *
>   * Returns: QAPI EndianMode enum (e.g. ENDIAN_MODE_LITTLE).
>   */
> -EndianMode target_endian_mode(void);
> +static inline EndianMode target_endian_mode(void)
> +{
> +    return target_info.endianness;
> +}
>  
>  /**
>   * target_big_endian:
> @@ -86,62 +101,101 @@ EndianMode target_endian_mode(void);
>   * the target, so please do *not* use this function unless you  know very
>   * well what you are doing!
>   */
> -bool target_big_endian(void);
> +static inline bool target_big_endian(void)
> +{
> +    return target_endian_mode() == ENDIAN_MODE_BIG;
> +}
>  
>  /**
>   * target_arch:
>   *
>   * Returns: QAPI SysEmuTarget enum (e.g. SYS_EMU_TARGET_X86_64).
>   */
> -SysEmuTarget target_arch(void);
> +static inline SysEmuTarget target_arch(void)
> +{
> +    return target_info.target_arch;
> +}
>  
>  /**
>   * target_base_arm:
>   *
>   * Returns whether the target architecture is ARM or Aarch64.
>   */
> -bool target_base_arm(void);
> +static inline bool target_base_arm(void)
> +{
> +    switch (target_arch()) {
> +    case SYS_EMU_TARGET_ARM:
> +    case SYS_EMU_TARGET_AARCH64:
> +        return true;
> +    default:
> +        return false;
> +    }
> +}
>  
>  /**
>   * target_arm:
>   *
>   * Returns whether the target architecture is ARM (32-bit, not Aarch64).
>   */
> -bool target_arm(void);
> +static inline bool target_arm(void)
> +{
> +    return target_arch() == SYS_EMU_TARGET_ARM;
> +}
>  
>  /**
>   * target_aarch64:
>   *
>   * Returns whether the target architecture is Aarch64.
>   */
> -bool target_aarch64(void);
> +static inline bool target_aarch64(void)
> +{
> +    return target_arch() == SYS_EMU_TARGET_AARCH64;
> +}
>  
>  /**
>   * target_base_ppc:
>   *
>   * Returns whether the target architecture is PowerPC 32-bit or 64-bit.
>   */
> -bool target_base_ppc(void);
> +static inline bool target_base_ppc(void)
> +{
> +    switch (target_arch()) {
> +    case SYS_EMU_TARGET_PPC:
> +    case SYS_EMU_TARGET_PPC64:
> +        return true;
> +    default:
> +        return false;
> +    }
> +}
>  
>  /**
>   * target_ppc:
>   *
>   * Returns whether the target architecture is PowerPC 32-bit.
>   */
> -bool target_ppc(void);
> +static inline bool target_ppc(void)
> +{
> +    return target_arch() == SYS_EMU_TARGET_PPC;
> +}
>  
>  /**
>   * target_ppc64:
>   *
>   * Returns whether the target architecture is PowerPC 64-bit.
>   */
> -bool target_ppc64(void);
> +static inline bool target_ppc64(void)
> +{
> +    return target_arch() == SYS_EMU_TARGET_PPC64;
> +}
>  
>  /**
>   * target_s390x:
>   *
>   * Returns whether the target architecture is S390x.
>   */
> -bool target_s390x(void);
> +static inline bool target_s390x(void)
> +{
> +    return target_arch() == SYS_EMU_TARGET_S390X;
> +}
>  
>  #endif
> diff --git a/target-info.c b/target-info.c
> deleted file mode 100644
> index f02a033584..0000000000
> --- a/target-info.c
> +++ /dev/null
> @@ -1,93 +0,0 @@
> -/*
> - * QEMU target info helpers
> - *
> - *  Copyright (c) Linaro
> - *
> - * SPDX-License-Identifier: GPL-2.0-or-later
> - */
> -
> -#include "qemu/osdep.h"
> -#include "qemu/target-info.h"
> -#include "qapi/error.h"
> -
> -const char *target_name(void)
> -{
> -    return target_info.target_name;
> -}
> -
> -unsigned target_long_bits(void)
> -{
> -    return target_info.long_bits;
> -}
> -
> -SysEmuTarget target_arch(void)
> -{
> -    return target_info.target_arch;
> -}
> -
> -const char *target_cpu_type(void)
> -{
> -    return target_info.cpu_type;
> -}
> -
> -const char *target_machine_typename(void)
> -{
> -    return target_info.machine_typename;
> -}
> -
> -EndianMode target_endian_mode(void)
> -{
> -    return target_info.endianness;
> -}
> -
> -bool target_big_endian(void)
> -{
> -    return target_endian_mode() == ENDIAN_MODE_BIG;
> -}
> -
> -bool target_base_arm(void)
> -{
> -    switch (target_arch()) {
> -    case SYS_EMU_TARGET_ARM:
> -    case SYS_EMU_TARGET_AARCH64:
> -        return true;
> -    default:
> -        return false;
> -    }
> -}
> -
> -bool target_arm(void)
> -{
> -    return target_arch() == SYS_EMU_TARGET_ARM;
> -}
> -
> -bool target_aarch64(void)
> -{
> -    return target_arch() == SYS_EMU_TARGET_AARCH64;
> -}
> -
> -bool target_base_ppc(void)
> -{
> -    switch (target_arch()) {
> -    case SYS_EMU_TARGET_PPC:
> -    case SYS_EMU_TARGET_PPC64:
> -        return true;
> -    default:
> -        return false;
> -    }
> -}
> -
> -bool target_ppc(void)
> -{
> -    return target_arch() == SYS_EMU_TARGET_PPC;
> -}
> -
> -bool target_ppc64(void)
> -{
> -    return target_arch() == SYS_EMU_TARGET_PPC64;
> -}
> -
> -bool target_s390x(void)
> -{
> -    return target_arch() == SYS_EMU_TARGET_S390X;
> -}
> diff --git a/meson.build b/meson.build
> index 9a804dc810..aad149cdb4 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3868,7 +3868,6 @@ endif
>  common_ss.add(pagevary)
>  system_ss.add(files('page-vary-system.c'))
>  
> -common_ss.add(files('target-info.c'))
>  system_ss.add(tinfoqom)
>  
>  subdir('backends')

We could evaluate the added performance of this, once we have a
benchmark, with/without target_info being an indirect function call or a
structure access.

Regards,
Pierrick

Reply via email to