December 31, 2004
new CL.EXE bug...orz
When I use /O2 option for CL.EXE, it seems to generate bad code...
0:000>u nspr4!dosprintf
nspr4!dosprintf
00000000`30009650 488bc4 mov rax,rsp
00000000`30009653 4881ec08020000 sub rsp,0x208
00000000`3000965a 488958f8 mov [rax-0x8],rbx
00000000`3000965e 488968f0 mov [rax-0x10],rbp
00000000`30009662 4c8960d8 mov [rax-0x28],r12
00000000`30009666 4d8be0 mov r12,r8
00000000`30009669 488bda mov rbx,rdx
00000000`3000966c 488be9 mov rbp,rcx
00000000`3000966f 4c8d4c2470 lea r9,[rsp+0x70]
00000000`30009674 4c8d442450 lea r8,[rsp+0x50]
00000000`30009679 498bd4 mov rdx,r12
00000000`3000967c 488bcb mov rcx,rbx
00000000`3000967f 4c8970c8 mov [rax-0x38],r14
00000000`30009683 48c744244800000000 mov qword ptr [rsp+0x48],0x0
00000000`3000968c e8bffaffff call nspr4!BuildArgArray (0000000030009150)
00000000`30009691 8b542450 mov edx,[rsp+0x50]
00000000`30009695 85d2 test edx,edx
00000000`30009697 4c8bf0 mov r14,rax
00000000`3000969a 7907 jns nspr4!dosprintf+0x53 (00000000300096a3)
00000000`3000969c 8bc2 mov eax,edx
00000000`3000969e e94c060000 jmp nspr4!dosprintf+0x69f (0000000030009cef)
00000000`300096a3 0fb603 movzx eax,byte ptr [rbx]
00000000`300096a6 4889b424f0010000 mov [rsp+0x1f0],rsi
00000000`300096ae 4889bc24e8010000 mov [rsp+0x1e8],rdi
00000000`300096b6 84c0 test al,al
00000000`300096b8 4c89ac24d8010000 mov [rsp+0x1d8],r13
00000000`300096c0 4c89bc24c8010000 mov [rsp+0x1c8],r15
00000000`300096c8 660f7fb424b0010000 movdqa oword ptr [rsp+0x1b0],xmm6
00000000`300096d1 0f84c1050000 je nspr4!dosprintf+0x648 (0000000030009c98)
00000000`300096d7 4c8b7c2448 mov r15,[rsp+0x48]
00000000`300096dc 66666690 nop
00000000`300096e0 48ffc3 inc rbx
If xmm8 is uninitalized, Athlon64 throws error such as AV.
When I use /Od, ...
0:000> u nspr4!dosprintf
nspr4!dosprintf
00000000`3000a4f0 4c89442418 mov [rsp+0x18],r8
00000000`3000a4f5 4889542410 mov [rsp+0x10],rdx
00000000`3000a4fa 48894c2408 mov [rsp+0x8],rcx
00000000`3000a4ff 4881ec58020000 sub rsp,0x258
00000000`3000a506 48c784248000000000000000 mov qword ptr [rsp+0x80],0x0
00000000`3000a512 48c78424f801000000000000 mov qword ptr [rsp+0x1f8],0x0
00000000`3000a51e 4c8d8c24a0000000 lea r9,[rsp+0xa0]
00000000`3000a526 4c8d8424e0010000 lea r8,[rsp+0x1e0]
00000000`3000a52e 488b942470020000 mov rdx,[rsp+0x270]
00000000`3000a536 488b8c2468020000 mov rcx,[rsp+0x268]
00000000`3000a53e e84d1e0000 call nspr4!BuildArgArray (000000003000c390)
00000000`3000a543 4889842480000000 mov [rsp+0x80],rax
00000000`3000a54b 83bc24e001000000 cmp dword ptr [rsp+0x1e0],0x0
00000000`3000a553 7d0c jge nspr4!dosprintf+0x71 (000000003000a561)
00000000`3000a555 8b8424e0010000 mov eax,[rsp+0x1e0]
00000000`3000a55c e95e0f0000 jmp nspr4!dosprintf+0xfcf (000000003000b4bf)
00000000`3000a561 488b842468020000 mov rax,[rsp+0x268]
00000000`3000a569 0fb600 movzx eax,byte ptr [rax]
00000000`3000a56c 888424f0010000 mov [rsp+0x1f0],al
00000000`3000a573 0fbe8424f0010000 movsx eax,byte ptr [rsp+0x1f0]
00000000`3000a57b 488b8c2468020000 mov rcx,[rsp+0x268]
00000000`3000a583 48ffc1 inc rcx
00000000`3000a586 48898c2468020000 mov [rsp+0x268],rcx
00000000`3000a58e 85c0 test eax,eax
00000000`3000a590 0f84c60e0000 je nspr4!dosprintf+0xf6c (000000003000b45c)
This is right code. This is a bug of CL.EXE...
Trackback URL: http://www.mozilla-x86-64.com/mt/mt-tb.cgi/33