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