1218822Sdim# sh testcase for fdiv
285815Sobrien# mach: sh
385815Sobrien# as(sh):	-defsym sim_cpu=0
485815Sobrien
585815Sobrien	.include "testutils.inc"
685815Sobrien
785815Sobrien	start
885815Sobrienfdiv_single:
985815Sobrien	# Single test
1085815Sobrien	set_grs_a5a5
1185815Sobrien	set_fprs_a5a5
1285815Sobrien	single_prec
1385815Sobrien	# 1.0 / 0.0 should be INF
1485815Sobrien	# (and not crash the sim).
1585815Sobrien	fldi0	fr0
1685815Sobrien	fldi1	fr1
1785815Sobrien	fdiv	fr0, fr1
1885815Sobrien	assert_fpreg_x	0x7f800000, fr1
1985815Sobrien
2085815Sobrien	# 0.0 / 1.0 == 0.0.
2185815Sobrien	fldi0	fr0
2285815Sobrien	fldi1	fr1
2385815Sobrien	fdiv	fr1, fr0
2485815Sobrien	assert_fpreg_x	0, fr0
2585815Sobrien
2685815Sobrien	# 2.0 / 1.0 == 2.0.
2785815Sobrien	fldi1	fr1
2885815Sobrien	fldi1	fr2
2985815Sobrien	fadd	fr2, fr2
3085815Sobrien	fdiv	fr1, fr2
3185815Sobrien	assert_fpreg_i	2, fr2
3285815Sobrien
3385815Sobrien	# (1.0 / 2.0) + (1.0 / 2.0) == 1.0.
3485815Sobrien	fldi1	fr1
3585815Sobrien	fldi1	fr2
3685815Sobrien	fadd	fr2, fr2
37218822Sdim	fdiv	fr2, fr1
3885815Sobrien	# fr1 should contain 0.5.
3985815Sobrien	fadd	fr1, fr1
4085815Sobrien	assert_fpreg_i	1, fr1
4185815Sobrien	test_grs_a5a5
4285815Sobrien	assert_fpreg_i	2, fr2
4385815Sobrien	test_fpr_a5a5	fr3
4485815Sobrien	test_fpr_a5a5	fr4
4585815Sobrien	test_fpr_a5a5	fr5
4685815Sobrien	test_fpr_a5a5	fr6
4785815Sobrien	test_fpr_a5a5	fr7
4885815Sobrien	test_fpr_a5a5	fr8
49218822Sdim	test_fpr_a5a5	fr9
50218822Sdim	test_fpr_a5a5	fr10
5185815Sobrien	test_fpr_a5a5	fr11
5285815Sobrien	test_fpr_a5a5	fr12
5385815Sobrien	test_fpr_a5a5	fr13
5485815Sobrien	test_fpr_a5a5	fr14
5585815Sobrien	test_fpr_a5a5	fr15
5685815Sobrien
5785815Sobrienfdiv_double:
5885815Sobrien	# Double test
5985815Sobrien	set_grs_a5a5
6085815Sobrien	set_fprs_a5a5
6185815Sobrien	# (1.0 / 2.0) + (1.0 / 2.0) == 1.0.
6285815Sobrien	fldi1	fr1
6385815Sobrien	fldi1	fr2
6485815Sobrien	# This add must be in single precision.  The rest must be in double.
6585815Sobrien	fadd	fr2, fr2
6685815Sobrien	double_prec
6785815Sobrien	_s2d	fr1, dr0
6885815Sobrien	_s2d	fr2, dr2
6985815Sobrien	fdiv	dr2, dr0
7085815Sobrien	# dr0 should contain 0.5.
7185815Sobrien	# double it, expect 1.0.
7285815Sobrien	fadd	dr0, dr0
7385815Sobrien	assert_dpreg_i	1, dr0
7485815Sobrien	assert_dpreg_i	2, dr2
7585815Sobrien	test_grs_a5a5
7685815Sobrien	test_fpr_a5a5	fr4
7785815Sobrien	test_fpr_a5a5	fr5
7885815Sobrien	test_fpr_a5a5	fr6
7985815Sobrien	test_fpr_a5a5	fr7
8085815Sobrien	test_fpr_a5a5	fr8
8185815Sobrien	test_fpr_a5a5	fr9
8285815Sobrien	test_fpr_a5a5	fr10
8385815Sobrien	test_fpr_a5a5	fr11
8485815Sobrien	test_fpr_a5a5	fr12
8585815Sobrien	test_fpr_a5a5	fr13
8685815Sobrien	test_fpr_a5a5	fr14
8785815Sobrien	test_fpr_a5a5	fr15
8885815Sobrien
8985815Sobrien	pass
9085815Sobrien	exit 0
9185815Sobrien
9285815Sobrien