Home | History | Annotate | Line # | Download | only in mips
      1  1.1  christos # mips test sanity, expected to pass.
      2  1.1  christos # mach:	 mips64 sb1
      3  1.1  christos # as:		-mabi=eabi
      4  1.1  christos # ld:		-N -Ttext=0x80010000
      5  1.1  christos # output:	*\\npass\\n
      6  1.1  christos 
      7  1.1  christos 	.include "testutils.inc"
      8  1.1  christos 
      9  1.1  christos         .macro check_ps psval, upperval, lowerval
     10  1.1  christos 	.set push
     11  1.1  christos 	.set noreorder
     12  1.1  christos 	cvt.s.pu	$f0, \psval		# upper
     13  1.1  christos 	cvt.s.pl	$f2, \psval		# lower
     14  1.1  christos 	li.s		$f4, \upperval
     15  1.1  christos 	li.s		$f6, \lowerval
     16  1.1  christos 	c.eq.s		$fcc0, $f0, $f4
     17  1.1  christos 	bc1f		$fcc0, _fail
     18  1.1  christos 	 c.eq.s		$fcc0, $f2, $f6
     19  1.1  christos 	bc1f		$fcc0, _fail
     20  1.1  christos 	 nop
     21  1.1  christos 	.set pop
     22  1.1  christos         .endm
     23  1.1  christos 
     24  1.1  christos 	setup
     25  1.1  christos 
     26  1.1  christos 	.set noreorder
     27  1.1  christos 
     28  1.1  christos 	.ent DIAG
     29  1.1  christos DIAG:
     30  1.1  christos 
     31  1.1  christos 	# make sure that Status.FR and .CU1 are set.
     32  1.1  christos 	mfc0	$2, $12
     33  1.1  christos 	or	$2, $2, (1 << 26) | (1 << 29)
     34  1.1  christos 	mtc0	$2, $12
     35  1.1  christos 
     36  1.1  christos 
     37  1.1  christos 	writemsg "ldc1"
     38  1.1  christos 
     39  1.1  christos 	.data
     40  1.1  christos 1:	.dword	0xc1a8000042200000		# -21.0, 40.0
     41  1.1  christos 	.text
     42  1.1  christos 	la	$2, 1b
     43  1.1  christos 	ldc1	$f8, 0($2)
     44  1.1  christos 	check_ps $f8, -21.0, 40.0
     45  1.1  christos 
     46  1.1  christos 
     47  1.1  christos 	writemsg "cvt.ps.s"
     48  1.1  christos 
     49  1.1  christos 	li.s	$f10, 1.0
     50  1.1  christos 	li.s	$f12, 3.0
     51  1.1  christos 	cvt.ps.s $f8, $f10, $f12		# upper, lower
     52  1.1  christos 	check_ps $f8, 1.0, 3.0
     53  1.1  christos 
     54  1.1  christos 
     55  1.1  christos 	writemsg "cvt.ps.s, sdc1, copy, ldc1"
     56  1.1  christos 
     57  1.1  christos 	.data
     58  1.1  christos 1:	.dword	0
     59  1.1  christos 	.dword	0
     60  1.1  christos 	.text
     61  1.1  christos 	la	$2, 1b
     62  1.1  christos 	li.s	$f12, -4.0
     63  1.1  christos 	li.s	$f14, 32.0
     64  1.1  christos 	cvt.ps.s $f10, $f12, $f14		# upper, lower
     65  1.1  christos 	sdc1	$f10, 8($2)
     66  1.1  christos 	lw	$3, 8($2)
     67  1.1  christos 	lw	$4, 12($2)
     68  1.1  christos 	sw	$3, 0($2)
     69  1.1  christos 	sw	$4, 4($2)
     70  1.1  christos 	ldc1	$f8, 0($2)
     71  1.1  christos 	check_ps $f8, -4.0, 32.0
     72  1.1  christos 
     73  1.1  christos 
     74  1.1  christos 	# Load some constants for later use
     75  1.1  christos 
     76  1.1  christos 	li.s	$f10, 4.0
     77  1.1  christos 	li.s	$f12, 16.0
     78  1.1  christos 	cvt.ps.s $f20, $f10, $f12		# $f20: u=4.0, l=16.0
     79  1.1  christos 
     80  1.1  christos 	li.s	$f10, -1.0
     81  1.1  christos 	li.s	$f12, 2.0
     82  1.1  christos 	cvt.ps.s $f22, $f10, $f12		# $f22: u=-1.0, l=2.0
     83  1.1  christos 
     84  1.1  christos 	li.s	$f10, 17.0
     85  1.1  christos 	li.s	$f12, -8.0
     86  1.1  christos 	cvt.ps.s $f24, $f10, $f12		# $f24: u=17.0, l=-8.0
     87  1.1  christos 
     88  1.1  christos 
     89  1.1  christos 	writemsg "pll.ps"
     90  1.1  christos 
     91  1.1  christos 	pll.ps	$f8, $f20, $f22
     92  1.1  christos 	check_ps $f8, 16.0, 2.0
     93  1.1  christos 
     94  1.1  christos 
     95  1.1  christos 	writemsg "plu.ps"
     96  1.1  christos 
     97  1.1  christos 	plu.ps	$f8, $f20, $f22
     98  1.1  christos 	check_ps $f8, 16.0, -1.0
     99  1.1  christos 
    100  1.1  christos 
    101  1.1  christos 	writemsg "pul.ps"
    102  1.1  christos 
    103  1.1  christos 	pul.ps	$f8, $f20, $f22
    104  1.1  christos 	check_ps $f8, 4.0, 2.0
    105  1.1  christos 
    106  1.1  christos 
    107  1.1  christos 	writemsg "puu.ps"
    108  1.1  christos 
    109  1.1  christos 	puu.ps	$f8, $f20, $f22
    110  1.1  christos 	check_ps $f8, 4.0, -1.0
    111  1.1  christos 
    112  1.1  christos 
    113  1.1  christos 	writemsg "abs.ps"
    114  1.1  christos 
    115  1.1  christos 	abs.ps	$f8, $f22
    116  1.1  christos 	check_ps $f8, 1.0, 2.0
    117  1.1  christos 
    118  1.1  christos 
    119  1.1  christos 	writemsg "mov.ps"
    120  1.1  christos 
    121  1.1  christos 	mov.ps	$f8, $f22
    122  1.1  christos 	check_ps $f8, -1.0, 2.0
    123  1.1  christos 
    124  1.1  christos 
    125  1.1  christos 	writemsg "neg.ps"
    126  1.1  christos 
    127  1.1  christos 	neg.ps	$f8, $f22
    128  1.1  christos 	check_ps $f8, 1.0, -2.0
    129  1.1  christos 
    130  1.1  christos 
    131  1.1  christos 	writemsg "add.ps"
    132  1.1  christos 
    133  1.1  christos 	add.ps	$f8, $f20, $f22
    134  1.1  christos 	check_ps $f8, 3.0, 18.0
    135  1.1  christos 
    136  1.1  christos 
    137  1.1  christos 	writemsg "mul.ps"
    138  1.1  christos 
    139  1.1  christos 	mul.ps	$f8, $f20, $f22
    140  1.1  christos 	check_ps $f8, -4.0, 32.0
    141  1.1  christos 
    142  1.1  christos 
    143  1.1  christos 	writemsg "sub.ps"
    144  1.1  christos 
    145  1.1  christos 	sub.ps	$f8, $f20, $f22
    146  1.1  christos 	check_ps $f8, 5.0, 14.0
    147  1.1  christos 
    148  1.1  christos 
    149  1.1  christos 	writemsg "madd.ps"
    150  1.1  christos 
    151  1.1  christos 	madd.ps	$f8, $f24, $f20, $f22
    152  1.1  christos 	check_ps $f8, 13.0, 24.0
    153  1.1  christos 
    154  1.1  christos 
    155  1.1  christos 	writemsg "msub.ps"
    156  1.1  christos 
    157  1.1  christos 	msub.ps	$f8, $f24, $f20, $f22
    158  1.1  christos 	check_ps $f8, -21.0, 40.0
    159  1.1  christos 
    160  1.1  christos 
    161  1.1  christos 	writemsg "nmadd.ps"
    162  1.1  christos 
    163  1.1  christos 	nmadd.ps $f8, $f24, $f20, $f22
    164  1.1  christos 	check_ps $f8, -13.0, -24.0
    165  1.1  christos 
    166  1.1  christos 
    167  1.1  christos 	writemsg "nmsub.ps"
    168  1.1  christos 
    169  1.1  christos 	nmsub.ps $f8, $f24, $f20, $f22
    170  1.1  christos 	check_ps $f8, 21.0, -40.0
    171  1.1  christos 
    172  1.1  christos 
    173  1.1  christos 	writemsg "movn.ps (n)"
    174  1.1  christos 
    175  1.1  christos 	li	$2, 0
    176  1.1  christos 	mov.ps	$f8, $f20
    177  1.1  christos 	movn.ps	$f8, $f22, $2		# doesn't move
    178  1.1  christos 	check_ps $f8, 4.0, 16.0
    179  1.1  christos 
    180  1.1  christos 
    181  1.1  christos 	writemsg "movn.ps (y)"
    182  1.1  christos 
    183  1.1  christos 	li	$2, 1
    184  1.1  christos 	mov.ps	$f8, $f20
    185  1.1  christos 	movn.ps	$f8, $f22, $2		# does move
    186  1.1  christos 	check_ps $f8, -1.0, 2.0
    187  1.1  christos 
    188  1.1  christos 
    189  1.1  christos 	writemsg "movz.ps (y)"
    190  1.1  christos 
    191  1.1  christos 	li	$2, 0
    192  1.1  christos 	mov.ps	$f8, $f20
    193  1.1  christos 	movz.ps	$f8, $f22, $2		# does move
    194  1.1  christos 	check_ps $f8, -1.0, 2.0
    195  1.1  christos 
    196  1.1  christos 
    197  1.1  christos 	writemsg "movz.ps (n)"
    198  1.1  christos 
    199  1.1  christos 	li	$2, 1
    200  1.1  christos 	mov.ps	$f8, $f20
    201  1.1  christos 	movz.ps	$f8, $f22, $2		# doesn't move
    202  1.1  christos 	check_ps $f8, 4.0, 16.0
    203  1.1  christos 
    204  1.1  christos 
    205  1.1  christos 	writemsg "movf.ps (y,y)"
    206  1.1  christos 
    207  1.1  christos 	cfc1	$2, $31
    208  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    209  1.1  christos 	xor	$2, $2, (1 << 23) | (1 << 25)
    210  1.1  christos 	ctc1	$2, $31			# clear fcc0, clear fcc1
    211  1.1  christos 	mov.ps	$f8, $f20
    212  1.1  christos 	movf.ps	$f8, $f22, $fcc0	# moves both halves
    213  1.1  christos 	check_ps $f8, -1.0, 2.0
    214  1.1  christos 
    215  1.1  christos 
    216  1.1  christos 	writemsg "movf.ps (y,n)"
    217  1.1  christos 
    218  1.1  christos 	cfc1	$2, $31
    219  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    220  1.1  christos 	xor	$2, $2, (0 << 23) | (1 << 25)
    221  1.1  christos 	ctc1	$2, $31			# set fcc0, clear fcc1
    222  1.1  christos 	mov.ps	$f8, $f20
    223  1.1  christos 	movf.ps	$f8, $f22, $fcc0	# moves upper half only
    224  1.1  christos 	check_ps $f8, -1.0, 16.0
    225  1.1  christos 
    226  1.1  christos 
    227  1.1  christos 	writemsg "movf.ps (n,y)"
    228  1.1  christos 
    229  1.1  christos 	cfc1	$2, $31
    230  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    231  1.1  christos 	xor	$2, $2, (1 << 23) | (0 << 25)
    232  1.1  christos 	ctc1	$2, $31			# clear fcc0, set fcc1
    233  1.1  christos 	mov.ps	$f8, $f20
    234  1.1  christos 	movf.ps	$f8, $f22, $fcc0	# moves lower half only
    235  1.1  christos 	check_ps $f8, 4.0, 2.0
    236  1.1  christos 
    237  1.1  christos 
    238  1.1  christos 	writemsg "movf.ps (n,n)"
    239  1.1  christos 
    240  1.1  christos 	cfc1	$2, $31
    241  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    242  1.1  christos 	xor	$2, $2, (0 << 23) | (0 << 25)
    243  1.1  christos 	ctc1	$2, $31			# set fcc0, set fcc1
    244  1.1  christos 	mov.ps	$f8, $f20
    245  1.1  christos 	movf.ps	$f8, $f22, $fcc0	# doesn't move either half
    246  1.1  christos 	check_ps $f8, 4.0, 16.0
    247  1.1  christos 
    248  1.1  christos 
    249  1.1  christos 	writemsg "movt.ps (n,n)"
    250  1.1  christos 
    251  1.1  christos 	cfc1	$2, $31
    252  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    253  1.1  christos 	xor	$2, $2, (1 << 23) | (1 << 25)
    254  1.1  christos 	ctc1	$2, $31			# clear fcc0, clear fcc1
    255  1.1  christos 	mov.ps	$f8, $f20
    256  1.1  christos 	movt.ps	$f8, $f22, $fcc0	# doesn't move either half
    257  1.1  christos 	check_ps $f8, 4.0, 16.0
    258  1.1  christos 
    259  1.1  christos 
    260  1.1  christos 	writemsg "movt.ps (n,y)"
    261  1.1  christos 
    262  1.1  christos 	cfc1	$2, $31
    263  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    264  1.1  christos 	xor	$2, $2, (0 << 23) | (1 << 25)
    265  1.1  christos 	ctc1	$2, $31			# set fcc0, clear fcc1
    266  1.1  christos 	mov.ps	$f8, $f20
    267  1.1  christos 	movt.ps	$f8, $f22, $fcc0	# moves lower half only
    268  1.1  christos 	check_ps $f8, 4.0, 2.0
    269  1.1  christos 
    270  1.1  christos 
    271  1.1  christos 	writemsg "movt.ps (y,n)"
    272  1.1  christos 
    273  1.1  christos 	cfc1	$2, $31
    274  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    275  1.1  christos 	xor	$2, $2, (1 << 23) | (0 << 25)
    276  1.1  christos 	ctc1	$2, $31			# clear fcc0, set fcc1
    277  1.1  christos 	mov.ps	$f8, $f20
    278  1.1  christos 	movt.ps	$f8, $f22, $fcc0	# moves upper half only
    279  1.1  christos 	check_ps $f8, -1.0, 16.0
    280  1.1  christos 
    281  1.1  christos 
    282  1.1  christos 	writemsg "movt.ps (y,y)"
    283  1.1  christos 
    284  1.1  christos 	cfc1	$2, $31
    285  1.1  christos 	or	$2, $2, (1 << 23) | (1 << 25)
    286  1.1  christos 	xor	$2, $2, (0 << 23) | (0 << 25)
    287  1.1  christos 	ctc1	$2, $31			# set fcc0, set fcc1
    288  1.1  christos 	mov.ps	$f8, $f20
    289  1.1  christos 	movt.ps	$f8, $f22, $fcc0	# moves both halves
    290  1.1  christos 	check_ps $f8, -1.0, 2.0
    291  1.1  christos 
    292  1.1  christos 
    293  1.1  christos 	writemsg "alnv.ps (aligned)"
    294  1.1  christos 
    295  1.1  christos 	.data
    296  1.1  christos 1:	.dword	0xc1a8000042200000		# -21.0, 40.0
    297  1.1  christos 	.dword	0xc228000041a00000		# -42.0, 20.0
    298  1.1  christos 	.text
    299  1.1  christos 	la	$2, 1b
    300  1.1  christos 	li	$3, 0
    301  1.1  christos 	addu	$4, $3, 8
    302  1.1  christos 	luxc1	$f10, $3($2)
    303  1.1  christos 	luxc1	$f12, $4($2)
    304  1.1  christos 	alnv.ps	$f8, $f10, $f12, $3
    305  1.1  christos 	check_ps $f8, -21.0, 40.0
    306  1.1  christos 
    307  1.1  christos 
    308  1.1  christos 	writemsg "alnv.ps (unaligned)"
    309  1.1  christos 
    310  1.1  christos 	.data
    311  1.1  christos 1:	.dword	0xc1a8000042200000		# -21.0, 40.0
    312  1.1  christos 	.dword	0xc228000041a00000		# -42.0, 20.0
    313  1.1  christos 	.hword	0x0001
    314  1.1  christos 	.text
    315  1.1  christos 	la	$2, 1b
    316  1.1  christos 	li	$3, 4
    317  1.1  christos 	addu	$4, $3, 8
    318  1.1  christos 	luxc1	$f10, $3($2)
    319  1.1  christos 	luxc1	$f12, $4($2)
    320  1.1  christos 	alnv.ps	$f8, $f10, $f12, $3
    321  1.1  christos 
    322  1.1  christos 	lb	$5, 16($2)
    323  1.1  christos 	bnez	$5, 2f				# little endian
    324  1.1  christos 	 nop
    325  1.1  christos 
    326  1.1  christos 	# big endian
    327  1.1  christos 	check_ps $f8, 40.0, -42.0
    328  1.1  christos 	b	3f
    329  1.1  christos 	 nop
    330  1.1  christos 2:
    331  1.1  christos 	# little endian
    332  1.1  christos 	check_ps $f8, 20.0, -21.0
    333  1.1  christos 3:
    334  1.1  christos 
    335  1.1  christos 
    336  1.1  christos 	# We test c.cond.ps only lightly, just to make sure it modifies
    337  1.1  christos 	# two bits and compares the halves separately.  Perhaps it should
    338  1.1  christos 	# be tested more thoroughly.
    339  1.1  christos 
    340  1.1  christos 	writemsg "c.f.ps"
    341  1.1  christos 
    342  1.1  christos 	cfc1	$2, $31
    343  1.1  christos 	or	$2, $2, (1 << 23) | (0x7f << 25)
    344  1.1  christos 	ctc1	$2, $31			# set all fcc bits
    345  1.1  christos 	c.f.ps	$fcc0, $f8, $f8		# -> f, f
    346  1.1  christos 	bc1t	$fcc0, _fail
    347  1.1  christos 	 nop
    348  1.1  christos 	bc1t	$fcc1, _fail
    349  1.1  christos 	 nop
    350  1.1  christos 
    351  1.1  christos 
    352  1.1  christos 	writemsg "c.olt.ps"
    353  1.1  christos 
    354  1.1  christos 	cfc1	$2, $31
    355  1.1  christos 	or	$2, $2, (1 << 23) | (0x7f << 25)
    356  1.1  christos 	xor	$2, $2, (1 << 23) | (0x7f << 25)
    357  1.1  christos 	ctc1	$2, $31			# clear all fcc bits
    358  1.1  christos 	c.lt.ps $fcc0, $f22, $f24	# -> f, t
    359  1.1  christos 	bc1t	$fcc0, _fail
    360  1.1  christos 	 nop
    361  1.1  christos 	bc1f	$fcc1, _fail
    362  1.1  christos 	 nop
    363  1.1  christos 
    364  1.1  christos 
    365  1.1  christos 	pass
    366  1.1  christos 
    367  1.1  christos 	.end DIAG
    368