1 print ".text\n\t.type _start,@", "function\n_start:\n\n"; 2 3 @ldhint = ( "", ".nt1", ".nta" ); 4 @ldspec = ( "", ".s", ".a", ".sa", ".c.clr", ".c.nc" ); 5 @sthint = ( "", ".nta" ); 6 7 $i = 0; 8 9 # Integer Load 10 11 foreach $s ( "1", "2", "4", "8" ) { 12 foreach $e (@ldspec, ".bias", ".acq", ".c.clr.acq") { 13 foreach $l (@ldhint) { 14 print "\tld${s}${e}${l} r4 = [r5]\n"; 15 print "\tld${s}${e}${l} r4 = [r5], r6\n"; 16 print "\tld${s}${e}${l} r4 = [r5], ", $i - 256, "\n"; 17 $i = ($i + 13) % 512; 18 } 19 print "\n"; 20 } 21 } 22 23 # Integer Fill 24 25 for $l (@ldhint) { 26 print "\tld8.fill${l} r4 = [r5]\n"; 27 print "\tld8.fill${l} r4 = [r5], r6\n"; 28 print "\tld8.fill${l} r4 = [r5], ", $i - 256, "\n"; 29 $i = ($i + 13) % 512; 30 } 31 print "\n"; 32 33 # Integer Store 34 35 foreach $s ("1", "2", "4", "8", "1.rel", "2.rel", "4.rel", "8.rel", "8.spill") { 36 for $l (@sthint) { 37 print "\tst${s}${l} [r4] = r5\n"; 38 print "\tst${s}${l} [r4] = r5, ", $i - 256, "\n"; 39 $i = ($i + 13) % 512; 40 } 41 print "\n"; 42 } 43 44 # Floating Point Load 45 46 foreach $s ( "fs", "fd", "f8", "fe" ) { 47 foreach $e (@ldspec) { 48 foreach $l (@ldhint) { 49 print "\tld${s}${e}${l} f4 = [r5]\n"; 50 print "\tld${s}${e}${l} f4 = [r5], r6\n"; 51 print "\tld${s}${e}${l} f4 = [r5], ", $i - 256, "\n"; 52 $i = ($i + 13) % 512; 53 } 54 print "\n"; 55 } 56 } 57 58 # Floating Point Fill 59 60 for $l (@ldhint) { 61 print "\tldf.fill${l} f4 = [r5]\n"; 62 print "\tldf.fill${l} f4 = [r5], r6\n"; 63 print "\tldf.fill${l} f4 = [r5], ", $i - 256, "\n"; 64 $i = ($i + 13) % 512; 65 } 66 print "\n"; 67 68 # Floating Point Store 69 70 foreach $s ( "fs", "fd", "f8", "fe", "f.spill" ) { 71 for $l (@sthint) { 72 print "\tst${s}${l} [r4] = f5\n"; 73 print "\tst${s}${l} [r4] = f5, ", $i - 256, "\n"; 74 $i = ($i + 13) % 512; 75 } 76 print "\n"; 77 } 78 79 # Floating Point Load Pair 80 81 foreach $s ( "fps", "fpd", "fp8" ) { 82 foreach $e (@ldspec) { 83 foreach $l (@ldhint) { 84 print "\tld${s}${e}${l} f4, f5 = [r5]\n"; 85 print "\tld${s}${e}${l} f4, f5 = [r5], ", ($s eq "fps" ? 8 : 16), "\n"; 86 } 87 print "\n"; 88 } 89 } 90 91 # Line Prefetch 92 93 @lfhint = ( "", ".nt1", ".nt2", ".nta" ); 94 95 foreach $e ( "", ".excl" ) { 96 foreach $f ( "", ".fault" ) { 97 foreach $h (@lfhint) { 98 print "\tlfetch${f}${e}${h} [r4]\n"; 99 print "\tlfetch${f}${e}${h} [r4], r5\n"; 100 print "\tlfetch${f}${e}${h} [r4], ", $i - 256, "\n"; 101 $i = ($i + 13) % 512; 102 } 103 print "\n"; 104 } 105 } 106 107 # Compare and Exchange 108 109 foreach $s ( "1", "2", "4", "8" ) { 110 foreach $e ( ".acq", ".rel" ) { 111 foreach $h (@ldhint) { 112 print "\tcmpxchg${s}${e}${h} r4 = [r5], r6, ar.ccv\n"; 113 } 114 print "\n"; 115 } 116 } 117 118 # Exchange 119 120 foreach $s ( "1", "2", "4", "8" ) { 121 foreach $h (@ldhint) { 122 print "\txchg${s}${h} r4 = [r5], r6\n"; 123 } 124 print "\n"; 125 } 126 127 # Fetch and Add 128 129 $i = 0; 130 @inc3 = ( -16, -8, -4, -1, 1, 4, 8, 16 ); 131 foreach $s ( "4.acq", "8.acq", "4.rel", "8.rel" ) { 132 foreach $h (@ldhint) { 133 print "\tfetchadd${s}${h} r4 = [r5], ", $inc3[$i], "\n"; 134 $i = ($i + 1) % 8; 135 } 136 print "\n"; 137 } 138 139 # Get/Set FR 140 141 foreach $e ( ".sig", ".exp", ".s", ".d" ) { 142 print "\tsetf${e} f4 = r5\n"; 143 } 144 print "\n"; 145 146 foreach $e ( ".sig", ".exp", ".s", ".d" ) { 147 print "\tgetf${e} r4 = f5\n"; 148 } 149 print "\n"; 150 151 # Speculation and Advanced Load Checkso 152 153 print <<END 154 chk.s.m r4, _start 155 chk.s f4, _start 156 chk.a.nc r4, _start 157 chk.a.clr r4, _start 158 chk.a.nc f4, _start 159 chk.a.clr f4, _start 160 161 invala 162 fwb 163 mf 164 mf.a 165 srlz.d 166 srlz.i 167 sync.i 168 nop.m 0 169 nop.i 0 170 171 { .mii; alloc r4 = ar.pfs, 2, 10, 16, 16 } 172 173 { .mii; flushrs } 174 { .mii; loadrs } 175 176 invala.e r4 177 invala.e f4 178 179 fc r4 180 ptc.e r4 181 182 break.m 0 183 break.m 0x1ffff 184 185 nop.m 0 186 break.m 0x1ffff 187 188 probe.r r4 = r5, r6 189 probe.w r4 = r5, r6 190 191 probe.r r4 = r5, 0 192 probe.w r4 = r5, 1 193 194 probe.r.fault r3, 2 195 probe.w.fault r3, 3 196 probe.rw.fault r3, 0 197 198 itc.d r8 199 itc.i r9 200 201 sum 0x1234 202 rum 0x5aaaaa 203 ssm 0xffffff 204 rsm 0x400000 205 206 ptc.l r4, r5 207 ptc.g r4, r5 208 ptc.ga r4, r5 209 ptr.d r4, r5 210 ptr.i r4, r5 211 212 thash r4 = r5 213 ttag r4 = r5 214 tpa r4 = r5 215 tak r4 = r5 216 217 END 218 ; 219