qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return
@ 2012-03-18 22:16 Stefan Weil
  2012-03-18 22:16 ` [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some " Stefan Weil
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Stefan Weil @ 2012-03-18 22:16 UTC (permalink / raw)
  To: qemu-devel, Blue Swirl; +Cc: Stefan Weil

Most functions which handle exceptions don't return.

With a compiler attribute (added by QEMU_NORETURN),
gcc can optimize the code.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---
 def-helper.h |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/def-helper.h b/def-helper.h
index 0e70c31..b98ff69 100644
--- a/def-helper.h
+++ b/def-helper.h
@@ -39,6 +39,7 @@
 #endif
 #define dh_alias_ptr ptr
 #define dh_alias_void void
+#define dh_alias_noreturn noreturn
 #define dh_alias_env ptr
 #define dh_alias(t) glue(dh_alias_, t)
 
@@ -52,36 +53,42 @@
 #define dh_ctype_tl target_ulong
 #define dh_ctype_ptr void *
 #define dh_ctype_void void
+#define dh_ctype_noreturn void QEMU_NORETURN
 #define dh_ctype_env CPUArchState *
 #define dh_ctype(t) dh_ctype_##t
 
 /* We can't use glue() here because it falls foul of C preprocessor
    recursive expansion rules.  */
 #define dh_retvar_decl0_void void
+#define dh_retvar_decl0_noreturn void
 #define dh_retvar_decl0_i32 TCGv_i32 retval
 #define dh_retvar_decl0_i64 TCGv_i64 retval
 #define dh_retvar_decl0_ptr TCGv_ptr retval
 #define dh_retvar_decl0(t) glue(dh_retvar_decl0_, dh_alias(t))
 
 #define dh_retvar_decl_void
+#define dh_retvar_decl_noreturn
 #define dh_retvar_decl_i32 TCGv_i32 retval,
 #define dh_retvar_decl_i64 TCGv_i64 retval,
 #define dh_retvar_decl_ptr TCGv_ptr retval,
 #define dh_retvar_decl(t) glue(dh_retvar_decl_, dh_alias(t))
 
 #define dh_retvar_void TCG_CALL_DUMMY_ARG
+#define dh_retvar_noreturn TCG_CALL_DUMMY_ARG
 #define dh_retvar_i32 GET_TCGV_i32(retval)
 #define dh_retvar_i64 GET_TCGV_i64(retval)
 #define dh_retvar_ptr GET_TCGV_ptr(retval)
 #define dh_retvar(t) glue(dh_retvar_, dh_alias(t))
 
 #define dh_is_64bit_void 0
+#define dh_is_64bit_noreturn 0
 #define dh_is_64bit_i32 0
 #define dh_is_64bit_i64 1
 #define dh_is_64bit_ptr (TCG_TARGET_REG_BITS == 64)
 #define dh_is_64bit(t) glue(dh_is_64bit_, dh_alias(t))
 
 #define dh_is_signed_void 0
+#define dh_is_signed_noreturn 0
 #define dh_is_signed_i32 0
 #define dh_is_signed_s32 1
 #define dh_is_signed_i64 0
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some functions which don't return
  2012-03-18 22:16 [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return Stefan Weil
@ 2012-03-18 22:16 ` Stefan Weil
  2012-03-19 10:46   ` Andreas Färber
  2012-03-18 22:16 ` [Qemu-devel] [PATCH 3/3] target-sparc: " Stefan Weil
  2012-03-19 10:45 ` [Qemu-devel] [PATCH 1/3] Add support for target helper " Andreas Färber
  2 siblings, 1 reply; 6+ messages in thread
From: Stefan Weil @ 2012-03-18 22:16 UTC (permalink / raw)
  To: qemu-devel, Blue Swirl; +Cc: Stefan Weil, Aurelien Jarno

helper_raise_exception_err does not return, nor do helper_raise_exception
and do_unaligned_access.

Cc: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
---
 target-mips/helper.h    |    4 ++--
 target-mips/op_helper.c |    3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/target-mips/helper.h b/target-mips/helper.h
index 442f684..76fb451 100644
--- a/target-mips/helper.h
+++ b/target-mips/helper.h
@@ -1,7 +1,7 @@
 #include "def-helper.h"
 
-DEF_HELPER_2(raise_exception_err, void, i32, int)
-DEF_HELPER_1(raise_exception, void, i32)
+DEF_HELPER_2(raise_exception_err, noreturn, i32, int)
+DEF_HELPER_1(raise_exception, noreturn, i32)
 
 #ifdef TARGET_MIPS64
 DEF_HELPER_3(ldl, tl, tl, tl, int)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 584f0ab..a825c94 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -2274,7 +2274,8 @@ void helper_wait (void)
 
 #if !defined(CONFIG_USER_ONLY)
 
-static void do_unaligned_access (target_ulong addr, int is_write, int is_user, void *retaddr);
+static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int is_write,
+                                              int is_user, void *retaddr);
 
 #define MMUSUFFIX _mmu
 #define ALIGNED_ONLY
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 3/3] target-sparc: Add compiler attribute to some functions which don't return
  2012-03-18 22:16 [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return Stefan Weil
  2012-03-18 22:16 ` [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some " Stefan Weil
@ 2012-03-18 22:16 ` Stefan Weil
  2012-03-19 10:45 ` [Qemu-devel] [PATCH 1/3] Add support for target helper " Andreas Färber
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Weil @ 2012-03-18 22:16 UTC (permalink / raw)
  To: qemu-devel, Blue Swirl; +Cc: Stefan Weil

helper_raise_exception does not return, nor does do_unaligned_access.

Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
---
 target-sparc/cpu.h    |    5 +++--
 target-sparc/helper.h |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h
index 1025752..885ad45 100644
--- a/target-sparc/cpu.h
+++ b/target-sparc/cpu.h
@@ -699,8 +699,9 @@ uint64_t cpu_tick_get_count(CPUTimer *timer);
 void cpu_tick_set_limit(CPUTimer *timer, uint64_t limit);
 trap_state* cpu_tsptr(CPUSPARCState* env);
 #endif
-void do_unaligned_access(CPUSPARCState *env, target_ulong addr, int is_write,
-                         int is_user, void *retaddr);
+void QEMU_NORETURN do_unaligned_access(CPUSPARCState *env, target_ulong addr,
+                                       int is_write, int is_user,
+                                       void *retaddr);
 
 #define TB_FLAG_FPU_ENABLED (1 << 4)
 #define TB_FLAG_AM_ENABLED (1 << 5)
diff --git a/target-sparc/helper.h b/target-sparc/helper.h
index c4d6225..e3c7fdd 100644
--- a/target-sparc/helper.h
+++ b/target-sparc/helper.h
@@ -78,7 +78,7 @@ DEF_HELPER_1(fcmpeq_fcc1, void, env)
 DEF_HELPER_1(fcmpeq_fcc2, void, env)
 DEF_HELPER_1(fcmpeq_fcc3, void, env)
 #endif
-DEF_HELPER_2(raise_exception, void, env, int)
+DEF_HELPER_2(raise_exception, noreturn, env, int)
 #define F_HELPER_0_1(name) DEF_HELPER_1(f ## name, void, env)
 
 DEF_HELPER_3(faddd, f64, env, f64, f64)
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return
  2012-03-18 22:16 [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return Stefan Weil
  2012-03-18 22:16 ` [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some " Stefan Weil
  2012-03-18 22:16 ` [Qemu-devel] [PATCH 3/3] target-sparc: " Stefan Weil
@ 2012-03-19 10:45 ` Andreas Färber
  2012-03-19 11:06   ` Stefan Weil
  2 siblings, 1 reply; 6+ messages in thread
From: Andreas Färber @ 2012-03-19 10:45 UTC (permalink / raw)
  To: Stefan Weil; +Cc: Blue Swirl, qemu-devel

Am 18.03.2012 23:16, schrieb Stefan Weil:
> Most functions which handle exceptions don't return.
> 
> With a compiler attribute (added by QEMU_NORETURN),
> gcc can optimize the code.

Do you have any numbers?

> 
> Signed-off-by: Stefan Weil <sw@weilnetz.de>

Seems like a sensible optimization,

Reviewed-by: Andreas Färber <afaerber@suse.de>

Andreas

> ---
>  def-helper.h |    7 +++++++
>  1 files changed, 7 insertions(+), 0 deletions(-)
> 
> diff --git a/def-helper.h b/def-helper.h
> index 0e70c31..b98ff69 100644
> --- a/def-helper.h
> +++ b/def-helper.h
> @@ -39,6 +39,7 @@
>  #endif
>  #define dh_alias_ptr ptr
>  #define dh_alias_void void
> +#define dh_alias_noreturn noreturn
>  #define dh_alias_env ptr
>  #define dh_alias(t) glue(dh_alias_, t)
>  
> @@ -52,36 +53,42 @@
>  #define dh_ctype_tl target_ulong
>  #define dh_ctype_ptr void *
>  #define dh_ctype_void void
> +#define dh_ctype_noreturn void QEMU_NORETURN
>  #define dh_ctype_env CPUArchState *
>  #define dh_ctype(t) dh_ctype_##t
>  
>  /* We can't use glue() here because it falls foul of C preprocessor
>     recursive expansion rules.  */
>  #define dh_retvar_decl0_void void
> +#define dh_retvar_decl0_noreturn void
>  #define dh_retvar_decl0_i32 TCGv_i32 retval
>  #define dh_retvar_decl0_i64 TCGv_i64 retval
>  #define dh_retvar_decl0_ptr TCGv_ptr retval
>  #define dh_retvar_decl0(t) glue(dh_retvar_decl0_, dh_alias(t))
>  
>  #define dh_retvar_decl_void
> +#define dh_retvar_decl_noreturn
>  #define dh_retvar_decl_i32 TCGv_i32 retval,
>  #define dh_retvar_decl_i64 TCGv_i64 retval,
>  #define dh_retvar_decl_ptr TCGv_ptr retval,
>  #define dh_retvar_decl(t) glue(dh_retvar_decl_, dh_alias(t))
>  
>  #define dh_retvar_void TCG_CALL_DUMMY_ARG
> +#define dh_retvar_noreturn TCG_CALL_DUMMY_ARG
>  #define dh_retvar_i32 GET_TCGV_i32(retval)
>  #define dh_retvar_i64 GET_TCGV_i64(retval)
>  #define dh_retvar_ptr GET_TCGV_ptr(retval)
>  #define dh_retvar(t) glue(dh_retvar_, dh_alias(t))
>  
>  #define dh_is_64bit_void 0
> +#define dh_is_64bit_noreturn 0
>  #define dh_is_64bit_i32 0
>  #define dh_is_64bit_i64 1
>  #define dh_is_64bit_ptr (TCG_TARGET_REG_BITS == 64)
>  #define dh_is_64bit(t) glue(dh_is_64bit_, dh_alias(t))
>  
>  #define dh_is_signed_void 0
> +#define dh_is_signed_noreturn 0
>  #define dh_is_signed_i32 0
>  #define dh_is_signed_s32 1
>  #define dh_is_signed_i64 0


-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some functions which don't return
  2012-03-18 22:16 ` [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some " Stefan Weil
@ 2012-03-19 10:46   ` Andreas Färber
  0 siblings, 0 replies; 6+ messages in thread
From: Andreas Färber @ 2012-03-19 10:46 UTC (permalink / raw)
  To: Stefan Weil; +Cc: Blue Swirl, qemu-devel, Aurelien Jarno

Am 18.03.2012 23:16, schrieb Stefan Weil:
> helper_raise_exception_err does not return, nor do helper_raise_exception
> and do_unaligned_access.
> 
> Cc: Aurelien Jarno <aurelien@aurel32.net>
> Signed-off-by: Stefan Weil <sw@weilnetz.de>

Reviewed-by: Andreas Färber <afaerber@suse.de>

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return
  2012-03-19 10:45 ` [Qemu-devel] [PATCH 1/3] Add support for target helper " Andreas Färber
@ 2012-03-19 11:06   ` Stefan Weil
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Weil @ 2012-03-19 11:06 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Blue Swirl, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 928 bytes --]

Am 19.03.2012 11:45, schrieb Andreas Färber:
> Am 18.03.2012 23:16, schrieb Stefan Weil:
>> Most functions which handle exceptions don't return.
>>
>> With a compiler attribute (added by QEMU_NORETURN),
>> gcc can optimize the code.
>
> Do you have any numbers?

Yes, of course: for (;;) { printf("%ld\n", random()); } :-)

To be honest, I don't expect large savings of code (some bytes for the 
function return
which is no longer needed), nor will there be a huge gain in execution 
speed.

It's more for documentation purposes that this attribute is useful here.
|We might also add a compiler warning for missing attributes some day
(-Wsuggest-attribute=||noreturn|) - it is surprising how many functions 
never return!

Regards,
Stefan

>
>>
>> Signed-off-by: Stefan Weil <sw@weilnetz.de>
>
> Seems like a sensible optimization,
>
> Reviewed-by: Andreas Färber <afaerber@suse.de>
>
> Andreas

[-- Attachment #2: Type: text/html, Size: 1831 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-03-19 11:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-18 22:16 [Qemu-devel] [PATCH 1/3] Add support for target helper functions which don't return Stefan Weil
2012-03-18 22:16 ` [Qemu-devel] [PATCH 2/3] target-mips: Add compiler attribute to some " Stefan Weil
2012-03-19 10:46   ` Andreas Färber
2012-03-18 22:16 ` [Qemu-devel] [PATCH 3/3] target-sparc: " Stefan Weil
2012-03-19 10:45 ` [Qemu-devel] [PATCH 1/3] Add support for target helper " Andreas Färber
2012-03-19 11:06   ` Stefan Weil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).