1// Copyright 2016 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "asm.h"
6
7.macro check_simd reg1 reg2
8    fmov x0, \reg1
9    cbnz x0, .Lfail
10    fmov x0, \reg2
11    cbnz x0, .Lfail
12.endm
13
14# int thread_entry(void *arg)
15FUNCTION(thread_entry)
16    bmi .Lfail
17    beq .Lfail
18    bcs .Lfail
19    bvs .Lfail
20
21    cbnz x1, .Lfail
22    cbnz x2, .Lfail
23    cbnz x3, .Lfail
24    cbnz x4, .Lfail
25    cbnz x5, .Lfail
26    cbnz x6, .Lfail
27    cbnz x7, .Lfail
28    cbnz x8, .Lfail
29    cbnz x9, .Lfail
30    cbnz x10, .Lfail
31    cbnz x11, .Lfail
32    cbnz x12, .Lfail
33    cbnz x13, .Lfail
34    cbnz x14, .Lfail
35    cbnz x15, .Lfail
36    cbnz x16, .Lfail
37    cbnz x17, .Lfail
38    cbnz x18, .Lfail
39    cbnz x19, .Lfail
40    cbnz x20, .Lfail
41    cbnz x21, .Lfail
42    cbnz x22, .Lfail
43    cbnz x23, .Lfail
44    cbnz x24, .Lfail
45    cbnz x25, .Lfail
46    cbnz x26, .Lfail
47    cbnz x27, .Lfail
48    cbnz x28, .Lfail
49    cbnz x29, .Lfail
50    cbnz x30, .Lfail
51
52    # test thread arg
53    ldr x1, =0x12345678
54    lsl x1, x1, 32
55    ldr x2, =0x90abcdef
56    orr x1, x2, x1
57    sub x0, x0, x1
58    cbnz x0, .Lfail
59
60    check_simd d0, v0.D[1]
61    check_simd d1, v1.D[1]
62    check_simd d2, v2.D[1]
63    check_simd d3, v3.D[1]
64    check_simd d4, v4.D[1]
65    check_simd d5, v5.D[1]
66    check_simd d6, v6.D[1]
67    check_simd d7, v7.D[1]
68    check_simd d8, v8.D[1]
69    check_simd d9, v9.D[1]
70    check_simd d10, v10.D[1]
71    check_simd d11, v11.D[1]
72    check_simd d12, v12.D[1]
73    check_simd d13, v13.D[1]
74    check_simd d14, v14.D[1]
75    check_simd d15, v15.D[1]
76    check_simd d16, v16.D[1]
77    check_simd d17, v17.D[1]
78    check_simd d18, v18.D[1]
79    check_simd d19, v19.D[1]
80    check_simd d20, v20.D[1]
81    check_simd d21, v21.D[1]
82    check_simd d22, v22.D[1]
83    check_simd d23, v23.D[1]
84    check_simd d24, v24.D[1]
85    check_simd d25, v25.D[1]
86    check_simd d26, v26.D[1]
87    check_simd d27, v27.D[1]
88    check_simd d28, v28.D[1]
89    check_simd d29, v29.D[1]
90    check_simd d30, v30.D[1]
91    check_simd d31, v31.D[1]
92    b zx_thread_exit
93.Lfail:
94    b print_fail
95