Bug 6097 – SSSE3 instructions in inline assembler cause error using DMD from git master

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-06-03T05:06:00Z
Last change time
2011-07-15T19:14:01Z
Assigned to
nobody
Creator
kai

Attachments

IDFilenameSummaryContent-TypeSize
991asm.diffPatch with instruction size information for 3 byte opcodesapplication/octet-stream10032
993asm2.diff[email protected] patch + fixestext/plain10587

Comments

Comment #0 by kai — 2011-06-03T05:06:07Z
Created attachment 991 Patch with instruction size information for 3 byte opcodes In the inline assembler, SSSE3 instructions produce an error if used with MMX registers. E.g. the program void main() { asm { pshufb MM0, MM1; } } causes the following error message: actual: 3, calc: 5 code 003E0A08: nxt=00000000 op=f38 flg=40 rm=c1=3,0,1 Internal error: backend\cod3.c 4448 Everything seems to work if you use only XMM registers. The root cause seems to be that there is no instruction size stored for 3 byte opcodes (opcodes starting with 0F 38 and 0F 3A). The attached patch tries to correct the problem. With the patch applied, some more instructions could be added to the inline assembler (popcnt, crc32, movbe).
Comment #1 by govellius — 2011-06-05T04:37:13Z
Hello, your patch breaks the mandatory prefix check for 2 byte ops such as PXOR 66 0F EF /r ( SSE2 ) I've edited your patch and included SSE4.1 and 4.2 sizes as well as proper REX prefix for 4 byte ops (PEXTRQ/PINSRQ) I also cleaned up the table so that exceptions to the default size would stand out more by glancing at the code. ( hope you like it :P ) I have a branch with sse4_1 added in my fork on github, but I've not tested it enough to be confident to issue a pull request. https://github.com/Govelius/dmd/commits/sse4_1
Comment #2 by govellius — 2011-06-05T04:42:33Z
Created attachment 993 [email protected] patch + fixes Includes [email protected] patch + additional fixes
Comment #3 by bugzilla — 2011-07-15T19:14:01Z