xref: /openbmc/qemu/tests/tcg/hexagon/test_clobber.S (revision 585a86b1041a45c3b4074440c7f1b54944570867)
1*585a86b1SNiccolò Izzo/*
2*585a86b1SNiccolò Izzo * Purpose: demonstrate the succesful operation of the register save mechanism,
3*585a86b1SNiccolò Izzo * in which the caller saves the registers that will be clobbered, and restores
4*585a86b1SNiccolò Izzo * them after the call.
5*585a86b1SNiccolò Izzo */
6*585a86b1SNiccolò Izzo
7*585a86b1SNiccolò Izzo    .text
8*585a86b1SNiccolò Izzo    .globl _start
9*585a86b1SNiccolò Izzo
10*585a86b1SNiccolò Izzo_start:
11*585a86b1SNiccolò Izzo    allocframe(#8)
12*585a86b1SNiccolò Izzo    {
13*585a86b1SNiccolò Izzo        r16 = #47
14*585a86b1SNiccolò Izzo        r17 = #155
15*585a86b1SNiccolò Izzo    }
16*585a86b1SNiccolò Izzo    memd(sp+#0) = r17:16
17*585a86b1SNiccolò Izzo    {
18*585a86b1SNiccolò Izzo        r16 = #255
19*585a86b1SNiccolò Izzo        r17 = #42
20*585a86b1SNiccolò Izzo    }
21*585a86b1SNiccolò Izzo    {
22*585a86b1SNiccolò Izzo        deallocframe
23*585a86b1SNiccolò Izzo        r17:16 = memd(sp+#0)
24*585a86b1SNiccolò Izzo    }
25*585a86b1SNiccolò Izzo    {
26*585a86b1SNiccolò Izzo        p0 = cmp.eq(r16, #47)
27*585a86b1SNiccolò Izzo        p0 = cmp.eq(r17, #155); if (p0.new) jump:t pass
28*585a86b1SNiccolò Izzo        jump fail
29*585a86b1SNiccolò Izzo    }
30