>From: [email protected] On Behalf Of Yuan Kang
>Sent: Tuesday, 27 August, 2013 00:54
>I don't think that it is true that "(signed char)(*p) >= 0"
>is always true, <snip>
Mr Weimer didn't say it IS always true, he said a compiler
IS ALLOWED TO ASSUME it is. As I adjusted, the compiler does
have to document that it does this. Whether a given compiler
does it depends on the writers of that compiler, and quite
likely on the target architecture, and quite possibly on
the optimizations implemented by the compiler and used.
As I added, gcc (at least the versions I have) documents
that it doesn't do so. What you need to check (or test) is
all versions of all other compilers used on all platforms
OpenSSL supports, with all optimization settings. Preferably
also all versions or replacements that will be released in
the next several years; people often are seen staying on
old OpenSSL versions 5 years or more, so that seems a good
minimum. It's a lot easier to support code that just works.
> I think the optimization that PMHager was thinking about
> (based on what I see in the x86_64 assembly from gcc) is
> that the compiler could (but apparently not every compiler
> does this) use the instruction for checking the sign, like this:
> 9: 84 c9 test %cl,%cl
> b: 78 1b js 28 <UTF8_getc+0x28>
>This is most likely faster than having to do a logical and instruction
first.
It may be faster but that's far from certain, and I'm very
confident it's not usefully faster; nearly all of the time
will be in the memory references (which don't change)
and the branch if mispredicted (which doesn't change).
And not all CPUs work the same as x64, or x86. Where
speed really matters, like in some of the cipher and
hash cores, OpenSSL has assembler -- separate for each
CPU (more or less), and reliably producing the desired
instructions no matter what the C code generator does.
That's better (though more work) than nonportable C,
which soon needs #ifdef hell to keep working.
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [email protected]
Automated List Manager [email protected]