summaryrefslogtreecommitdiff
path: root/sim/testsuite/sim/sh/fipr.s
blob: 6a949aa6ec7f88fef654236057f85511331af1ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# sh testcase for fipr $fvm, $fvn
# mach: sh
# as(sh):	-defsym sim_cpu=0

	.include "testutils.inc"

	start
initv0:
	set_grs_a5a5
	set_fprs_a5a5
	# Load 1 into fr0.
	fldi1	fr0
	# Load 2 into fr1.
	fldi1	fr1
	fadd	fr1, fr1
	# Load 4 into fr2.
	fldi1	fr2
	fadd	fr2, fr2
	fadd	fr2, fr2
	# Load 8 into fr3.
	fmov	fr2, fr3
	fadd	fr2, fr3

initv8:
	fldi1	fr8
	fldi0	fr9
	fldi1	fr10
	fldi0	fr11

	fipr	fv0, fv8
test1:	
	# Result will be in fr11.
	assert_fpreg_i	1, fr0
	assert_fpreg_i	2, fr1
	assert_fpreg_i	4, fr2
	assert_fpreg_i	8, fr3
	assert_fpreg_x	0xa5a5a5a5, fr4
	assert_fpreg_x	0xa5a5a5a5, fr5
	assert_fpreg_x	0xa5a5a5a5, fr6
	assert_fpreg_x	0xa5a5a5a5, fr7
	assert_fpreg_i	1, fr8
	assert_fpreg_i	0, fr9
	assert_fpreg_i	1, fr10
	assert_fpreg_i	5, fr11
	assert_fpreg_x	0xa5a5a5a5, fr12
	assert_fpreg_x	0xa5a5a5a5, fr13
	assert_fpreg_x	0xa5a5a5a5, fr14
	assert_fpreg_x	0xa5a5a5a5, fr15

	test_grs_a5a5
test_infp:
	# Test positive infinity
	fldi0	fr11
	mov.l	infp, r0
	lds	r0, fpul
	fsts	fpul, fr0
	fipr	fv0, fv8
	# fr11 should be plus infinity
	assert_fpreg_x	0x7f800000, fr11
test_infm:
	# Test negitive infinity
	fldi0	fr11
	mov.l	infm, r0
	lds	r0, fpul
	fsts	fpul, fr0
	fipr	fv0, fv8
	# fr11 should be plus infinity
	assert_fpreg_x	0xff800000, fr11
test_qnanp:
	# Test positive qnan
	fldi0	fr11
	mov.l	qnanp, r0
	lds	r0, fpul
	fsts	fpul, fr0
	fipr	fv0, fv8
	# fr11 should be plus qnan (or greater)
	flds	fr11, fpul
	sts	fpul, r1
	cmp/ge	r0, r1
	bt	.L0
	fail
.L0:
test_snanp:
	# Test positive snan
	fldi0	fr11
	mov.l	snanp, r0
	lds	r0, fpul
	fsts	fpul, fr0
	fipr	fv0, fv8
	# fr11 should be plus snan (or greater)
	flds	fr11, fpul
	sts	fpul, r1
	cmp/ge	r0, r1
	bt	.L1
	fail
.L1:
.if 0
	# Handling of nan and inf not implemented yet.
test_qnanm:
	# Test negantive qnan
	fldi0	fr11
	mov.l	qnanm, r0
	lds	r0, fpul
	fsts	fpul, fr0
	fipr	fv0, fv8
	# fr11 should be minus qnan (or less)
	flds	fr11, fpul
	sts	fpul, r1
	cmp/ge	r1, r0
	bt	.L2
	fail
.L2:
test_snanm:
	# Test negative snan
	fldi0	fr11
	mov.l	snanm, r0
	lds	r0, fpul
	fsts	fpul, fr0
	fipr	fv0, fv8
	# fr11 should be minus snan (or less)
	flds	fr11, fpul
	sts	fpul, r1
	cmp/ge	r1, r0
	bt	.L3
	fail
.L3:	
.endif
	pass
	exit 0

	.align 2
qnanp:	.long	0x7f800001
qnanm:	.long	0xff800001
snanp:	.long	0x7fc00000
snanm:	.long	0xffc00000
infp:	.long	0x7f800000
infm:	.long	0xff800000