| .text |
| |
| .set noreorder |
| .set noat |
| |
| .set arch=4010 |
| |
| flushi |
| flushd |
| flushid |
| madd $4,$5 |
| maddu $5,$6 |
| ffc $6,$7 |
| ffs $7,$8 |
| msub $8,$9 |
| msubu $9,$10 |
| selsl $10,$11,$12 |
| selsr $11,$12,$13 |
| waiti |
| wb 16($14) |
| addciu $14,$15,16 |
| |
| .set arch=4100 |
| |
| hibernate |
| standby |
| suspend |
| |
| .set arch=4650 |
| |
| mad $4,$5 |
| madu $5,$6 |
| mul $6,$7,$8 |
| |
| # test mips4 instructions. |
| |
| .set arch=mips4 |
| |
| text_label: |
| bc1f text_label |
| bc1f $fcc1,text_label |
| bc1fl $fcc1,text_label |
| bc1t $fcc1,text_label |
| bc1tl $fcc2,text_label |
| c.f.d $f4,$f6 |
| c.f.d $fcc1,$f4,$f6 |
| ldxc1 $f2,$4($5) |
| lwxc1 $f2,$4($5) |
| madd.d $f0,$f2,$f4,$f6 |
| madd.s $f0,$f2,$f4,$f6 |
| movf $4,$5,$fcc4 |
| movf.d $f4,$f6,$fcc0 |
| movf.s $f4,$f6,$fcc0 |
| movn $4,$6,$6 |
| movn.d $f4,$f6,$6 |
| movn.s $f4,$f6,$6 |
| movt $4,$5,$fcc4 |
| movt.d $f4,$f6,$fcc0 |
| movt.s $f4,$f6,$fcc0 |
| movz $4,$6,$6 |
| movz.d $f4,$f6,$6 |
| movz.s $f4,$f6,$6 |
| msub.d $f0,$f2,$f4,$f6 |
| msub.s $f0,$f2,$f4,$f6 |
| nmadd.d $f0,$f2,$f4,$f6 |
| nmadd.s $f0,$f2,$f4,$f6 |
| nmsub.d $f0,$f2,$f4,$f6 |
| nmsub.s $f0,$f2,$f4,$f6 |
| |
| # We don't test pref because currently the disassembler will |
| # disassemble it as lwc3. lwc3 is correct for mips1 to mips3, |
| # while pref is correct for mips4. Unfortunately, the |
| # disassembler does not know which architecture it is |
| # disassembling for. |
| # pref 4,0($4) |
| |
| prefx 4,$4($5) |
| recip.d $f4,$f6 |
| recip.s $f4,$f6 |
| rsqrt.d $f4,$f6 |
| rsqrt.s $f4,$f6 |
| sdxc1 $f4,$4($5) |
| swxc1 $f4,$4($5) |
| |
| # test mips5 instructions. |
| |
| .set arch=mips5 |
| |
| abs.ps $f0, $f2 |
| add.ps $f2, $f4, $f6 |
| alnv.ps $f6, $f8, $f10, $3 |
| c.eq.ps $f8, $f10 |
| c.eq.ps $fcc2, $f10, $f12 |
| c.f.ps $f8, $f10 |
| c.f.ps $fcc2, $f10, $f12 |
| c.le.ps $f8, $f10 |
| c.le.ps $fcc2, $f10, $f12 |
| c.lt.ps $f8, $f10 |
| c.lt.ps $fcc2, $f10, $f12 |
| c.nge.ps $f8, $f10 |
| c.nge.ps $fcc2, $f10, $f12 |
| c.ngl.ps $f8, $f10 |
| c.ngl.ps $fcc2, $f10, $f12 |
| c.ngle.ps $f8, $f10 |
| c.ngle.ps $fcc2, $f10, $f12 |
| c.ngt.ps $f8, $f10 |
| c.ngt.ps $fcc2, $f10, $f12 |
| c.ole.ps $f8, $f10 |
| c.ole.ps $fcc2, $f10, $f12 |
| c.olt.ps $f8, $f10 |
| c.olt.ps $fcc2, $f10, $f12 |
| c.seq.ps $f8, $f10 |
| c.seq.ps $fcc2, $f10, $f12 |
| c.sf.ps $f8, $f10 |
| c.sf.ps $fcc2, $f10, $f12 |
| c.ueq.ps $f8, $f10 |
| c.ueq.ps $fcc2, $f10, $f12 |
| c.ule.ps $f8, $f10 |
| c.ule.ps $fcc2, $f10, $f12 |
| c.ult.ps $f8, $f10 |
| c.ult.ps $fcc2, $f10, $f12 |
| c.un.ps $f8, $f10 |
| c.un.ps $fcc2, $f10, $f12 |
| cvt.ps.s $f12, $f14, $f16 |
| cvt.s.pl $f16, $f18 |
| cvt.s.pu $f18, $f20 |
| luxc1 $f20, $4($5) |
| madd.ps $f20, $f22, $f24, $f26 |
| mov.ps $f24, $f26 |
| movf.ps $f26, $f28, $fcc2 |
| movn.ps $f26, $f28, $3 |
| movt.ps $f28, $f30, $fcc4 |
| movz.ps $f28, $f30, $5 |
| msub.ps $f30, $f0, $f2, $f4 |
| mul.ps $f2, $f4, $f6 |
| neg.ps $f6, $f8 |
| nmadd.ps $f6, $f8, $f10, $f12 |
| nmsub.ps $f6, $f8, $f10, $f12 |
| pll.ps $f10, $f12, $f14 |
| plu.ps $f14, $f16, $f18 |
| pul.ps $f16, $f18, $f20 |
| puu.ps $f20, $f22, $f24 |
| sub.ps $f22, $f24, $f26 |
| suxc1 $f26, $6($7) |
| |
| c.eq.ps $fcc3, $f10, $f12 # warns |
| movf.ps $f26, $f28, $fcc3 # warns |
| |
| # test assembly of mips32 instructions |
| |
| .set arch=mips32 |
| |
| # unprivileged CPU instructions |
| |
| clo $1, $2 |
| clz $3, $4 |
| madd $5, $6 |
| maddu $7, $8 |
| msub $9, $10 |
| msubu $11, $12 |
| mul $13, $14, $15 |
| pref 4, ($16) |
| pref 4, 32767($17) |
| pref 4, -32768($18) |
| ssnop |
| |
| # unprivileged coprocessor instructions. |
| # these tests use cp2 to avoid other (cp0, fpu, prefetch) opcodes. |
| |
| bc2f text_label |
| nop |
| bc2fl text_label |
| nop |
| bc2t text_label |
| nop |
| bc2tl text_label |
| nop |
| # XXX other BCzCond encodings not currently expressable |
| cfc2 $1, $2 |
| cop2 0x1234567 # disassembles as c2 ... |
| ctc2 $2, $3 |
| mfc2 $3, $4 |
| mfc2 $4, $5, 0 # disassembles without sel |
| mfc2 $5, $6, 7 |
| mtc2 $6, $7 |
| mtc2 $7, $8, 0 # disassembles without sel |
| mtc2 $8, $9, 7 |
| |
| # privileged instructions |
| |
| cache 5, ($1) |
| cache 5, 32767($2) |
| cache 5, -32768($3) |
| eret |
| tlbp |
| tlbr |
| tlbwi |
| tlbwr |
| wait |
| wait 0 # disassembles without code |
| wait 0x56789 |
| |
| # For a while break for the mips32 ISA interpreted a single argument |
| # as a 20-bit code, placing it in the opcode differently to |
| # traditional ISAs. This turned out to cause problems, so it has |
| # been removed. This test is to assure consistent interpretation. |
| break |
| break 0 # disassembles without code |
| break 0x345 |
| break 0x48,0x345 # this still specifies a 20-bit code |
| |
| # Instructions in previous ISAs or CPUs which are now slightly |
| # different. |
| sdbbp |
| sdbbp 0 # disassembles without code |
| sdbbp 0x56789 |
| |
| # test assembly of mips32r2 instructions |
| |
| .set arch=mips32r2 |
| |
| # unprivileged CPU instructions |
| |
| ehb |
| |
| ext $4, $5, 6, 8 |
| |
| ins $4, $5, 6, 8 |
| |
| jalr.hb $8 |
| jalr.hb $20, $9 |
| |
| jr.hb $8 |
| |
| # Note, further testing of rdhwr is done in hwr-names-mips32r2.d |
| rdhwr $10, $0 |
| rdhwr $11, $1 |
| rdhwr $12, $2 |
| rdhwr $13, $3 |
| rdhwr $14, $4 |
| rdhwr $15, $5 |
| |
| # This file checks that in fact HW rotate will |
| # be used for this arch, and checks assembly |
| # of the official MIPS mnemonics. (Note that disassembly |
| # uses the traditional "ror" and "rorv" mnemonics.) |
| # Additional rotate tests are done by rol-hw.d. |
| rotl $25, $10, 4 |
| rotr $25, $10, 4 |
| rotl $25, $10, $4 |
| rotr $25, $10, $4 |
| rotrv $25, $10, $4 |
| |
| seb $7 |
| seb $8, $10 |
| |
| seh $7 |
| seh $8, $10 |
| |
| synci 0x5555($10) |
| |
| wsbh $7 |
| wsbh $8, $10 |
| |
| # cp0 instructions |
| |
| di |
| di $0 |
| di $10 |
| |
| ei |
| ei $0 |
| ei $10 |
| |
| rdpgpr $10, $25 |
| |
| wrpgpr $10, $25 |
| |
| # FPU (cp1) instructions |
| # |
| # Even registers are supported w/ 32-bit FPU, odd |
| # registers supported only for 64-bit FPU. |
| # Only the 32-bit FPU instructions are tested here. |
| |
| mfhc1 $17, $f0 |
| mthc1 $17, $f0 |
| |
| # cp2 instructions |
| |
| mfhc2 $17, 0x5555 |
| mthc2 $17, 0x5555 |
| |
| .set arch=mips64 |
| |
| # test assembly of mips64 instructions |
| |
| # unprivileged CPU instructions |
| |
| dclo $1, $2 |
| dclz $3, $4 |
| |
| # unprivileged coprocessor instructions. |
| # these tests use cp2 to avoid other (cp0, fpu, prefetch) opcodes. |
| |
| dmfc2 $3, $4 |
| dmfc2 $4, $5, 0 # disassembles without sel |
| dmfc2 $5, $6, 7 |
| dmtc2 $6, $7 |
| dmtc2 $7, $8, 0 # disassembles without sel |
| dmtc2 $8, $9, 7 |
| |
| .set arch=vr4111 |
| |
| dmadd16 $4,$5 |
| madd16 $5,$6 |
| |
| .set arch=vr4120 |
| |
| # Include mflos to check for nop insertion. |
| mflo $4 |
| dmacc $4,$5,$6 |
| dmacchi $4,$5,$6 |
| dmacchis $4,$5,$6 |
| dmacchiu $4,$5,$6 |
| dmacchius $4,$5,$6 |
| dmaccs $4,$5,$6 |
| dmaccu $4,$5,$6 |
| dmaccus $4,$5,$6 |
| mflo $4 |
| macc $4,$5,$6 |
| macchi $4,$5,$6 |
| macchis $4,$5,$6 |
| macchiu $4,$5,$6 |
| macchius $4,$5,$6 |
| maccs $4,$5,$6 |
| maccu $4,$5,$6 |
| maccus $4,$5,$6 |
| |
| .set arch=vr5400 |
| |
| /* Integer instructions. */ |
| |
| mulu $4,$5,$6 |
| mulhi $4,$5,$6 |
| mulhiu $4,$5,$6 |
| muls $4,$5,$6 |
| mulsu $4,$5,$6 |
| mulshi $4,$5,$6 |
| mulshiu $4,$5,$6 |
| macc $4,$5,$6 |
| maccu $4,$5,$6 |
| macchi $4,$5,$6 |
| macchiu $4,$5,$6 |
| msac $4,$5,$6 |
| msacu $4,$5,$6 |
| msachi $4,$5,$6 |
| msachiu $4,$5,$6 |
| |
| ror $4,$5,25 |
| rorv $4,$5,$6 |
| dror $4,$5,25 |
| dror $4,$5,57 /* Should expand to dror32 $4,$5,25. */ |
| dror32 $4,$5,25 |
| drorv $4,$5,$6 |
| |
| /* Debug instructions. */ |
| |
| dbreak |
| dret |
| mfdr $3,$3 |
| mtdr $3,$3 |
| |
| /* Coprocessor 0 instructions, minus standard ISA 3 ones. |
| That leaves just the performance monitoring registers. */ |
| |
| mfpc $4,1 |
| mfps $4,1 |
| mtpc $4,1 |
| mtps $4,1 |
| |
| /* Multimedia instructions. */ |
| |
| .macro nsel2 op |
| /* Test each form of each vector opcode. */ |
| \op $f0,$f2 |
| \op $f4,$f6[2] |
| \op $f6,15 |
| .if 0 /* Which is right?? */ |
| /* Test negative numbers in immediate-value slot. */ |
| \op $f4,-3 |
| .else |
| /* Test that it's recognized as an unsigned field. */ |
| \op $f4,31 |
| .endif |
| .endm |
| |
| .macro nsel3 op |
| /* Test each form of each vector opcode. */ |
| \op $f0,$f2,$f4 |
| \op $f2,$f4,$f6[2] |
| \op $f6,$f4,15 |
| .if 0 /* Which is right?? */ |
| /* Test negative numbers in immediate-value slot. */ |
| \op $f4,$f6,-3 |
| .else |
| /* Test that it's recognized as an unsigned field. */ |
| \op $f4,$f6,31 |
| .endif |
| .endm |
| |
| nsel3 add.ob |
| nsel3 and.ob |
| nsel2 c.eq.ob |
| nsel2 c.le.ob |
| nsel2 c.lt.ob |
| nsel3 max.ob |
| nsel3 min.ob |
| nsel3 mul.ob |
| nsel2 mula.ob |
| nsel2 mull.ob |
| nsel2 muls.ob |
| nsel2 mulsl.ob |
| nsel3 nor.ob |
| nsel3 or.ob |
| nsel3 pickf.ob |
| nsel3 pickt.ob |
| nsel3 sub.ob |
| nsel3 xor.ob |
| |
| /* ALNI, SHFL: Vector only. */ |
| alni.ob $f0,$f2,$f4,5 |
| shfl.mixh.ob $f0,$f2,$f4 |
| shfl.mixl.ob $f0,$f2,$f4 |
| shfl.pach.ob $f0,$f2,$f4 |
| shfl.pacl.ob $f0,$f2,$f4 |
| |
| /* SLL,SRL: Scalar or immediate. */ |
| sll.ob $f2,$f4,$f6[3] |
| sll.ob $f4,$f6,14 |
| srl.ob $f2,$f4,$f6[3] |
| srl.ob $f4,$f6,14 |
| |
| /* RZU: Immediate, must be 0, 8, or 16. */ |
| rzu.ob $f2,13 |
| |
| /* No selector. */ |
| rach.ob $f2 |
| racl.ob $f2 |
| racm.ob $f2 |
| wach.ob $f2 |
| wacl.ob $f2,$f4 |
| |
| ror $4,$5,$6 |
| rol $4,$5,15 |
| dror $4,$5,$6 |
| drol $4,$5,31 |
| drol $4,$5,62 |
| |
| .set arch=vr5500 |
| |
| /* Prefetch instructions. */ |
| # We don't test pref because currently the disassembler will |
| # disassemble it as lwc3. lwc3 is correct for mips1 to mips3, |
| # while pref is correct for mips4. Unfortunately, the |
| # disassembler does not know which architecture it is |
| # disassembling for. |
| # pref 4,0($4) |
| |
| prefx 4,$4($5) |
| |
| /* Miscellaneous instructions. */ |
| |
| wait |
| wait 0 # disassembles without code |
| wait 0x56789 |
| |
| ssnop |
| |
| clo $3,$4 |
| dclo $3,$4 |
| clz $3,$4 |
| dclz $3,$4 |
| |
| luxc1 $f0,$4($2) |
| suxc1 $f2,$4($2) |
| |
| tlbp |
| tlbr |
| |
| .set arch=default |
| |
| # make objdump print ... |
| .space 8 |