Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > comp.lang.c > #387398
| From | Bart <bc@freeuk.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: how cast works? |
| Date | 2024-08-08 18:29 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <v92va5$4msg$1@dont-email.me> (permalink) |
| References | <v8vlo9$2oc1v$1@dont-email.me> <slrnvb7kis.28a.dan@djph.net> <v929ah$3u7l7$1@dont-email.me> <v92gt1$e1l$1@dont-email.me> <20240808193203.00006287@yahoo.com> |
On 08/08/2024 17:32, Michael S wrote:
> On Thu, 8 Aug 2024 14:23:44 +0100
> Bart <bc@freeuk.com> wrote:
>> Try godbolt.org. Type in a fragment of code that does different kinds
>> of casts (it needs to be well-formed, so inside a function), and see
>> what code is produced with different C compilers.
>>
>> Use -O0 so that the code isn't optimised out of existence, and so
>> that you can more easily match it to the C ource.
>>
>>
>
>
> I'd recommend an opposite - use -O2 so the cast that does nothing
> optimized away.
>
> int foo_i2i(int x) { return (int)x; }
> int foo_u2i(unsigned x) { return (int)x; }
> int foo_b2i(_Bool x) { return (int)x; }
> int foo_d2i(double x) { return (int)x; }
The OP is curious as to what's involved when a conversion is done.
Hiding or eliminating code isn't helpful in that case; the results can
also be misleading:
Take this example:
void fred(void) {
_Bool b;
int i;
i=b;
}
Unoptimised, it generates this code:
push rbp
mov rbp, rsp
mov al, byte ptr [rbp - 1]
and al, 1
movzx eax, al
mov dword ptr [rbp - 8], eax
pop rbp
ret
You can see from this that a Bool occupies one byte; it is masked to 0/1
(so it doesn't trust it to contain only 0/1), then it is widened to an
int size.
With optimisation turned on, even at -O1, it produces this:
ret
That strikes me as rather less enlightening!
Meanwhile your foo_b2i function contains this optimised code:
mov eax, edi
ret
The masking and widening is not present. Presumably, it is taking
advantage of the fact that a _Bool argument will be converted and
widened to `int` at the callsite even though the parameter type is also
_Bool. So the conversion has already been done.
You will see this if writing also a call to foo_b2i() and looking at the
/non-elided/ code.
The unoptimised code for foo_b2i is pretty awful (like masking twice,
with a pointless write to memory between them). But sometimes with gcc
there is no sensible middle ground between terrible code, and having
most of it eliminated.
The unoptimised code from my C compiler for foo_b2i, excluding
entry/exit code, is:
movsx eax, byte [rbp + foo_b2i.x]
My compiler assumes that a _Bool type already contains 0 or 1.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar
how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-07 08:28 -0300
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-07 08:33 -0300
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-07 13:13 -0700
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 17:43 -0700
Re: how cast works? Vir Campestris <vir.campestris@invalid.invalid> - 2024-08-12 11:51 +0100
Challenge/exercise problem - signum() function Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-12 08:17 -0700
Re: Challenge/exercise problem - signum() function Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2024-08-12 16:07 +0000
Re: Challenge/exercise problem - signum() function Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-12 09:57 -0700
Re: how cast works? Dan Purgert <dan@djph.net> - 2024-08-07 20:00 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-07 13:26 -0700
Re: how cast works? Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-08-07 23:00 +0000
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 08:14 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-08 14:23 +0100
Re: how cast works? Michael S <already5chosen@yahoo.com> - 2024-08-08 19:32 +0300
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 14:11 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-08 18:29 +0100
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 14:50 -0300
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 14:57 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-08 19:01 +0100
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 15:13 -0300
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-08 12:29 -0700
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-08 19:58 +0200
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-08 20:09 +0100
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 00:32 +0200
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-08 16:14 -0700
Re: how cast works? Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-08-09 02:47 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-08 22:55 -0700
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-09 02:08 -0400
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 18:16 +0200
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 12:18 -0700
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 17:07 -0700
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-11 20:14 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-09 01:56 +0100
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 19:08 +0200
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-10 11:03 +0100
Re: how cast works? Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-08-09 02:45 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-08 12:42 -0700
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 17:34 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-08 22:41 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-08 16:17 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-09 11:04 +0100
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 19:12 +0200
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-12 15:36 +0100
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-09 13:57 -0400
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-09 21:59 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 14:47 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-10 00:32 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 17:12 -0700
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-09 18:29 -0400
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-13 11:18 +0200
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-13 11:34 +0100
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-13 07:51 -0400
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-13 14:01 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-13 12:46 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-13 21:51 +0100
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-13 16:46 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-14 00:56 +0100
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-18 03:37 -0700
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 14:29 -0700
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-09 18:35 -0400
Re: how cast works? Kaz Kylheku <643-408-1753@kylheku.com> - 2024-08-09 21:30 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 14:57 -0700
Re: how cast works? Kaz Kylheku <643-408-1753@kylheku.com> - 2024-08-09 23:14 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 16:58 -0700
Re: how cast works? Kaz Kylheku <643-408-1753@kylheku.com> - 2024-08-10 00:06 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 17:27 -0700
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-09 20:31 -0400
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-10 01:11 +0100
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-13 11:23 +0200
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 17:32 -0700
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-09 18:35 -0400
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 17:27 -0700
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 12:23 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-09 21:31 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 13:49 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-09 22:01 +0100
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-12 00:33 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-12 12:21 +0100
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 17:46 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-12 02:00 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-11 20:23 -0700
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 20:37 -0700
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-11 21:33 -0700
Re: how cast works? Ben Bacarisse <ben@bsb.me.uk> - 2024-08-12 16:57 +0100
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-12 10:04 -0700
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-12 13:35 -0700
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-09 07:57 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-09 16:25 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 12:06 -0700
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 19:20 +0200
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-09 15:54 -0300
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-09 16:05 -0300
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 21:43 +0200
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 13:28 -0700
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 22:01 +0200
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-10 11:17 +0100
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-10 10:15 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-10 17:14 +0100
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-10 20:01 -0300
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-10 17:10 -0700
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-11 09:23 -0300
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-11 13:30 +0100
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-11 14:16 -0300
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-11 13:38 -0700
Re: how cast works? Bart <bc@freeuk.com> - 2024-08-12 12:24 +0100
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 13:26 -0700
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-09 18:01 -0300
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 14:53 -0700
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-09 12:03 -0700
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-09 16:22 -0300
Re: how cast works? David Brown <david.brown@hesbynett.no> - 2024-08-09 00:36 +0200
Re: how cast works? Dan Purgert <dan@djph.net> - 2024-08-08 14:08 +0000
Re: how cast works? Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-08-09 02:42 +0000
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-07 13:08 -0700
Re: how cast works? Thiago Adams <thiago.adams@gmail.com> - 2024-08-08 08:35 -0300
Re: how cast works? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-08 12:39 -0700
Re: how cast works? James Kuyper <jameskuyper@alumni.caltech.edu> - 2024-08-08 18:40 -0400
Re: how cast works? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-11 17:15 -0700
Is there an audio book version (Was: how cast works?) gazelle@shell.xmission.com (Kenny McCormack) - 2024-08-08 16:19 +0000
Re: how cast works? Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-08-07 23:03 +0000
csiph-web