aboutsummaryrefslogtreecommitdiff
path: root/sim/testsuite/v850/divh_3.cgs
blob: 77d14af0f91929485b4a2f117cb4d2f4dfec9c07 (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
# v850 divh_3
# mach: v850e
# as(v850e): -mv850e

	.include "testutils.inc"

# Regular divhision - check signs
# The S flag is based on the quotient, not the remainder

	seti	6, r1
	seti	45, r2
	divh	r1, r2, r3

	flags	0
	reg	r1, 6
	reg	r2, 7
	reg	r3, 3

	seti	-6, r1
	seti	45, r2
	divh	r1, r2, r3

	flags	s
	reg	r1, -6
	reg	r2, -7
	reg	r3, 3

	seti	6, r1
	seti	-45, r2
	divh	r1, r2, r3

	flags	s
	reg	r1, 6
	reg	r2, -7
	reg	r3, -3

	seti	-6, r1
	seti	-45, r2
	divh	r1, r2, r3

	flags	0
	reg	r1, -6
	reg	r2, 7
	reg	r3, -3

# Only the lower half of the dividend is used

	seti	0x0000fffa, r1
	seti	-45, r2
	divh	r1, r2, r3

	flags	0
	reg	r1, 0x0000fffa
	reg	r2, 7
	reg	r3, -3


# If the data is divhided by zero, OV=1 and the quotient is undefined.
# According to NEC, the S and Z flags, and the output registers, are
# unchanged.

	noflags
	seti	0, r1
	seti	45, r2
	seti	67, r3
	divh	r1, r2, r3

	flags	v
	reg	r2, 45
	reg	r3, 67

	allflags
	seti	0, r1
	seti	45, r2
	seti	67, r3
	divh	r1, r2, r3

	flags	sat + c + v + s + z
	reg	r2, 45
	reg	r3, 67

# Zero / (N!=0) => normal

	noflags
	seti	45, r1
	seti	0, r2
	seti	67, r3
	divh	r1, r2, r3

	flags	z
	reg	r1, 45
	reg	r2, 0
	reg	r3, 0

# Test for regular overflow

	noflags
	seti	-1, r1
	seti	0x80000000, r2
	seti	67, r3
	divh	r1, r2, r3

	flags	v + s
	reg	r1, -1
	reg	r2, 0x80000000
	reg	r3, 0

# The Z flag is based on the quotient, not the remainder

	noflags
	seti	45, r1
	seti	16, r2
	divh	r1, r2, r3

	flags	z
	reg	r2, 0
	reg	r3, 16

# If the quot and rem registers are the same, the remainder is stored.

	seti	6, r1
	seti	45, r2
	divh	r1, r2, r2

	flags	0
	reg	r1, 6
	reg	r2, 3


	pass