c++ - unoptimised assembly code when compiling one code?
- veb (34/34) Jun 10 2010 Hello,
- Walter Bright (2/4) Jun 10 2010 You can try using the inline assembler.
- veb (12/12) Jun 11 2010 Hello,
- Walter Bright (2/3) Jun 12 2010 Thanks!
Hello,
When I compile this C code:(in a 16 bits system, so sizeof(int) = 2)
long i;
....
TValue *rb = (cast(int, ((i)>>23) & 0x1F));
float nb = rb->value.n;
The asm code (obj2asm) is:
mov DI,-070h[BP]
mov DX,-072h[BP]
mov AX,-074h[BP]
mov CL,017h
L1251: shr DX,1
rcr AX,1
loop L1251
and AH,1
imul BX,AX,6
add BX,-07Ah[BP]
mov DX,2[BX]
mov AX,[BX]
This code is often read in my programm, and I know the loop L1251 isn't very
optimised.
I think this should be faster:
instead of :
mov CL,017h
L1251: shr DX,1
rcr AX,1
loop L1251
having:
mov AX,DX
shr AX, 7
Could you help me, please, to improve my C code to obtain a better assembly
code when compiling this code(like the faster assembly code I wrote)
Thanks!
veb
Jun 10 2010
veb wrote:Could you help me, please, to improve my C code to obtain a better assembly code when compiling this code(like the faster assembly code I wrote)You can try using the inline assembler.
Jun 10 2010
Hello,
I changed the code to:
struct f16
{
unsigned int word1;
unsigned int word2;
};
TValue *rb = cast(int, ((((struct f16 *)&i)-> word2)>>(23-16) & 0x1F)));
float nb = rb->value.n;
My new code is globally two time more faster, because I have exactly what I
wanted
to have in the asm code.
I post for those who would have te same problem on a 16 bits system.
Jun 11 2010
veb wrote:I post for those who would have te same problem on a 16 bits system.Thanks!
Jun 12 2010








Walter Bright <newshound1 digitalmars.com>