Add ldn/stn single support, fix ldnr support.
[external/binutils.git] / sim / testsuite / sim / aarch64 / ldnr.s
1 # mach: aarch64
2
3 # Check the load single 1-element structure and replicate to all lanes insns:
4 # ld1r, ld2r, ld3r, ld4r.
5 # Check the addressing modes: no offset, post-index immediate offset,
6 # post-index register offset.
7
8 .include "testutils.inc"
9
10 input:
11         .word 0x04030201
12         .word 0x08070605
13         .word 0x0c0b0a09
14         .word 0x100f0e0d
15 input2:
16         .word 0x00000001
17         .word 0x00000002
18         .word 0x00000003
19         .word 0x00000004
20         .word 0x00000005
21         .word 0x00000006
22         .word 0x00000007
23         .word 0x00000008
24         .word 0x00000009
25         .word 0x0000000a
26         .word 0x0000000b
27         .word 0x0000000c
28
29         start
30         adrp x0, input
31         add x0, x0, :lo12:input
32         adrp x1, input2
33         add x1, x1, :lo12:input2
34
35         mov x2, x0
36         mov x3, #1
37         ld1r {v0.8b}, [x2], 1
38         ld1r {v1.16b}, [x2], x3
39         ld1r {v2.4h}, [x2], 2
40         ld1r {v3.8h}, [x2]
41         addv b0, v0.8b
42         addv b1, v1.16b
43         addv b2, v2.8b
44         addv b3, v3.16b
45         mov x2, v0.d[0]
46         mov x3, v1.d[0]
47         mov x4, v2.d[0]
48         mov x5, v3.d[0]
49         cmp x2, #8
50         bne .Lfailure
51         cmp x3, #32
52         bne .Lfailure
53         cmp x4, #28
54         bne .Lfailure
55         cmp x5, #88
56         bne .Lfailure
57
58         mov x2, x1
59         mov x3, #8
60         ld2r {v0.2s, v1.2s}, [x2], 8
61         ld2r {v2.4s, v3.4s}, [x2], x3
62         ld2r {v4.1d, v5.1d}, [x2], 16
63         ld2r {v6.2d, v7.2d}, [x2]
64         addp v0.2s, v0.2s, v1.2s
65         addv s2, v2.4s
66         addv s3, v3.4s
67         addp v4.2s, v4.2s, v5.2s
68         addv s6, v6.4s
69         addv s7, v7.4s
70         mov w2, v0.s[0]
71         mov w3, v0.s[1]
72         mov x4, v2.d[0]
73         mov x5, v3.d[0]
74         mov w6, v4.s[0]
75         mov w7, v4.s[1]
76         mov x8, v6.d[0]
77         mov x9, v7.d[0]
78         cmp w2, #2
79         bne .Lfailure
80         cmp w3, #4
81         bne .Lfailure
82         cmp x4, #12
83         bne .Lfailure
84         cmp x5, #16
85         bne .Lfailure
86         cmp w6, #11
87         bne .Lfailure
88         cmp w7, #15
89         bne .Lfailure
90         cmp x8, #38
91         bne .Lfailure
92         cmp x9, #46
93         bne .Lfailure
94
95         mov x2, x0
96         mov x3, #3
97         ld3r {v0.8b, v1.8b, v2.8b}, [x2], 3
98         ld3r {v3.8b, v4.8b, v5.8b}, [x2], x3
99         ld3r {v6.8b, v7.8b, v8.8b}, [x2]
100         addv b0, v0.8b
101         addv b1, v1.8b
102         addv b2, v2.8b
103         addv b3, v3.8b
104         addv b4, v4.8b
105         addv b5, v5.8b
106         addv b6, v6.8b
107         addv b7, v7.8b
108         addv b8, v8.8b
109         addv b9, v9.8b
110         mov x2, v0.d[0]
111         mov x3, v1.d[0]
112         mov x4, v2.d[0]
113         mov x5, v3.d[0]
114         mov x6, v4.d[0]
115         mov x7, v5.d[0]
116         mov x8, v6.d[0]
117         mov x9, v7.d[0]
118         mov x10, v8.d[0]
119         cmp x2, #8
120         bne .Lfailure
121         cmp x3, #16
122         bne .Lfailure
123         cmp x4, #24
124         bne .Lfailure
125         cmp x5, #32
126         bne .Lfailure
127         cmp x6, #40
128         bne .Lfailure
129         cmp x7, #48
130         bne .Lfailure
131         cmp x8, #56
132         bne .Lfailure
133         cmp x9, #64
134         bne .Lfailure
135         cmp x10, #72
136         bne .Lfailure
137
138         mov x2, x1
139         ld4r {v0.4s, v1.4s, v2.4s, v3.4s}, [x2], 16
140         ld4r {v4.4s, v5.4s, v6.4s, v7.4s}, [x2]
141         addv s0, v0.4s
142         addv s1, v1.4s
143         addv s2, v2.4s
144         addv s3, v3.4s
145         addv s4, v4.4s
146         addv s5, v5.4s
147         addv s6, v6.4s
148         addv s7, v7.4s
149         mov x2, v0.d[0]
150         mov x3, v1.d[0]
151         mov x4, v2.d[0]
152         mov x5, v3.d[0]
153         mov x6, v4.d[0]
154         mov x7, v5.d[0]
155         mov x8, v6.d[0]
156         mov x9, v7.d[0]
157         cmp x2, #4
158         bne .Lfailure
159         cmp x3, #8
160         bne .Lfailure
161         cmp x4, #12
162         bne .Lfailure
163         cmp x5, #16
164         bne .Lfailure
165         cmp x6, #20
166         bne .Lfailure
167         cmp x7, #24
168         bne .Lfailure
169         cmp x8, #28
170         bne .Lfailure
171         cmp x9, #32
172         bne .Lfailure
173
174         pass
175 .Lfailure:
176         fail