<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58882>58882</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[avr] Wrong code: 32-bit variable (unsigned long) treated as 16-bit value.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sprintersb
</td>
</tr>
</table>
<pre>
The following code is supplying a 32-bit value to inline asm by means of a local register variable in R20:
```c++
static __inline__ __attribute__((__always_inline__))
void sysc (unsigned long _v1_)
{
register unsigned long r20 __asm ("20") = _v1_;
__asm __volatile__ (";; %%0 = %0" :: "r" (r20));
}
void func (void)
{
sysc (0x12345678);
}
```
When I compile this with `-target avr -mmcu=atmega8 -Os -save-temps` then the following assembly is generated:
```func:
ldi r20, 120
ldi r21, 86
;APP
;; %0 = r20
;NO_APP
ret
```
which means that the high part `r22` and `r23` have been ignored and contain wrong values.
Similar happens if `r20` is of type `float` instead of `unsgned long`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxtVEuPmzAQ_jVwGRGBCQQOHLKNKvXSXbWVekTGTMCVecg2SfPvOzZ5bXcjK3geHs83842bqb1Uv3qE46TUdJZjB2JqEaQBs8yzujgNh5RFjbRw4mpBsBPIUckRgZsBmgsMyEcD05Ec1SS4Ao2dNBY1HdCSN4rijfCDxUG6D-JDEO-DPF6XCNiLW15rLLdSQF2v4euattxaLZvFkhSwghap1JlfzN0pYKVbPsJpki2YixFAnstoZDdiS0kRiPqU1He_YHe9Euh3z_b9Ac1idz9B9BczSp8xigBBelijpU9BVs-6Pk2KQCiX_HrMeaUvJGS0Yn_YbcgCrhzpnkSmvcgK7S7xcG6xg93hunkAPC6jB-iEzyDdChD_TVi6zfJd8XnEWxNW8XePI3yj9g8z5Q-2Jw6cpe2BPCLLdYcW-ElDNAxiIRjcDtjxAqJXA5HhJ4wsDrMhbzpLoew7VnFjcGjUxTGrwxE1t9h-5IOD9tDGpWol_fuyfIGExR8MiTMU-V1PMPdvb8_itfpr6fVTCDJ8f62fvTXaT0tz7qXorzS3PbceWy-7HmaurSuQpkYTcD62q5Q6qaeiQINUC6LVpIlYzi6m0XKah7N2LPMjZTbPPf4pB6m4puPzjHSjPK4xXT6ufDRo9jKjUx7VxK1Xj8Rg3jobiUTkO49JvEYPsUryfFemZZGnYVulLW15aKVVWAXZCzU3yA7w2-flXgFHzvvkXwf5_7lyA2E1um5SjyHJHw_FJly0qnpriRTUUvaVVkeEWpoNkYwEpU63TzTr6Q8KS6I0hipCm6woChb2lWhK3OYJL7d4xKLMuNiJQpQNwWAMt2WoeIPKOAg0RiOewYdws5cdQlmxmLEkiQsWp7st2yRZI7K0TYtWZIKnGGxjHLhUG5fHZtJdqCufUrN0hoyKHgfzMBKRHXpfMRefL7afdGVmLUd6REwT-tsrn_0_FbyWuQ">