From: "carlo\.bramix" <carlo.bramix@libero.it>
To: "guile-devel" <guile-devel@gnu.org>
Subject: Re: `SCM_MAKE_CHAR ()' signedness issue
Date: Mon, 17 Aug 2009 20:52:59 +0200 [thread overview]
Message-ID: <KOJB4B$8FF6D576AD9DB3B321948833C044C82D@libero.it> (raw)
Hello,
if I understood the problem, I think it can be easily fixed without using an inline function.
For example:
#ifdef __GNUC__
#define SCM_MAKE_CHAR(__x) \
({ scm_t_int32 __t = (scm_t_int32)(__x); \
(__t < 0) \
? SCM_MAKE_ITAG8 ((scm_t_bits) (unsigned char) (__x), scm_tc8_char) \
: SCM_MAKE_ITAG8 ((scm_t_bits) (__x), scm_tc8_char); \
__t; \
})
#else
#define SCM_MAKE_CHAR(x) \
((scm_t_int32) (x) < 0 \
? SCM_MAKE_ITAG8 ((scm_t_bits) (unsigned char) (x), scm_tc8_char) \
: SCM_MAKE_ITAG8 ((scm_t_bits) (x), scm_tc8_char))
#endif
solves the problem.
Actually a much more efficient solution specifically designed for GCC may use __builtin_types_compatible_p() and __builtin_choose_expr() intrinsic functions, but this will force you to support GCC 3.x or newer.
Something like:
#if defined __GNUC__ && __GNUC__ >= 3
...
#elif ...
will need to be written.
Sincerely,
Carlo Bramini.
---------- Initial Header -----------
From : guile-devel-bounces+carlo.bramix=libero.it@gnu.org
To : guile-devel@gnu.org
Cc :
Date : Mon, 17 Aug 2009 17:33:03 +0200
Subject : Re: `SCM_MAKE_CHAR ()' signedness issue
> Mike Gran <spk121@yahoo.com> writes:
>
> > On my system I ran a test with SCM_MAKE_CHAR as a macro, an an inline,
> > and as a never inlined function. I ran ./check-guile twice for each.
>
> You're cheating! ;-)
>
> The test suite does lots of things besides calling `SCM_MAKE_CHAR ()',
> so I'm not sure if it's a good benchmark.
>
> I'm fairly confident that for such a small piece of code inlining is
> always a good idea.
>
> Thanks,
> Ludo'.
>
next reply other threads:[~2009-08-17 18:52 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-17 18:52 carlo.bramix [this message]
2009-08-17 19:41 ` `SCM_MAKE_CHAR ()' signedness issue Ken Raeburn
-- strict thread matches above, loose matches on Subject: below --
2009-08-18 18:39 carlo.bramix
2009-08-18 18:54 ` Mike Gran
2009-08-18 23:36 ` Greg Troxel
2009-08-15 12:00 Ludovic Courtès
2009-08-16 21:58 ` Ken Raeburn
2009-08-16 22:13 ` Ludovic Courtès
2009-08-16 22:25 ` Ken Raeburn
2009-08-17 8:26 ` Ludovic Courtès
2009-08-17 13:05 ` Mike Gran
2009-08-17 15:33 ` Ludovic Courtès
2009-08-18 17:32 ` Mike Gran
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='KOJB4B$8FF6D576AD9DB3B321948833C044C82D@libero.it' \
--to=carlo.bramix@libero.it \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 read-only IMAP folder(s) and NNTP newsgroup(s).