xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/sh/fipr.s (revision 4b169a6ba595ae283ca507b26b15fdff40495b1c)
1# sh testcase for fipr $fvm, $fvn
2# mach: sh
3# as(sh):	-defsym sim_cpu=0
4
5	.include "testutils.inc"
6
7	start
8initv0:
9	set_grs_a5a5
10	set_fprs_a5a5
11	# Load 1 into fr0.
12	fldi1	fr0
13	# Load 2 into fr1.
14	fldi1	fr1
15	fadd	fr1, fr1
16	# Load 4 into fr2.
17	fldi1	fr2
18	fadd	fr2, fr2
19	fadd	fr2, fr2
20	# Load 8 into fr3.
21	fmov	fr2, fr3
22	fadd	fr2, fr3
23
24initv8:
25	fldi1	fr8
26	fldi0	fr9
27	fldi1	fr10
28	fldi0	fr11
29
30	fipr	fv0, fv8
31test1:
32	# Result will be in fr11.
33	assert_fpreg_i	1, fr0
34	assert_fpreg_i	2, fr1
35	assert_fpreg_i	4, fr2
36	assert_fpreg_i	8, fr3
37	assert_fpreg_x	0xa5a5a5a5, fr4
38	assert_fpreg_x	0xa5a5a5a5, fr5
39	assert_fpreg_x	0xa5a5a5a5, fr6
40	assert_fpreg_x	0xa5a5a5a5, fr7
41	assert_fpreg_i	1, fr8
42	assert_fpreg_i	0, fr9
43	assert_fpreg_i	1, fr10
44	assert_fpreg_i	5, fr11
45	assert_fpreg_x	0xa5a5a5a5, fr12
46	assert_fpreg_x	0xa5a5a5a5, fr13
47	assert_fpreg_x	0xa5a5a5a5, fr14
48	assert_fpreg_x	0xa5a5a5a5, fr15
49
50	test_grs_a5a5
51test_infp:
52	# Test positive infinity
53	fldi0	fr11
54	mov.l	infp, r0
55	lds	r0, fpul
56	fsts	fpul, fr0
57	fipr	fv0, fv8
58	# fr11 should be plus infinity
59	assert_fpreg_x	0x7f800000, fr11
60test_infm:
61	# Test negitive infinity
62	fldi0	fr11
63	mov.l	infm, r0
64	lds	r0, fpul
65	fsts	fpul, fr0
66	fipr	fv0, fv8
67	# fr11 should be plus infinity
68	assert_fpreg_x	0xff800000, fr11
69test_qnanp:
70	# Test positive qnan
71	fldi0	fr11
72	mov.l	qnanp, r0
73	lds	r0, fpul
74	fsts	fpul, fr0
75	fipr	fv0, fv8
76	# fr11 should be plus qnan (or greater)
77	flds	fr11, fpul
78	sts	fpul, r1
79	cmp/ge	r0, r1
80	bt	.L0
81	fail
82.L0:
83test_snanp:
84	# Test positive snan
85	fldi0	fr11
86	mov.l	snanp, r0
87	lds	r0, fpul
88	fsts	fpul, fr0
89	fipr	fv0, fv8
90	# fr11 should be plus snan (or greater)
91	flds	fr11, fpul
92	sts	fpul, r1
93	cmp/ge	r0, r1
94	bt	.L1
95	fail
96.L1:
97.if 0
98	# Handling of nan and inf not implemented yet.
99test_qnanm:
100	# Test negantive qnan
101	fldi0	fr11
102	mov.l	qnanm, r0
103	lds	r0, fpul
104	fsts	fpul, fr0
105	fipr	fv0, fv8
106	# fr11 should be minus qnan (or less)
107	flds	fr11, fpul
108	sts	fpul, r1
109	cmp/ge	r1, r0
110	bt	.L2
111	fail
112.L2:
113test_snanm:
114	# Test negative snan
115	fldi0	fr11
116	mov.l	snanm, r0
117	lds	r0, fpul
118	fsts	fpul, fr0
119	fipr	fv0, fv8
120	# fr11 should be minus snan (or less)
121	flds	fr11, fpul
122	sts	fpul, r1
123	cmp/ge	r1, r0
124	bt	.L3
125	fail
126.L3:
127.endif
128	pass
129	exit 0
130
131	.align 2
132qnanp:	.long	0x7f800001
133qnanm:	.long	0xff800001
134snanp:	.long	0x7fc00000
135snanm:	.long	0xffc00000
136infp:	.long	0x7f800000
137infm:	.long	0xff800000
138