1# sh testcase for ftrc
2# mach: sh
3# as(sh):	-defsym sim_cpu=0
4
5	.include "testutils.inc"
6
7	start
8ftrc_single:
9	set_grs_a5a5
10	set_fprs_a5a5
11	# ftrc(0.0) = 0.
12	fldi0	fr0
13	ftrc	fr0, fpul
14	# check results.
15	mov	#0, r0
16	sts	fpul, r1
17	cmp/eq	r0, r1
18	bt	.L0
19	fail
20.L0:
21	# ftrc(1.5) = 1.
22	fldi1	fr0
23	fldi1	fr1
24	fldi1	fr2
25	# double it.
26	fadd	fr2, fr2
27	# form the fraction.
28	fdiv	fr2, fr1
29	fadd	fr1, fr0
30	# now we've got 1.5 in fr0.
31	ftrc	fr0, fpul
32	# check results.
33	mov	#1, r0
34	sts	fpul, r1
35	cmp/eq	r0, r1
36	bt	.L1
37	fail
38.L1:
39	# ftrc(-1.5) = -1.
40	fldi1	fr0
41	fneg	fr0
42	fldi1	fr1
43	fldi1	fr2
44	# double it.
45	fadd	fr2, fr2
46	# form the fraction.
47	fdiv	fr2, fr1
48	fneg	fr1
49	# -1 + -0.5 = -1.5.
50	fadd	fr1, fr0
51	# now we've got 1.5 in fr0.
52	ftrc	fr0, fpul
53	# check results.
54	mov	#1, r0
55	neg	r0, r0
56	sts	fpul, r1
57	cmp/eq	r0, r1
58	bt	ftrc_double
59	fail
60
61ftrc_double:
62	double_prec
63	# ftrc(0.0) = 0.
64	fldi0	fr0
65	_s2d	fr0, dr0
66	ftrc	dr0, fpul
67	# check results.
68	mov	#0, r0
69	sts	fpul, r1
70	cmp/eq	r0, r1
71	bt	.L10
72	fail
73.L10:
74	# ftrc(1.5) = 1.
75	fldi1	fr0
76	fldi1	fr2
77	fldi1	fr4
78	# double it.
79	single_prec
80	fadd	fr4, fr4
81	# form 0.5.
82	fdiv	fr4, fr2
83	fadd	fr2, fr0
84	double_prec
85	# now we've got 1.5 in fr0, so do some single->double
86	# conversions and perform the ftrc.
87	_s2d	fr0, dr0
88	_s2d	fr2, dr2
89	_s2d	fr4, dr4
90	ftrc	dr0, fpul
91
92	# check results.
93	mov	#1, r0
94	sts	fpul, r1
95	cmp/eq	r0, r1
96	bt	.L11
97	fail
98.L11:
99	# ftrc(-1.5) = -1.
100	fldi1	fr0
101	fneg	fr0
102	fldi1	fr2
103	fldi1	fr4
104	single_prec
105	# double it.
106	fadd	fr4, fr4
107	# form the fraction.
108	fdiv	fr4, fr2
109	fneg	fr2
110	# -1 + -0.5 = -1.5.
111	fadd	fr2, fr0
112	double_prec
113	# now we've got 1.5 in fr0, so do some single->double
114	# conversions and perform the ftrc.
115	_s2d	fr0, dr0
116	_s2d	fr2, dr2
117	_s2d	fr4, dr4
118	ftrc	dr0, fpul
119
120	# check results.
121	mov	#1, r0
122	neg	r0, r0
123	sts	fpul, r1
124	cmp/eq	r0, r1
125	bt	.L12
126	fail
127.L12:
128	assertreg0	-1
129	assertreg	-1, r1
130	test_gr_a5a5	r2
131	test_gr_a5a5	r3
132	test_gr_a5a5	r4
133	test_gr_a5a5	r5
134	test_gr_a5a5	r6
135	test_gr_a5a5	r7
136	test_gr_a5a5	r8
137	test_gr_a5a5	r9
138	test_gr_a5a5	r10
139	test_gr_a5a5	r11
140	test_gr_a5a5	r12
141	test_gr_a5a5	r13
142	test_gr_a5a5	r14
143
144	assert_dpreg_i	2, dr4
145	test_fpr_a5a5	fr6
146	test_fpr_a5a5	fr7
147	test_fpr_a5a5	fr8
148	test_fpr_a5a5	fr9
149	test_fpr_a5a5	fr10
150	test_fpr_a5a5	fr11
151	test_fpr_a5a5	fr12
152	test_fpr_a5a5	fr13
153	test_fpr_a5a5	fr14
154	test_fpr_a5a5	fr15
155	pass
156	exit 0
157