Home | History | Annotate | Download | only in mips
      1 	.text
      2 
      3 	.set noreorder
      4 	.set noat
      5 
      6 	.set arch=4010
      7 
      8 	flushi
      9 	flushd
     10 	flushid
     11 	madd $4,$5
     12 	maddu $5,$6
     13 	ffc $6,$7
     14 	ffs $7,$8
     15 	msub $8,$9
     16 	msubu $9,$10
     17 	selsl $10,$11,$12
     18 	selsr $11,$12,$13
     19 	waiti
     20 	wb 16($14)
     21 	addciu $14,$15,16
     22 
     23 	.set arch=4100
     24 
     25 	hibernate
     26 	standby
     27 	suspend
     28 
     29 	.set arch=4650
     30 
     31 	mad $4,$5
     32 	madu $5,$6
     33 	mul $6,$7,$8
     34 
     35 	# test mips4 instructions.
     36 
     37 	.set arch=mips4
     38 
     39 text_label:
     40 	bc1f	text_label
     41 	bc1f	$fcc1,text_label
     42 	bc1fl	$fcc1,text_label
     43 	bc1t	$fcc1,text_label
     44 	bc1tl	$fcc2,text_label
     45 	c.f.d	$f4,$f6
     46 	c.f.d	$fcc1,$f4,$f6
     47 	ldxc1	$f2,$4($5)
     48 	lwxc1	$f2,$4($5)
     49 	madd.d	$f0,$f2,$f4,$f6
     50 	madd.s	$f0,$f2,$f4,$f6
     51 	movf	$4,$5,$fcc4
     52 	movf.d	$f4,$f6,$fcc0
     53 	movf.s	$f4,$f6,$fcc0
     54 	movn	$4,$6,$6
     55 	movn.d	$f4,$f6,$6
     56 	movn.s	$f4,$f6,$6
     57 	movt	$4,$5,$fcc4
     58 	movt.d	$f4,$f6,$fcc0
     59 	movt.s	$f4,$f6,$fcc0
     60 	movz	$4,$6,$6
     61 	movz.d	$f4,$f6,$6
     62 	movz.s	$f4,$f6,$6
     63 	msub.d	$f0,$f2,$f4,$f6
     64 	msub.s	$f0,$f2,$f4,$f6
     65 	nmadd.d	$f0,$f2,$f4,$f6
     66 	nmadd.s	$f0,$f2,$f4,$f6
     67 	nmsub.d	$f0,$f2,$f4,$f6
     68 	nmsub.s	$f0,$f2,$f4,$f6
     69 
     70 	# We don't test pref because currently the disassembler will
     71 	# disassemble it as lwc3.  lwc3 is correct for mips1 to mips3,
     72 	# while pref is correct for mips4.  Unfortunately, the
     73 	# disassembler does not know which architecture it is
     74 	# disassembling for.
     75 	# pref	4,0($4)
     76 
     77 	prefx	4,$4($5)
     78 	recip.d	$f4,$f6
     79 	recip.s	$f4,$f6
     80 	rsqrt.d	$f4,$f6
     81 	rsqrt.s	$f4,$f6
     82 	sdxc1	$f4,$4($5)
     83 	swxc1	$f4,$4($5)
     84 
     85 	# test mips5 instructions.
     86 
     87 	.set arch=mips5
     88 
     89 	abs.ps		$f0, $f2
     90 	add.ps		$f2, $f4, $f6
     91 	alnv.ps		$f6, $f8, $f10, $3
     92 	c.eq.ps		$f8, $f10
     93 	c.eq.ps		$fcc2, $f10, $f12
     94 	c.f.ps	    	$f8, $f10
     95 	c.f.ps	    	$fcc2, $f10, $f12
     96 	c.le.ps		$f8, $f10
     97 	c.le.ps		$fcc2, $f10, $f12
     98 	c.lt.ps		$f8, $f10
     99 	c.lt.ps		$fcc2, $f10, $f12
    100 	c.nge.ps	$f8, $f10
    101 	c.nge.ps	$fcc2, $f10, $f12
    102 	c.ngl.ps	$f8, $f10
    103 	c.ngl.ps	$fcc2, $f10, $f12
    104 	c.ngle.ps	$f8, $f10
    105 	c.ngle.ps	$fcc2, $f10, $f12
    106 	c.ngt.ps	$f8, $f10
    107 	c.ngt.ps	$fcc2, $f10, $f12
    108 	c.ole.ps	$f8, $f10
    109 	c.ole.ps	$fcc2, $f10, $f12
    110 	c.olt.ps	$f8, $f10
    111 	c.olt.ps	$fcc2, $f10, $f12
    112 	c.seq.ps	$f8, $f10
    113 	c.seq.ps	$fcc2, $f10, $f12
    114 	c.sf.ps		$f8, $f10
    115 	c.sf.ps		$fcc2, $f10, $f12
    116 	c.ueq.ps	$f8, $f10
    117 	c.ueq.ps	$fcc2, $f10, $f12
    118 	c.ule.ps	$f8, $f10
    119 	c.ule.ps	$fcc2, $f10, $f12
    120 	c.ult.ps	$f8, $f10
    121 	c.ult.ps	$fcc2, $f10, $f12
    122 	c.un.ps		$f8, $f10
    123 	c.un.ps		$fcc2, $f10, $f12
    124 	cvt.ps.s	$f12, $f14, $f16
    125 	cvt.s.pl	$f16, $f18
    126 	cvt.s.pu	$f18, $f20
    127 	luxc1		$f20, $4($5)
    128 	madd.ps		$f20, $f22, $f24, $f26
    129 	mov.ps		$f24, $f26
    130 	movf.ps		$f26, $f28, $fcc2
    131 	movn.ps		$f26, $f28, $3
    132 	movt.ps		$f28, $f30, $fcc4
    133 	movz.ps		$f28, $f30, $5
    134 	msub.ps		$f30, $f0, $f2, $f4
    135 	mul.ps		$f2, $f4, $f6
    136 	neg.ps		$f6, $f8
    137 	nmadd.ps	$f6, $f8, $f10, $f12
    138 	nmsub.ps	$f6, $f8, $f10, $f12
    139 	pll.ps		$f10, $f12, $f14
    140 	plu.ps		$f14, $f16, $f18
    141 	pul.ps		$f16, $f18, $f20
    142 	puu.ps		$f20, $f22, $f24
    143 	sub.ps		$f22, $f24, $f26
    144 	suxc1		$f26, $6($7)
    145 
    146 	c.eq.ps		$fcc3, $f10, $f12	# warns
    147 	movf.ps		$f26, $f28, $fcc3	# warns
    148 
    149 	# test assembly of mips32 instructions
    150 
    151 	.set arch=mips32
    152 
    153 	# unprivileged CPU instructions
    154 
    155 	clo     $1, $2
    156 	clz     $3, $4
    157 	madd    $5, $6
    158 	maddu   $7, $8
    159 	msub    $9, $10
    160 	msubu   $11, $12
    161 	mul     $13, $14, $15
    162 	pref    4, ($16)
    163 	pref    4, 32767($17)
    164 	pref    4, -32768($18)
    165 	ssnop
    166 
    167 	# unprivileged coprocessor instructions.
    168 	# these tests use cp2 to avoid other (cp0, fpu, prefetch) opcodes.
    169 
    170 	bc2f    text_label
    171 	nop
    172 	bc2fl   text_label
    173 	nop
    174 	bc2t    text_label
    175 	nop
    176 	bc2tl   text_label
    177 	nop
    178 	# XXX other BCzCond encodings not currently expressable
    179 	cfc2    $1, $2
    180 	cop2    0x1234567               # disassembles as c2 ...
    181 	ctc2    $2, $3
    182 	mfc2    $3, $4
    183 	mfc2    $4, $5, 0               # disassembles without sel
    184 	mfc2    $5, $6, 7
    185 	mtc2    $6, $7
    186 	mtc2    $7, $8, 0               # disassembles without sel
    187 	mtc2    $8, $9, 7
    188 
    189 	# privileged instructions
    190 
    191 	cache   5, ($1)
    192 	cache   5, 32767($2)
    193 	cache   5, -32768($3)
    194 	eret
    195 	tlbp
    196 	tlbr
    197 	tlbwi
    198 	tlbwr
    199 	wait
    200 	wait    0                       # disassembles without code
    201 	wait    0x56789
    202 
    203 	# For a while break for the mips32 ISA interpreted a single argument
    204 	# as a 20-bit code, placing it in the opcode differently to
    205 	# traditional ISAs.  This turned out to cause problems, so it has
    206 	# been removed.  This test is to assure consistent interpretation.
    207 	break
    208 	break   0                       # disassembles without code
    209 	break	0x345
    210 	break	0x48,0x345		# this still specifies a 20-bit code
    211 
    212 	# Instructions in previous ISAs or CPUs which are now slightly
    213 	# different.
    214 	sdbbp
    215 	sdbbp   0                       # disassembles without code
    216 	sdbbp   0x56789
    217 
    218 	# test assembly of mips32r2 instructions
    219 
    220 	.set arch=mips32r2
    221 
    222 	# unprivileged CPU instructions
    223 
    224 	ehb
    225 
    226 	ext	$4, $5, 6, 8
    227 
    228 	ins	$4, $5, 6, 8
    229 
    230 	jalr.hb	$8
    231 	jalr.hb $20, $9
    232 
    233 	jr.hb	$8
    234 
    235 	# Note, further testing of rdhwr is done in hwr-names-mips32r2.d
    236 	rdhwr	$10, $0
    237 	rdhwr	$11, $1
    238 	rdhwr	$12, $2
    239 	rdhwr	$13, $3
    240 	rdhwr	$14, $4
    241 	rdhwr	$15, $5
    242 
    243 	# This file checks that in fact HW rotate will
    244 	# be used for this arch, and checks assembly
    245 	# of the official MIPS mnemonics.  (Note that disassembly
    246 	# uses the traditional "ror" and "rorv" mnemonics.)
    247 	# Additional rotate tests are done by rol-hw.d.
    248 	rotl	$25, $10, 4
    249 	rotr	$25, $10, 4
    250 	rotl	$25, $10, $4
    251 	rotr	$25, $10, $4
    252 	rotrv	$25, $10, $4
    253 
    254 	seb	$7
    255 	seb	$8, $10
    256 
    257 	seh	$7
    258 	seh	$8, $10
    259 
    260 	synci	0x5555($10)
    261 
    262 	wsbh	$7
    263 	wsbh	$8, $10
    264 
    265 	# cp0 instructions
    266 
    267 	di
    268 	di	$0
    269 	di	$10
    270 
    271 	ei
    272 	ei	$0
    273 	ei	$10
    274 
    275 	rdpgpr	$10, $25
    276 
    277 	wrpgpr	$10, $25
    278 
    279 	# FPU (cp1) instructions
    280 	#
    281 	# Even registers are supported w/ 32-bit FPU, odd
    282 	# registers supported only for 64-bit FPU.
    283 	# Only the 32-bit FPU instructions are tested here.
    284 
    285 	mfhc1	$17, $f0
    286 	mthc1	$17, $f0
    287 
    288 	# cp2 instructions
    289 
    290 	mfhc2	$17, 0x5555
    291 	mthc2	$17, 0x5555
    292 
    293 	.set arch=mips64
    294 
    295 	# test assembly of mips64 instructions
    296 
    297 	# unprivileged CPU instructions
    298 
    299 	dclo    $1, $2
    300 	dclz    $3, $4
    301 
    302 	# unprivileged coprocessor instructions.
    303 	# these tests use cp2 to avoid other (cp0, fpu, prefetch) opcodes.
    304 
    305 	dmfc2   $3, $4
    306 	dmfc2   $4, $5, 0               # disassembles without sel
    307 	dmfc2   $5, $6, 7
    308 	dmtc2   $6, $7
    309 	dmtc2   $7, $8, 0               # disassembles without sel
    310 	dmtc2   $8, $9, 7
    311 
    312 	.set arch=vr4111
    313 
    314 	dmadd16	$4,$5
    315 	madd16	$5,$6
    316 
    317 	.set arch=vr4120
    318 
    319 	# Include mflos to check for nop insertion.
    320 	mflo        $4
    321 	dmacc       $4,$5,$6
    322 	dmacchi     $4,$5,$6
    323 	dmacchis    $4,$5,$6
    324 	dmacchiu    $4,$5,$6
    325 	dmacchius   $4,$5,$6
    326 	dmaccs      $4,$5,$6
    327 	dmaccu      $4,$5,$6
    328 	dmaccus     $4,$5,$6
    329 	mflo        $4
    330 	macc        $4,$5,$6
    331 	macchi      $4,$5,$6
    332 	macchis     $4,$5,$6
    333 	macchiu     $4,$5,$6
    334 	macchius    $4,$5,$6
    335 	maccs       $4,$5,$6
    336 	maccu       $4,$5,$6
    337 	maccus      $4,$5,$6
    338 
    339 	.set arch=vr5400
    340 
    341 	/* Integer instructions.  */
    342 
    343 	mulu	$4,$5,$6
    344 	mulhi	$4,$5,$6
    345 	mulhiu	$4,$5,$6
    346 	muls	$4,$5,$6
    347 	mulsu	$4,$5,$6
    348 	mulshi	$4,$5,$6
    349 	mulshiu	$4,$5,$6
    350 	macc	$4,$5,$6
    351 	maccu	$4,$5,$6
    352 	macchi	$4,$5,$6
    353 	macchiu	$4,$5,$6
    354 	msac	$4,$5,$6
    355 	msacu	$4,$5,$6
    356 	msachi	$4,$5,$6
    357 	msachiu	$4,$5,$6
    358 
    359 	ror	$4,$5,25
    360 	rorv	$4,$5,$6
    361 	dror	$4,$5,25
    362 	dror	$4,$5,57	/* Should expand to dror32 $4,$5,25.  */
    363 	dror32	$4,$5,25
    364 	drorv	$4,$5,$6
    365 
    366 	/* Debug instructions.  */
    367 
    368 	dbreak
    369 	dret
    370 	mfdr	$3,$3
    371 	mtdr	$3,$3
    372 
    373 	/* Coprocessor 0 instructions, minus standard ISA 3 ones.
    374 	   That leaves just the performance monitoring registers.  */
    375 
    376 	mfpc	$4,1
    377 	mfps	$4,1
    378 	mtpc	$4,1
    379 	mtps	$4,1
    380 
    381 	/* Multimedia instructions.  */
    382 
    383 	.macro	nsel2 op
    384 	/* Test each form of each vector opcode.  */
    385 	\op	$f0,$f2
    386 	\op	$f4,$f6[2]
    387 	\op	$f6,15
    388 	.if 0	/* Which is right?? */
    389 	/* Test negative numbers in immediate-value slot.  */
    390 	\op	$f4,-3
    391 	.else
    392 	/* Test that it's recognized as an unsigned field.  */
    393 	\op	$f4,31
    394 	.endif
    395 	.endm
    396 
    397 	.macro	nsel3 op
    398 	/* Test each form of each vector opcode.  */
    399 	\op	$f0,$f2,$f4
    400 	\op	$f2,$f4,$f6[2]
    401 	\op	$f6,$f4,15
    402 	.if 0	/* Which is right?? */
    403 	/* Test negative numbers in immediate-value slot.  */
    404 	\op	$f4,$f6,-3
    405 	.else
    406 	/* Test that it's recognized as an unsigned field.  */
    407 	\op	$f4,$f6,31
    408 	.endif
    409 	.endm
    410 
    411 	nsel3	add.ob
    412 	nsel3	and.ob
    413 	nsel2	c.eq.ob
    414 	nsel2	c.le.ob
    415 	nsel2	c.lt.ob
    416 	nsel3	max.ob
    417 	nsel3	min.ob
    418 	nsel3	mul.ob
    419 	nsel2	mula.ob
    420 	nsel2	mull.ob
    421 	nsel2	muls.ob
    422 	nsel2	mulsl.ob
    423 	nsel3	nor.ob
    424 	nsel3	or.ob
    425 	nsel3	pickf.ob
    426 	nsel3	pickt.ob
    427 	nsel3	sub.ob
    428 	nsel3	xor.ob
    429 
    430 	/* ALNI, SHFL: Vector only.  */
    431 	alni.ob		$f0,$f2,$f4,5
    432 	shfl.mixh.ob	$f0,$f2,$f4
    433 	shfl.mixl.ob	$f0,$f2,$f4
    434 	shfl.pach.ob	$f0,$f2,$f4
    435 	shfl.pacl.ob	$f0,$f2,$f4
    436 
    437 	/* SLL,SRL: Scalar or immediate.  */
    438 	sll.ob	$f2,$f4,$f6[3]
    439 	sll.ob	$f4,$f6,14
    440 	srl.ob	$f2,$f4,$f6[3]
    441 	srl.ob	$f4,$f6,14
    442 
    443 	/* RZU: Immediate, must be 0, 8, or 16.  */
    444 	rzu.ob	$f2,13
    445 
    446 	/* No selector.  */
    447 	rach.ob	$f2
    448 	racl.ob	$f2
    449 	racm.ob	$f2
    450 	wach.ob	$f2
    451 	wacl.ob	$f2,$f4
    452 
    453 	ror	$4,$5,$6
    454 	rol	$4,$5,15
    455 	dror	$4,$5,$6
    456 	drol	$4,$5,31
    457 	drol	$4,$5,62
    458 
    459 	.set arch=vr5500
    460 
    461 	/* Prefetch instructions.  */
    462         # We don't test pref because currently the disassembler will
    463         # disassemble it as lwc3.  lwc3 is correct for mips1 to mips3,
    464         # while pref is correct for mips4.  Unfortunately, the
    465         # disassembler does not know which architecture it is
    466         # disassembling for.
    467         # pref  4,0($4)
    468 
    469         prefx   4,$4($5)
    470 
    471 	/* Miscellaneous instructions.  */
    472 
    473 	wait
    474 	wait	0		# disassembles without code
    475 	wait	0x56789
    476 
    477 	ssnop
    478 
    479 	clo	$3,$4
    480 	dclo	$3,$4
    481 	clz	$3,$4
    482 	dclz    $3,$4
    483 
    484 	luxc1	$f0,$4($2)
    485 	suxc1   $f2,$4($2)
    486 
    487 	tlbp
    488 	tlbr
    489 
    490 .set arch=default
    491 
    492 # make objdump print ...
    493 	.space 8
    494