1# mach: aarch64
2
3# Check the FP compare instructions: fcmps, fcmpzs, fcmpes, fcmpzes, fcmpd,
4# fcmpzd, fcmped, fcmpzed.
5# For 1 operand compares, check 0, 1, -1, +Inf, -Inf.
6# For 2 operand compares, check 1/1, 1/-2, -1/2, +Inf/+Inf, +Inf/-Inf.
7# FIXME: Check for qNaN and sNaN when exception raising support added.
8
9.include "testutils.inc"
10
11	start
12	fmov s0, wzr
13	fcmp s0, #0.0
14	bne .Lfailure
15	fcmpe s0, #0.0
16	bne .Lfailure
17	fmov d0, xzr
18	fcmp d0, #0.0
19	bne .Lfailure
20	fcmpe d0, #0.0
21	bne .Lfailure
22
23	fmov s0, #1.0
24	fcmp s0, #0.0
25	blo .Lfailure
26	fcmpe s0, #0.0
27	blo .Lfailure
28	fmov d0, #1.0
29	fcmp d0, #0.0
30	blo .Lfailure
31	fcmpe d0, #0.0
32	blo .Lfailure
33
34	fmov s0, #-1.0
35	fcmp s0, #0.0
36	bpl .Lfailure
37	fcmpe s0, #0.0
38	bpl .Lfailure
39	fmov d0, #-1.0
40	fcmp d0, #0.0
41	bpl .Lfailure
42	fcmpe d0, #0.0
43	bpl .Lfailure
44
45	fmov s0, #1.0
46	fmov s1, wzr
47	fdiv s0, s0, s1
48	fcmp s0, #0.0
49	blo .Lfailure
50	fcmpe s0, #0.0
51	blo .Lfailure
52	fmov d0, #1.0
53	fmov d1, xzr
54	fdiv d0, d0, d1
55	fcmp d0, #0.0
56	blo .Lfailure
57	fcmpe d0, #0.0
58	blo .Lfailure
59
60	fmov s0, #-1.0
61	fmov s1, wzr
62	fdiv s0, s0, s1
63	fcmp s0, #0.0
64	bpl .Lfailure
65	fcmpe s0, #0.0
66	bpl .Lfailure
67	fmov d0, #-1.0
68	fmov d1, xzr
69	fdiv d0, d0, d1
70	fcmp d0, #0.0
71	bpl .Lfailure
72	fcmpe d0, #0.0
73	bpl .Lfailure
74
75	fmov s0, #1.0
76	fmov s1, #1.0
77	fcmp s0, s1
78	bne .Lfailure
79	fcmpe s0, s1
80	bne .Lfailure
81	fmov d0, #1.0
82	fmov d1, #1.0
83	fcmp d0, d1
84	bne .Lfailure
85	fcmpe d0, d1
86	bne .Lfailure
87
88	fmov s0, #1.0
89	fmov s1, #-2.0
90	fcmp s0, s1
91	blo .Lfailure
92	fcmpe s0, s1
93	blo .Lfailure
94	fmov d0, #1.0
95	fmov d1, #-2.0
96	fcmp d0, d1
97	blo .Lfailure
98	fcmpe d0, d1
99	blo .Lfailure
100
101	fmov s0, #-1.0
102	fmov s1, #2.0
103	fcmp s0, s1
104	bpl .Lfailure
105	fcmpe s0, s1
106	bpl .Lfailure
107	fmov d0, #-1.0
108	fmov d1, #2.0
109	fcmp d0, d1
110	bpl .Lfailure
111	fcmpe d0, d1
112	bpl .Lfailure
113
114	fmov s0, #1.0
115	fmov s1, wzr
116	fdiv s0, s0, s1
117	fcmp s0, s0
118	bne .Lfailure
119	fcmpe s0, s0
120	bne .Lfailure
121	fmov s1, #-1.0
122	fmov s2, wzr
123	fdiv s1, s1, s2
124	fcmp s0, s1
125	blo .Lfailure
126	fcmpe s0, s1
127	blo .Lfailure
128
129	fmov d0, #1.0
130	fmov d1, xzr
131	fdiv d0, d0, d1
132	fcmp d0, d0
133	bne .Lfailure
134	fcmpe d0, d0
135	bne .Lfailure
136	fmov d1, #-1.0
137	fmov d2, xzr
138	fdiv d1, d1, d2
139	fcmp d0, d1
140	blo .Lfailure
141	fcmpe d0, d1
142	blo .Lfailure
143
144	pass
145.Lfailure:
146	fail
147