<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59061>59061</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            i386 ; generates code for target that doesn't support it (cmovne)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          0xDRRB
      </td>
    </tr>
</table>

<pre>
    CPU target: i586, clang `-O2` generates code that is not supported and program crash with illegal instruction.
Illegal instruction is: cmovne

Tested on amd64 with `-mcpu` and on physical box, both running FreeBSD 13.1.

CPU: Pentium/P55C (233.87-MHz 586-class CPU)
Origin="GenuineIntel" Id=0x543 Family=0x5 Model=0x4 Stepping=3
Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>

This bug was detected with this project: [https://gitlab.com/0xDRRB/st25](https://gitlab.com/0xDRRB/st25).

```
$ clang -mcpu=pentium-mmx -Wall main.c -o st25taread  `pkg-config --cflags --libs libnfc`
$ objdump --disassemble st25taread | grep cmovne
[nothing]

$ clang -mcpu=pentium-mmx -Wall -O2 main.c -o st25taread  `pkg-config --cflags --libs libnfc`
$ objdump --disassemble st25taread | grep cmovne
  20403f:       48 0f 45 f2             cmovne %rdx,%rsi
  2040b9:       48 0f 45 f1             cmovne %rcx,%rsi
  20503e:       0f 45 c1                cmovne %ecx,%eax
```
On i586 box:
```
$ clang -Wall -O2 main.c -o st25taread `pkg-config --cflags --libs libnfc`
$ sudo ./st25taread -i
Password:
NFC reader: pn532_uart:/dev/ttyU0 opened
ISO/IEC 14443A (106 kbps) tag found. UID: 02C4004E3771A4
ST System file
  Len:                      18
  UID:                      02C4004E3771A4
  Memory Size (-1):         8191
  Product:                  ST25TA64K (0xC4)
  Number of NDEF file:      1
Illegal instruction (core dumped)

$ clang -c -Wall -O2 main.c -o main.o `pkg-config --cflags libnfc`
$ objdump --disassemble main.o | grep cmovne
     6c5:       0f 45 c2                cmovne %edx,%eax
     744:       0f 45 ca                cmovne %edx,%ecx
    1662:       0f 45 c1                cmovne %ecx,%eax

$ clang -S -Wall -O2 main.c `pkg-config --cflags libnfc`
$ grep cmovne main.s
        cmovnel %edx, %eax
        cmovnel %edx, %ecx
        cmovnel %ecx, %eax
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzFVltz6jYQ_jXmZQdGli_YDzwkJrSZloQJSXveOrYsG51jWx5JPoHz67uygUAgp-n0oRpmka31p91vL1Im890sWb2ASVXJjePdgAii0KEJsCptSnBCMn6kKKHkDVep4RqYzDmYTWpAaGikAd21rVSG55A2ObRKliqtgalUb-BVmA2IquJlWoFotFEdM0I2E4fMHXJzf7mCqNYOVsvvDR-0BvnMtd0DNdI6D_0B2hpYs7azJtrdcbXd7LRgCJrJrfUkk6inuqYR6NBCcX67noPrTdzJKTqyYLdd8caIrnboYhUECTg0op43iabj5a8_AKkZIy9ag9Wm8fDloxKlaBxv7lD6C2860fD7xvAKH-E-x_dkG_geLNJaVLvhEZbIYdXPfVgb3rZoGz56A-KCp6ZTXPcKESFuVjhesrB7Jn8s71DOrVitrXxeJyiX6ycrE_sm-RLZ-fKL492dEbjBgGVdCa-phpwbziyfPY3GLmHkvuI7S4MT3G6MaW0kkAr8lcJUaTZh0lJDtvOnp1ucaEMDJ0DHo09r0_iMdozb_jc8Un-feUNUvXk7BGRc11sY_5lWFdSpaCYMxhIsIGYuT3OwidB-K8dMNoXAr8esqNJS46QSmQYUTcHOtpHZ17yrW9TIhcaY8jqr-CmkM02gVLw9T8XgFlN-Y8OFfp868gnLsZT-X-sBKPGJV9gQD8OPgBTgB1BQOB3DV5j_gcptFdmJFqcoWXwNxf0IhV1DCYjH31AGCHYOcYbCDyg83V7Nn8emb2B96Xv_mGI_D8q_jonucgmTfaLvQcZ7b1cYo1ep8qNVD4sErAZXloC2CTz6V5cqM9RQzr-jNGb3QkBiIvF83y_Xj_j-_i4B1_d9W6g0ckkI3zKsPhpjHy-hkF2TT-Dlfm6RCU18Qvw7bzp1b_wBZf0M6x020xoKUR1T43fevMXi3XCjg9Ye9uq4thfAktdS7WAtftgYRmPXds4TiMiN3YPuSsm8G1rQxVg_0-D5JvR_syhkm_jHDgzw0NUZVyALeJjfLQa3Dhjux0cNAjGpONhSQooPeBeJwq7mSj-TH-XJp4v2AHO9YHGELLgoEvqenZMiyd8XSa8w9f0LlPQzKOwExQ1D-h8L9j2360tuP8_oCWHDx_rE46Ml1ZtDcMHLh1rsJ1rsAuvYZUZ8hixF0zDyCBnlMy-PvTgdGTwS-Ux42Jwc7_b9daqQan8HG25WueS6cej0eLkCYfpsHXKDxqNOVbOLQ3fTHQ7dqvp--BsfznW6EFp3eK2giyAmoTvazPKIpZTy0I39jMWeH0zD3C0KEvssnxLKRniM80rP8NjD60zDX6GHwDkefyMxo4RS13WxB_kBIROECFw3KDIahHGWUscnHMNSTawdE6nKkZr1JuEtRONiJbTRb4tYEqJsOO-3Q_y0MxupZsMFYtTvPOst_xs5Vwpd">