<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJylU02P0zAQ_TXOZbRVajdpe8hhtxWckIALZzueJF45duWPUvj1TJIWlu1KgLD89fxGozfjGeX1t2ZI6RSZeGT8Hc3ea-VtWvnQE_pOS7pL-7Grq4qVR1Y-LvunbBKChGjGk0XosmuT8W5ys1jV5TLbBRuXIGbFq5rx3QQc43tg26eFBhoBUw4OHDzAZCauFNseX7lc4BeTBiD0MKYhj4pucApe5xYjpMFE8DmdcgLv4GCl6--lyTguL1dhNwO4jtGf4yxszfgBGBf8loOfFmf3woL231ip9cKWM1u-ZaMuy2nD20EOGFBGeH84vIwOSVtAiOiiURb_PTR6vpNGAa7_yuouDX8MwrQDKE__FeWZApAOjIsp5LlmCGqqpIC9iQnDqtCN0Huxl4XMafCh6dCay7N3GIsc7Ot6pTLIatX6kYC159vxQOl6xjYRNDFmjHSpxL6ui6HZyK7aKL3r9p3o1G7baWxl16luV3NR67KwUqGNDaueGOcOv8Lsgu6sOhb_r8A0vOTTXJflphZipTdyq7ZC1JVqS4nINiWO0tjV5GdqxSI0s0uV-0ikpUzFX6SM0fQOcRZMCpNJlgDfPX7-MLXZ3CDrevrPFCQl3fVTi4Hz6VpV04s_JTNK-_JrYjErb2bZPwCRfTRG>53966</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
(ARM) thumb16 subtracting 256 not producing optimal instructions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
felixjones
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/anxcPf655
Quite a simple function:
```c
int sub256(int n) {
return n - 256;
}
```
With `-mthumb` produces this output on Clang:
```asm
sub256:
movs r1, #255
mvns r1, r1
adds r0, r0, r1
bx lr
```
Whereas GCC produces the more sensible:
```asm
sub256:
subs r0, r0, #1
subs r0, r0, #255
bx lr
```
Which both saves an instruction and a register.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVU02P2yAQ_TX4ghJhHOP44EM20e6pUttLz2BPbFYYIj7StL--Yztp081K2yIMPN54eDMMynU_miHGUyDFjvBn7L3rlDNx7XyP6Cd-0l7az0dRloQdCNst45ekI1BJgx5PBugx2TZqZyc3i5VgS28XrG2kISleCsK3E7CE15RUTwtNsXmIyVtq6YpOZsWVItXhjcsFftNxoIhWYxzSqHBFT951qYVA46ADdSmeUqTO0r2Rtn-UJsO47FyF3QzotY3uHGZhOeF7SnjBbzn4bXG2dxY4_sXKrltYNrPsPRt1WWbj3w9yAA8y0Jf9_j46QG0eaAAbtDLw_6Hh9oM0DDD_J6uHNHwYhG4HqhzeV5BnDEBaqm2IPs01g7DDSvLQ6xDBr7OuKbq6qGUWdTTQYMHsvn6aymW-6FxMuqKX-LPtp1Kh1sVrdqYdd4p6lOb-iJAlb94WOtZPUuvWjQiMOd-mFXp6hTYi1CEkCLgoi1qIbGggFzUTWziKtqo5wLblou5kXW2ZEHXOMyMVmNCQ8olwbuE7nV3gmpSHTDec8annjG1EUay7jaxUVRSiVC2TAGTDYJTarCcd0wvMfDNLUqkPSBpMUPhDyhB0bwHm49C_THFwvjmC0ZdXZyFk8-nNrP4XIVQdKQ">