<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">