digitalmars.D.bugs - [Issue 11071] New: REX.R and REX.W prefixes do not seem to be generated in some cases
- d-bugmail puremagic.com (64/64) Sep 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11071
- d-bugmail puremagic.com (8/8) Sep 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11071
- d-bugmail puremagic.com (14/14) Sep 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11071
http://d.puremagic.com/issues/show_bug.cgi?id=11071 Summary: REX.R and REX.W prefixes do not seem to be generated in some cases Product: D Version: D2 Platform: x86_64 URL: http://forum.dlang.org/thread/izztrfapqdzmsohchqbq for um.dlang.org OS/Version: Linux Status: NEW Keywords: iasm Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: jc7919 outlook.com --- Created an attachment (id=1250) test suite, all should compile successfully For some reason the following code in an asm block compiles mov RAX,0x1ffffffffUL; and RAX,0xffffffffUL; or RAX,0xffffffffUL; xor RAX,0xffffffffUL; add RAX,0xffffffffUL; adc RAX,0xffffffffUL; sub RAX,0xffffffffUL; sbb RAX,0xffffffffUL; cmp RAX,0xffffffffUL; imul RAX,0xffffffffUL; test RAX,0xffffffffUL; even though its disassembly (below) does not have REX prefixes. mov RAX,01FFFFFFFFh and EAX,0FFFFFFFFh or EAX,0FFFFFFFFh xor EAX,0FFFFFFFFh add EAX,0FFFFFFFFh adc EAX,0FFFFFFFFh sub EAX,0FFFFFFFFh sbb EAX,0FFFFFFFFh cmp EAX,0FFFFFFFFh imul EAX,RAX,0FFFFFFFFFFFFFFFFh test EAX,0FFFFFFFFh However, the following code fails to compile. The problem occurs for all generic registers (RAX .. RDX R8 .. R15). mul RAX,0xffffffffUL; div RAX,0xffffffffUL; idiv RAX,0xffffffffUL; and RAX,0x1ffffffffUL; or RAX,0x1ffffffffUL; xor RAX,0x1ffffffffUL; add RAX,0x1ffffffffUL; adc RAX,0x1ffffffffUL; sub RAX,0x1ffffffffUL; sbb RAX,0x1ffffffffUL; cmp RAX,0x1ffffffffUL; mul RAX,0x1ffffffffUL; imul RAX,0x1ffffffffUL; div RAX,0x1ffffffffUL; idiv RAX,0x1ffffffffUL; test RAX,0x1ffffffffUL; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11071 --- Created an attachment (id=1251) instructions that compile successfully (up to line 166) Generated using obj2asm. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11071 --- Just looking for patterns in the disassembly. It is interesting that all instructions (other than move) encode RAX as EAX. Also, the 64-bit immediate values are trimmed accordingly to 32-bit values ("0FFFFFFFFh") for RAX. For the registers RBX through R15, the instructions "and", "or", "xor", and "test" all convert every immediate to 32-bits. The other non-move instructions, however, convert the original value of "0x1ffffffffUL" to "0FFFFFFFFFFFFFFFFh". This sign-extension is not what I was intending, as the value was designated unsigned long, and I expected them to be zero-extended to "000000001FFFFFFFFh". -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 19 2013