- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I discovered that x86-64 ICX 2024.0.0 emits invalid registers when it generates x86 binaries.
This error has been identified in 16 opcodes.
Buggy code
void bug(int num) { __asm__( ".intel_syntax noprefix\n" "cmpbxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmplexadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmplxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnbexadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnbxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpbexadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnlxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnoxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnpxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnsxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpnzxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpoxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmppxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpbexadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpsxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" "cmpzxadd DWORD PTR [1], EDI, EBP\n" ".align 32\n" ); } |
Compile Option: -m32
Compiled Code
bug: push ebp mov ebp,esp mov eax,DWORD PTR [ebp+0x8] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] xchg ax,ax (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] (bad) cmp eax,0x1 data16 data16 data16 data16 data16 nop WORD PTR cs:[eax+eax*1+0x0] nop DWORD PTR [eax+eax*1+0x0] pop ebp ret |
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your question has been escalated to our internal engineering team.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page