$AT = '@';
print <<END
.text
	.type _start,${AT}function
_start:

	pmpyshr2 r4 = r5, r6, 0
	pmpyshr2.u r4 = r5, r6, 16

	pmpy2.r r4 = r5, r6
	pmpy2.l r4 = r5, r6

	mix1.r r4 = r5, r6
	mix2.r r4 = r5, r6
	mix4.r r4 = r5, r6
	mix1.l r4 = r5, r6
	mix2.l r4 = r5, r6
	mix4.l r4 = r5, r6

	pack2.uss r4 = r5, r6
	pack2.sss r4 = r5, r6
	pack4.sss r4 = r5, r6

	unpack1.h r4 = r5, r6
	unpack2.h r4 = r5, r6
	unpack4.h r4 = r5, r6
	unpack1.l r4 = r5, r6
	unpack2.l r4 = r5, r6
	unpack4.l r4 = r5, r6

	pmin1.u r4 = r5, r6
	pmax1.u r4 = r5, r6

	pmin2 r4 = r5, r6
	pmax2 r4 = r5, r6

	psad1 r4 = r5, r6

	mux1 r4 = r5, ${AT}rev
	mux1 r4 = r5, ${AT}mix
	mux1 r4 = r5, ${AT}shuf
	mux1 r4 = r5, ${AT}alt
	mux1 r4 = r5, ${AT}brcst

	mux2 r4 = r5, 0
	mux2 r4 = r5, 0xff
	mux2 r4 = r5, 0xaa

	pshr2 r4 = r5, r6
	pshr2 r4 = r5, 0
	pshr2 r4 = r5, 8
	pshr2 r4 = r5, 31

	pshr4 r4 = r5, r6
	pshr4 r4 = r5, 0
	pshr4 r4 = r5, 8
	pshr4 r4 = r5, 31

	pshr2.u r4 = r5, r6
	pshr2.u r4 = r5, 0
	pshr2.u r4 = r5, 8
	pshr2.u r4 = r5, 31

	pshr4.u r4 = r5, r6
	pshr4.u r4 = r5, 0
	pshr4.u r4 = r5, 8
	pshr4.u r4 = r5, 31

	shr r4 = r5, r6
	shr.u r4 = r5, r6

	pshl2 r4 = r5, r6
	pshl2 r4 = r5, 0
	pshl2 r4 = r5, 8
	pshl2 r4 = r5, 31

	pshl4 r4 = r5, r6
	pshl4 r4 = r5, 0
	pshl4 r4 = r5, 8
	pshl4 r4 = r5, 31

	shl r4 = r5, r6

	popcnt r4 = r5

	shrp r4 = r5, r6, 0
	shrp r4 = r5, r6, 12
	shrp r4 = r5, r6, 63

	extr r4 = r5, 0, 16
	extr r4 = r5, 0, 63
	extr r4 = r5, 10, 40
	
	extr.u r4 = r5, 0, 16
	extr.u r4 = r5, 0, 63
	extr.u r4 = r5, 10, 40
	
	dep.z r4 = r5, 0, 16
	dep.z r4 = r5, 0, 63
	dep.z r4 = r5, 10, 40
	dep.z r4 = 0, 0, 16
	dep.z r4 = 127, 0, 63
	dep.z r4 = -128, 5, 50
	dep.z r4 = 0x55, 10, 40

	dep r4 = 0, r5, 0, 16
	dep r4 = -1, r5, 0, 63
	dep r4 = r5, r6, 10, 7

	movl r4 = 0
	movl r4 = 0xffffffffffffffff
	movl r4 = 0x1234567890abcdef

	break.i 0
	break.i 0x1fffff

	nop.i 0
	nop.i 0x1fffff

	chk.s.i r4, _start

	mov r4 = b0
	mov b0 = r4

	mov pr = r4, 0
	mov pr = r4, 0x1234
	mov pr = r4, 0x1ffff

	mov pr.rot = 0
// ??? This was originally 0x3ffffff, but that generates an assembler warning
// that the testsuite infrastructure isn't set up to ignore.
	mov pr.rot = 0x3ff0000
	mov pr.rot = -0x4000000

	zxt1 r4 = r5
	zxt2 r4 = r5
	zxt4 r4 = r5

	sxt1 r4 = r5
	sxt2 r4 = r5
	sxt4 r4 = r5

	czx1.l r4 = r5
	czx2.l r4 = r5
	czx1.r r4 = r5
	czx2.r r4 = r5

END
;

@ctype = ( "", ".unc", ".and", ".or", ".or.andcm", ".orcm",
	   ".andcm", ".and.orcm" );

$i = 0;
foreach $z ( ".z", ".nz" ) {
  foreach $c (@ctype) {
    print "\ttbit${z}${c} p2, p3 = r4, $i\n";
    ++$i;
  }
}
print "\n";

foreach $z ( ".z", ".nz" ) {
  foreach $c (@ctype) {
    print "\ttnat${z}${c} p2, p3 = r4\n";
  }
}
print "\n";


@mwh = ( "", ".sptk", ".dptk" );
@ih = ( "", ".imp" );

$LAB = 1;

foreach $b ("", ".ret") {
  foreach $w (@mwh) {
    foreach $i (@ih) {
      print "\tmov${b}${w}${i} b3 = r4, .L${LAB}\n";
    }
    print ".space 240\n";
    print ".L${LAB}:\n";
    ++$LAB;
  }
  print "\n";
}
