print ".text\n\t.type _start,@", "function\n_start:\n\n"; @ldhint = ( "", ".nt1", ".nta" ); @ldspec = ( "", ".s", ".a", ".sa", ".c.clr", ".c.nc" ); @sthint = ( "", ".nta" ); $i = 0; # Integer Load foreach $s ( "1", "2", "4", "8" ) { foreach $e (@ldspec, ".bias", ".acq", ".c.clr.acq") { foreach $l (@ldhint) { print "\tld${s}${e}${l} r4 = [r5]\n"; print "\tld${s}${e}${l} r4 = [r5], r6\n"; print "\tld${s}${e}${l} r4 = [r5], ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; } } # Integer Fill for $l (@ldhint) { print "\tld8.fill${l} r4 = [r5]\n"; print "\tld8.fill${l} r4 = [r5], r6\n"; print "\tld8.fill${l} r4 = [r5], ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; # Integer Store foreach $s ("1", "2", "4", "8", "1.rel", "2.rel", "4.rel", "8.rel", "8.spill") { for $l (@sthint) { print "\tst${s}${l} [r4] = r5\n"; print "\tst${s}${l} [r4] = r5, ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; } # Floating Point Load foreach $s ( "fs", "fd", "f8", "fe" ) { foreach $e (@ldspec) { foreach $l (@ldhint) { print "\tld${s}${e}${l} f4 = [r5]\n"; print "\tld${s}${e}${l} f4 = [r5], r6\n"; print "\tld${s}${e}${l} f4 = [r5], ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; } } # Floating Point Fill for $l (@ldhint) { print "\tldf.fill${l} f4 = [r5]\n"; print "\tldf.fill${l} f4 = [r5], r6\n"; print "\tldf.fill${l} f4 = [r5], ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; # Floating Point Store foreach $s ( "fs", "fd", "f8", "fe", "f.spill" ) { for $l (@sthint) { print "\tst${s}${l} [r4] = f5\n"; print "\tst${s}${l} [r4] = f5, ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; } # Floating Point Load Pair foreach $s ( "fps", "fpd", "fp8" ) { foreach $e (@ldspec) { foreach $l (@ldhint) { print "\tld${s}${e}${l} f4, f5 = [r5]\n"; print "\tld${s}${e}${l} f4, f5 = [r5], ", ($s eq "fps" ? 8 : 16), "\n"; } print "\n"; } } # Line Prefetch @lfhint = ( "", ".nt1", ".nt2", ".nta" ); foreach $e ( "", ".excl" ) { foreach $f ( "", ".fault" ) { foreach $h (@lfhint) { print "\tlfetch${f}${e}${h} [r4]\n"; print "\tlfetch${f}${e}${h} [r4], r5\n"; print "\tlfetch${f}${e}${h} [r4], ", $i - 256, "\n"; $i = ($i + 13) % 512; } print "\n"; } } # Compare and Exchange foreach $s ( "1", "2", "4", "8" ) { foreach $e ( ".acq", ".rel" ) { foreach $h (@ldhint) { print "\tcmpxchg${s}${e}${h} r4 = [r5], r6, ar.ccv\n"; } print "\n"; } } # Exchange foreach $s ( "1", "2", "4", "8" ) { foreach $h (@ldhint) { print "\txchg${s}${h} r4 = [r5], r6\n"; } print "\n"; } # Fetch and Add $i = 0; @inc3 = ( -16, -8, -4, -1, 1, 4, 8, 16 ); foreach $s ( "4.acq", "8.acq", "4.rel", "8.rel" ) { foreach $h (@ldhint) { print "\tfetchadd${s}${h} r4 = [r5], ", $inc3[$i], "\n"; $i = ($i + 1) % 8; } print "\n"; } # Get/Set FR foreach $e ( ".sig", ".exp", ".s", ".d" ) { print "\tsetf${e} f4 = r5\n"; } print "\n"; foreach $e ( ".sig", ".exp", ".s", ".d" ) { print "\tgetf${e} r4 = f5\n"; } print "\n"; # Speculation and Advanced Load Checkso print <