diff options
| -rw-r--r-- | SConstruct | 1 | ||||
| -rw-r--r-- | include/pm_arch.h | 1084 | ||||
| -rw-r--r-- | pm_test/pm_task.c | 279 |
3 files changed, 1364 insertions, 0 deletions
| @@ -154,3 +154,4 @@ test.Program('runtests', Glob('tests/*.c')) | |||
| 154 | pmrt = rt.Clone() | 154 | pmrt = rt.Clone() |
| 155 | pmrt.Append(CCFLAGS = '-O2'); | 155 | pmrt.Append(CCFLAGS = '-O2'); |
| 156 | pmrt.Program('pm_try_read_ctrl_page', 'pm_test/pm_try_read_ctrl_page.c') | 156 | pmrt.Program('pm_try_read_ctrl_page', 'pm_test/pm_try_read_ctrl_page.c') |
| 157 | pmrt.Program('pm_task', ['pm_test/pm_task.c', 'pm_test/pm_common.c']) | ||
diff --git a/include/pm_arch.h b/include/pm_arch.h new file mode 100644 index 0000000..8db9935 --- /dev/null +++ b/include/pm_arch.h | |||
| @@ -0,0 +1,1084 @@ | |||
| 1 | /* | ||
| 2 | * preemption and migration overhead measurement | ||
| 3 | * | ||
| 4 | * platform dependent functions | ||
| 5 | */ | ||
| 6 | #ifndef PM_ARCH_H | ||
| 7 | #define PM_ARCH_H | ||
| 8 | |||
| 9 | #if defined(__i386__) || defined(__x86_64__) | ||
| 10 | #define RWCYCLE 4 | ||
| 11 | static inline void readwrite_one_thousand_ints(int *mem_ptr) | ||
| 12 | { | ||
| 13 | int i, dummy; | ||
| 14 | for (i=0; i<1024; i++) { | ||
| 15 | if((i%RWCYCLE) == (RWCYCLE - 1)) { | ||
| 16 | /* write */ | ||
| 17 | mem_ptr[i]++; | ||
| 18 | } else { | ||
| 19 | /* read */ | ||
| 20 | dummy = mem_ptr[i]; | ||
| 21 | } | ||
| 22 | } | ||
| 23 | } | ||
| 24 | |||
| 25 | static inline void read_mem(int *loc_ptr) | ||
| 26 | { | ||
| 27 | int dummy; | ||
| 28 | dummy = *loc_ptr; | ||
| 29 | } | ||
| 30 | |||
| 31 | static inline void write_mem(int *loc_ptr) | ||
| 32 | { | ||
| 33 | int dummy; | ||
| 34 | dummy = ++(*loc_ptr); | ||
| 35 | } | ||
| 36 | #endif /* !__i386__ && !__x86_64__ */ | ||
| 37 | |||
| 38 | #ifdef __sparc__ | ||
| 39 | static inline void read_mem(int *loc_ptr) | ||
| 40 | { | ||
| 41 | __asm__ __volatile__("ld [%0], %%g1" | ||
| 42 | : : "r"(loc_ptr) | ||
| 43 | : "g1", "cc", "memory"); | ||
| 44 | } | ||
| 45 | |||
| 46 | static inline void write_mem(int *loc_ptr) | ||
| 47 | { | ||
| 48 | __asm__ __volatile__("st %%g1, [%0]" | ||
| 49 | : : "r"(loc_ptr) | ||
| 50 | : "g1", "cc", "memory"); | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline void readwrite_one_thousand_ints(int *mem_ptr) | ||
| 54 | { | ||
| 55 | __asm__ __volatile__( | ||
| 56 | "ld [%0], %%g1\n" | ||
| 57 | "ld [%0+4], %%g1\n" | ||
| 58 | "ld [%0+8], %%g1\n" | ||
| 59 | "st %%g1, [%0+12]\n" | ||
| 60 | "ld [%0+16], %%g1\n" | ||
| 61 | "ld [%0+20], %%g1\n" | ||
| 62 | "ld [%0+24], %%g1\n" | ||
| 63 | "st %%g1, [%0+28]\n" | ||
| 64 | "ld [%0+32], %%g1\n" | ||
| 65 | "ld [%0+36], %%g1\n" | ||
| 66 | "ld [%0+40], %%g1\n" | ||
| 67 | "st %%g1, [%0+44]\n" | ||
| 68 | "ld [%0+48], %%g1\n" | ||
| 69 | "ld [%0+52], %%g1\n" | ||
| 70 | "ld [%0+56], %%g1\n" | ||
| 71 | "st %%g1, [%0+60]\n" | ||
| 72 | "ld [%0+64], %%g1\n" | ||
| 73 | "ld [%0+68], %%g1\n" | ||
| 74 | "ld [%0+72], %%g1\n" | ||
| 75 | "st %%g1, [%0+76]\n" | ||
| 76 | "ld [%0+80], %%g1\n" | ||
| 77 | "ld [%0+84], %%g1\n" | ||
| 78 | "ld [%0+88], %%g1\n" | ||
| 79 | "st %%g1, [%0+92]\n" | ||
| 80 | "ld [%0+96], %%g1\n" | ||
| 81 | "ld [%0+100], %%g1\n" | ||
| 82 | "ld [%0+104], %%g1\n" | ||
| 83 | "st %%g1, [%0+108]\n" | ||
| 84 | "ld [%0+112], %%g1\n" | ||
| 85 | "ld [%0+116], %%g1\n" | ||
| 86 | "ld [%0+120], %%g1\n" | ||
| 87 | "st %%g1, [%0+124]\n" | ||
| 88 | "ld [%0+128], %%g1\n" | ||
| 89 | "ld [%0+132], %%g1\n" | ||
| 90 | "ld [%0+136], %%g1\n" | ||
| 91 | "st %%g1, [%0+140]\n" | ||
| 92 | "ld [%0+144], %%g1\n" | ||
| 93 | "ld [%0+148], %%g1\n" | ||
| 94 | "ld [%0+152], %%g1\n" | ||
| 95 | "st %%g1, [%0+156]\n" | ||
| 96 | "ld [%0+160], %%g1\n" | ||
| 97 | "ld [%0+164], %%g1\n" | ||
| 98 | "ld [%0+168], %%g1\n" | ||
| 99 | "st %%g1, [%0+172]\n" | ||
| 100 | "ld [%0+176], %%g1\n" | ||
| 101 | "ld [%0+180], %%g1\n" | ||
| 102 | "ld [%0+184], %%g1\n" | ||
| 103 | "st %%g1, [%0+188]\n" | ||
| 104 | "ld [%0+192], %%g1\n" | ||
| 105 | "ld [%0+196], %%g1\n" | ||
| 106 | "ld [%0+200], %%g1\n" | ||
| 107 | "st %%g1, [%0+204]\n" | ||
| 108 | "ld [%0+208], %%g1\n" | ||
| 109 | "ld [%0+212], %%g1\n" | ||
| 110 | "ld [%0+216], %%g1\n" | ||
| 111 | "st %%g1, [%0+220]\n" | ||
| 112 | "ld [%0+224], %%g1\n" | ||
| 113 | "ld [%0+228], %%g1\n" | ||
| 114 | "ld [%0+232], %%g1\n" | ||
| 115 | "st %%g1, [%0+236]\n" | ||
| 116 | "ld [%0+240], %%g1\n" | ||
| 117 | "ld [%0+244], %%g1\n" | ||
| 118 | "ld [%0+248], %%g1\n" | ||
| 119 | "st %%g1, [%0+252]\n" | ||
| 120 | "ld [%0+256], %%g1\n" | ||
| 121 | "ld [%0+260], %%g1\n" | ||
| 122 | "ld [%0+264], %%g1\n" | ||
| 123 | "st %%g1, [%0+268]\n" | ||
| 124 | "ld [%0+272], %%g1\n" | ||
| 125 | "ld [%0+276], %%g1\n" | ||
| 126 | "ld [%0+280], %%g1\n" | ||
| 127 | "st %%g1, [%0+284]\n" | ||
| 128 | "ld [%0+288], %%g1\n" | ||
| 129 | "ld [%0+292], %%g1\n" | ||
| 130 | "ld [%0+296], %%g1\n" | ||
| 131 | "st %%g1, [%0+300]\n" | ||
| 132 | "ld [%0+304], %%g1\n" | ||
| 133 | "ld [%0+308], %%g1\n" | ||
| 134 | "ld [%0+312], %%g1\n" | ||
| 135 | "st %%g1, [%0+316]\n" | ||
| 136 | "ld [%0+320], %%g1\n" | ||
| 137 | "ld [%0+324], %%g1\n" | ||
| 138 | "ld [%0+328], %%g1\n" | ||
| 139 | "st %%g1, [%0+332]\n" | ||
| 140 | "ld [%0+336], %%g1\n" | ||
| 141 | "ld [%0+340], %%g1\n" | ||
| 142 | "ld [%0+344], %%g1\n" | ||
| 143 | "st %%g1, [%0+348]\n" | ||
| 144 | "ld [%0+352], %%g1\n" | ||
| 145 | "ld [%0+356], %%g1\n" | ||
| 146 | "ld [%0+360], %%g1\n" | ||
| 147 | "st %%g1, [%0+364]\n" | ||
| 148 | "ld [%0+368], %%g1\n" | ||
| 149 | "ld [%0+372], %%g1\n" | ||
| 150 | "ld [%0+376], %%g1\n" | ||
| 151 | "st %%g1, [%0+380]\n" | ||
| 152 | "ld [%0+384], %%g1\n" | ||
| 153 | "ld [%0+388], %%g1\n" | ||
| 154 | "ld [%0+392], %%g1\n" | ||
| 155 | "st %%g1, [%0+396]\n" | ||
| 156 | "ld [%0+400], %%g1\n" | ||
| 157 | "ld [%0+404], %%g1\n" | ||
| 158 | "ld [%0+408], %%g1\n" | ||
| 159 | "st %%g1, [%0+412]\n" | ||
| 160 | "ld [%0+416], %%g1\n" | ||
| 161 | "ld [%0+420], %%g1\n" | ||
| 162 | "ld [%0+424], %%g1\n" | ||
| 163 | "st %%g1, [%0+428]\n" | ||
| 164 | "ld [%0+432], %%g1\n" | ||
| 165 | "ld [%0+436], %%g1\n" | ||
| 166 | "ld [%0+440], %%g1\n" | ||
| 167 | "st %%g1, [%0+444]\n" | ||
| 168 | "ld [%0+448], %%g1\n" | ||
| 169 | "ld [%0+452], %%g1\n" | ||
| 170 | "ld [%0+456], %%g1\n" | ||
| 171 | "st %%g1, [%0+460]\n" | ||
| 172 | "ld [%0+464], %%g1\n" | ||
| 173 | "ld [%0+468], %%g1\n" | ||
| 174 | "ld [%0+472], %%g1\n" | ||
| 175 | "st %%g1, [%0+476]\n" | ||
| 176 | "ld [%0+480], %%g1\n" | ||
| 177 | "ld [%0+484], %%g1\n" | ||
| 178 | "ld [%0+488], %%g1\n" | ||
| 179 | "st %%g1, [%0+492]\n" | ||
| 180 | "ld [%0+496], %%g1\n" | ||
| 181 | "ld [%0+500], %%g1\n" | ||
| 182 | "ld [%0+504], %%g1\n" | ||
| 183 | "st %%g1, [%0+508]\n" | ||
| 184 | "ld [%0+512], %%g1\n" | ||
| 185 | "ld [%0+516], %%g1\n" | ||
| 186 | "ld [%0+520], %%g1\n" | ||
| 187 | "st %%g1, [%0+524]\n" | ||
| 188 | "ld [%0+528], %%g1\n" | ||
| 189 | "ld [%0+532], %%g1\n" | ||
| 190 | "ld [%0+536], %%g1\n" | ||
| 191 | "st %%g1, [%0+540]\n" | ||
| 192 | "ld [%0+544], %%g1\n" | ||
| 193 | "ld [%0+548], %%g1\n" | ||
| 194 | "ld [%0+552], %%g1\n" | ||
| 195 | "st %%g1, [%0+556]\n" | ||
| 196 | "ld [%0+560], %%g1\n" | ||
| 197 | "ld [%0+564], %%g1\n" | ||
| 198 | "ld [%0+568], %%g1\n" | ||
| 199 | "st %%g1, [%0+572]\n" | ||
| 200 | "ld [%0+576], %%g1\n" | ||
| 201 | "ld [%0+580], %%g1\n" | ||
| 202 | "ld [%0+584], %%g1\n" | ||
| 203 | "st %%g1, [%0+588]\n" | ||
| 204 | "ld [%0+592], %%g1\n" | ||
| 205 | "ld [%0+596], %%g1\n" | ||
| 206 | "ld [%0+600], %%g1\n" | ||
| 207 | "st %%g1, [%0+604]\n" | ||
| 208 | "ld [%0+608], %%g1\n" | ||
| 209 | "ld [%0+612], %%g1\n" | ||
| 210 | "ld [%0+616], %%g1\n" | ||
| 211 | "st %%g1, [%0+620]\n" | ||
| 212 | "ld [%0+624], %%g1\n" | ||
| 213 | "ld [%0+628], %%g1\n" | ||
| 214 | "ld [%0+632], %%g1\n" | ||
| 215 | "st %%g1, [%0+636]\n" | ||
| 216 | "ld [%0+640], %%g1\n" | ||
| 217 | "ld [%0+644], %%g1\n" | ||
| 218 | "ld [%0+648], %%g1\n" | ||
| 219 | "st %%g1, [%0+652]\n" | ||
| 220 | "ld [%0+656], %%g1\n" | ||
| 221 | "ld [%0+660], %%g1\n" | ||
| 222 | "ld [%0+664], %%g1\n" | ||
| 223 | "st %%g1, [%0+668]\n" | ||
| 224 | "ld [%0+672], %%g1\n" | ||
| 225 | "ld [%0+676], %%g1\n" | ||
| 226 | "ld [%0+680], %%g1\n" | ||
| 227 | "st %%g1, [%0+684]\n" | ||
| 228 | "ld [%0+688], %%g1\n" | ||
| 229 | "ld [%0+692], %%g1\n" | ||
| 230 | "ld [%0+696], %%g1\n" | ||
| 231 | "st %%g1, [%0+700]\n" | ||
| 232 | "ld [%0+704], %%g1\n" | ||
| 233 | "ld [%0+708], %%g1\n" | ||
| 234 | "ld [%0+712], %%g1\n" | ||
| 235 | "st %%g1, [%0+716]\n" | ||
| 236 | "ld [%0+720], %%g1\n" | ||
| 237 | "ld [%0+724], %%g1\n" | ||
| 238 | "ld [%0+728], %%g1\n" | ||
| 239 | "st %%g1, [%0+732]\n" | ||
| 240 | "ld [%0+736], %%g1\n" | ||
| 241 | "ld [%0+740], %%g1\n" | ||
| 242 | "ld [%0+744], %%g1\n" | ||
| 243 | "st %%g1, [%0+748]\n" | ||
| 244 | "ld [%0+752], %%g1\n" | ||
| 245 | "ld [%0+756], %%g1\n" | ||
| 246 | "ld [%0+760], %%g1\n" | ||
| 247 | "st %%g1, [%0+764]\n" | ||
| 248 | "ld [%0+768], %%g1\n" | ||
| 249 | "ld [%0+772], %%g1\n" | ||
| 250 | "ld [%0+776], %%g1\n" | ||
| 251 | "st %%g1, [%0+780]\n" | ||
| 252 | "ld [%0+784], %%g1\n" | ||
| 253 | "ld [%0+788], %%g1\n" | ||
| 254 | "ld [%0+792], %%g1\n" | ||
| 255 | "st %%g1, [%0+796]\n" | ||
| 256 | "ld [%0+800], %%g1\n" | ||
| 257 | "ld [%0+804], %%g1\n" | ||
| 258 | "ld [%0+808], %%g1\n" | ||
| 259 | "st %%g1, [%0+812]\n" | ||
| 260 | "ld [%0+816], %%g1\n" | ||
| 261 | "ld [%0+820], %%g1\n" | ||
| 262 | "ld [%0+824], %%g1\n" | ||
| 263 | "st %%g1, [%0+828]\n" | ||
| 264 | "ld [%0+832], %%g1\n" | ||
| 265 | "ld [%0+836], %%g1\n" | ||
| 266 | "ld [%0+840], %%g1\n" | ||
| 267 | "st %%g1, [%0+844]\n" | ||
| 268 | "ld [%0+848], %%g1\n" | ||
| 269 | "ld [%0+852], %%g1\n" | ||
| 270 | "ld [%0+856], %%g1\n" | ||
| 271 | "st %%g1, [%0+860]\n" | ||
| 272 | "ld [%0+864], %%g1\n" | ||
| 273 | "ld [%0+868], %%g1\n" | ||
| 274 | "ld [%0+872], %%g1\n" | ||
| 275 | "st %%g1, [%0+876]\n" | ||
| 276 | "ld [%0+880], %%g1\n" | ||
| 277 | "ld [%0+884], %%g1\n" | ||
| 278 | "ld [%0+888], %%g1\n" | ||
| 279 | "st %%g1, [%0+892]\n" | ||
| 280 | "ld [%0+896], %%g1\n" | ||
| 281 | "ld [%0+900], %%g1\n" | ||
| 282 | "ld [%0+904], %%g1\n" | ||
| 283 | "st %%g1, [%0+908]\n" | ||
| 284 | "ld [%0+912], %%g1\n" | ||
| 285 | "ld [%0+916], %%g1\n" | ||
| 286 | "ld [%0+920], %%g1\n" | ||
| 287 | "st %%g1, [%0+924]\n" | ||
| 288 | "ld [%0+928], %%g1\n" | ||
| 289 | "ld [%0+932], %%g1\n" | ||
| 290 | "ld [%0+936], %%g1\n" | ||
| 291 | "st %%g1, [%0+940]\n" | ||
| 292 | "ld [%0+944], %%g1\n" | ||
| 293 | "ld [%0+948], %%g1\n" | ||
| 294 | "ld [%0+952], %%g1\n" | ||
| 295 | "st %%g1, [%0+956]\n" | ||
| 296 | "ld [%0+960], %%g1\n" | ||
| 297 | "ld [%0+964], %%g1\n" | ||
| 298 | "ld [%0+968], %%g1\n" | ||
| 299 | "st %%g1, [%0+972]\n" | ||
| 300 | "ld [%0+976], %%g1\n" | ||
| 301 | "ld [%0+980], %%g1\n" | ||
| 302 | "ld [%0+984], %%g1\n" | ||
| 303 | "st %%g1, [%0+988]\n" | ||
| 304 | "ld [%0+992], %%g1\n" | ||
| 305 | "ld [%0+996], %%g1\n" | ||
| 306 | "ld [%0+1000], %%g1\n" | ||
| 307 | "st %%g1, [%0+1004]\n" | ||
| 308 | "ld [%0+1008], %%g1\n" | ||
| 309 | "ld [%0+1012], %%g1\n" | ||
| 310 | "ld [%0+1016], %%g1\n" | ||
| 311 | "st %%g1, [%0+1020]\n" | ||
| 312 | "ld [%0+1024], %%g1\n" | ||
| 313 | "ld [%0+1028], %%g1\n" | ||
| 314 | "ld [%0+1032], %%g1\n" | ||
| 315 | "st %%g1, [%0+1036]\n" | ||
| 316 | "ld [%0+1040], %%g1\n" | ||
| 317 | "ld [%0+1044], %%g1\n" | ||
| 318 | "ld [%0+1048], %%g1\n" | ||
| 319 | "st %%g1, [%0+1052]\n" | ||
| 320 | "ld [%0+1056], %%g1\n" | ||
| 321 | "ld [%0+1060], %%g1\n" | ||
| 322 | "ld [%0+1064], %%g1\n" | ||
| 323 | "st %%g1, [%0+1068]\n" | ||
| 324 | "ld [%0+1072], %%g1\n" | ||
| 325 | "ld [%0+1076], %%g1\n" | ||
| 326 | "ld [%0+1080], %%g1\n" | ||
| 327 | "st %%g1, [%0+1084]\n" | ||
| 328 | "ld [%0+1088], %%g1\n" | ||
| 329 | "ld [%0+1092], %%g1\n" | ||
| 330 | "ld [%0+1096], %%g1\n" | ||
| 331 | "st %%g1, [%0+1100]\n" | ||
| 332 | "ld [%0+1104], %%g1\n" | ||
| 333 | "ld [%0+1108], %%g1\n" | ||
| 334 | "ld [%0+1112], %%g1\n" | ||
| 335 | "st %%g1, [%0+1116]\n" | ||
| 336 | "ld [%0+1120], %%g1\n" | ||
| 337 | "ld [%0+1124], %%g1\n" | ||
| 338 | "ld [%0+1128], %%g1\n" | ||
| 339 | "st %%g1, [%0+1132]\n" | ||
| 340 | "ld [%0+1136], %%g1\n" | ||
| 341 | "ld [%0+1140], %%g1\n" | ||
| 342 | "ld [%0+1144], %%g1\n" | ||
| 343 | "st %%g1, [%0+1148]\n" | ||
| 344 | "ld [%0+1152], %%g1\n" | ||
| 345 | "ld [%0+1156], %%g1\n" | ||
| 346 | "ld [%0+1160], %%g1\n" | ||
| 347 | "st %%g1, [%0+1164]\n" | ||
| 348 | "ld [%0+1168], %%g1\n" | ||
| 349 | "ld [%0+1172], %%g1\n" | ||
| 350 | "ld [%0+1176], %%g1\n" | ||
| 351 | "st %%g1, [%0+1180]\n" | ||
| 352 | "ld [%0+1184], %%g1\n" | ||
| 353 | "ld [%0+1188], %%g1\n" | ||
| 354 | "ld [%0+1192], %%g1\n" | ||
| 355 | "st %%g1, [%0+1196]\n" | ||
| 356 | "ld [%0+1200], %%g1\n" | ||
| 357 | "ld [%0+1204], %%g1\n" | ||
| 358 | "ld [%0+1208], %%g1\n" | ||
| 359 | "st %%g1, [%0+1212]\n" | ||
| 360 | "ld [%0+1216], %%g1\n" | ||
| 361 | "ld [%0+1220], %%g1\n" | ||
| 362 | "ld [%0+1224], %%g1\n" | ||
| 363 | "st %%g1, [%0+1228]\n" | ||
| 364 | "ld [%0+1232], %%g1\n" | ||
| 365 | "ld [%0+1236], %%g1\n" | ||
| 366 | "ld [%0+1240], %%g1\n" | ||
| 367 | "st %%g1, [%0+1244]\n" | ||
| 368 | "ld [%0+1248], %%g1\n" | ||
| 369 | "ld [%0+1252], %%g1\n" | ||
| 370 | "ld [%0+1256], %%g1\n" | ||
| 371 | "st %%g1, [%0+1260]\n" | ||
| 372 | "ld [%0+1264], %%g1\n" | ||
| 373 | "ld [%0+1268], %%g1\n" | ||
| 374 | "ld [%0+1272], %%g1\n" | ||
| 375 | "st %%g1, [%0+1276]\n" | ||
| 376 | "ld [%0+1280], %%g1\n" | ||
| 377 | "ld [%0+1284], %%g1\n" | ||
| 378 | "ld [%0+1288], %%g1\n" | ||
| 379 | "st %%g1, [%0+1292]\n" | ||
| 380 | "ld [%0+1296], %%g1\n" | ||
| 381 | "ld [%0+1300], %%g1\n" | ||
| 382 | "ld [%0+1304], %%g1\n" | ||
| 383 | "st %%g1, [%0+1308]\n" | ||
| 384 | "ld [%0+1312], %%g1\n" | ||
| 385 | "ld [%0+1316], %%g1\n" | ||
| 386 | "ld [%0+1320], %%g1\n" | ||
| 387 | "st %%g1, [%0+1324]\n" | ||
| 388 | "ld [%0+1328], %%g1\n" | ||
| 389 | "ld [%0+1332], %%g1\n" | ||
| 390 | "ld [%0+1336], %%g1\n" | ||
| 391 | "st %%g1, [%0+1340]\n" | ||
| 392 | "ld [%0+1344], %%g1\n" | ||
| 393 | "ld [%0+1348], %%g1\n" | ||
| 394 | "ld [%0+1352], %%g1\n" | ||
| 395 | "st %%g1, [%0+1356]\n" | ||
| 396 | "ld [%0+1360], %%g1\n" | ||
| 397 | "ld [%0+1364], %%g1\n" | ||
| 398 | "ld [%0+1368], %%g1\n" | ||
| 399 | "st %%g1, [%0+1372]\n" | ||
| 400 | "ld [%0+1376], %%g1\n" | ||
| 401 | "ld [%0+1380], %%g1\n" | ||
| 402 | "ld [%0+1384], %%g1\n" | ||
| 403 | "st %%g1, [%0+1388]\n" | ||
| 404 | "ld [%0+1392], %%g1\n" | ||
| 405 | "ld [%0+1396], %%g1\n" | ||
| 406 | "ld [%0+1400], %%g1\n" | ||
| 407 | "st %%g1, [%0+1404]\n" | ||
| 408 | "ld [%0+1408], %%g1\n" | ||
| 409 | "ld [%0+1412], %%g1\n" | ||
| 410 | "ld [%0+1416], %%g1\n" | ||
| 411 | "st %%g1, [%0+1420]\n" | ||
| 412 | "ld [%0+1424], %%g1\n" | ||
| 413 | "ld [%0+1428], %%g1\n" | ||
| 414 | "ld [%0+1432], %%g1\n" | ||
| 415 | "st %%g1, [%0+1436]\n" | ||
| 416 | "ld [%0+1440], %%g1\n" | ||
| 417 | "ld [%0+1444], %%g1\n" | ||
| 418 | "ld [%0+1448], %%g1\n" | ||
| 419 | "st %%g1, [%0+1452]\n" | ||
| 420 | "ld [%0+1456], %%g1\n" | ||
| 421 | "ld [%0+1460], %%g1\n" | ||
| 422 | "ld [%0+1464], %%g1\n" | ||
| 423 | "st %%g1, [%0+1468]\n" | ||
| 424 | "ld [%0+1472], %%g1\n" | ||
| 425 | "ld [%0+1476], %%g1\n" | ||
| 426 | "ld [%0+1480], %%g1\n" | ||
| 427 | "st %%g1, [%0+1484]\n" | ||
| 428 | "ld [%0+1488], %%g1\n" | ||
| 429 | "ld [%0+1492], %%g1\n" | ||
| 430 | "ld [%0+1496], %%g1\n" | ||
| 431 | "st %%g1, [%0+1500]\n" | ||
| 432 | "ld [%0+1504], %%g1\n" | ||
| 433 | "ld [%0+1508], %%g1\n" | ||
| 434 | "ld [%0+1512], %%g1\n" | ||
| 435 | "st %%g1, [%0+1516]\n" | ||
| 436 | "ld [%0+1520], %%g1\n" | ||
| 437 | "ld [%0+1524], %%g1\n" | ||
| 438 | "ld [%0+1528], %%g1\n" | ||
| 439 | "st %%g1, [%0+1532]\n" | ||
| 440 | "ld [%0+1536], %%g1\n" | ||
| 441 | "ld [%0+1540], %%g1\n" | ||
| 442 | "ld [%0+1544], %%g1\n" | ||
| 443 | "st %%g1, [%0+1548]\n" | ||
| 444 | "ld [%0+1552], %%g1\n" | ||
| 445 | "ld [%0+1556], %%g1\n" | ||
| 446 | "ld [%0+1560], %%g1\n" | ||
| 447 | "st %%g1, [%0+1564]\n" | ||
| 448 | "ld [%0+1568], %%g1\n" | ||
| 449 | "ld [%0+1572], %%g1\n" | ||
| 450 | "ld [%0+1576], %%g1\n" | ||
| 451 | "st %%g1, [%0+1580]\n" | ||
| 452 | "ld [%0+1584], %%g1\n" | ||
| 453 | "ld [%0+1588], %%g1\n" | ||
| 454 | "ld [%0+1592], %%g1\n" | ||
| 455 | "st %%g1, [%0+1596]\n" | ||
| 456 | "ld [%0+1600], %%g1\n" | ||
| 457 | "ld [%0+1604], %%g1\n" | ||
| 458 | "ld [%0+1608], %%g1\n" | ||
| 459 | "st %%g1, [%0+1612]\n" | ||
| 460 | "ld [%0+1616], %%g1\n" | ||
| 461 | "ld [%0+1620], %%g1\n" | ||
| 462 | "ld [%0+1624], %%g1\n" | ||
| 463 | "st %%g1, [%0+1628]\n" | ||
| 464 | "ld [%0+1632], %%g1\n" | ||
| 465 | "ld [%0+1636], %%g1\n" | ||
| 466 | "ld [%0+1640], %%g1\n" | ||
| 467 | "st %%g1, [%0+1644]\n" | ||
| 468 | "ld [%0+1648], %%g1\n" | ||
| 469 | "ld [%0+1652], %%g1\n" | ||
| 470 | "ld [%0+1656], %%g1\n" | ||
| 471 | "st %%g1, [%0+1660]\n" | ||
| 472 | "ld [%0+1664], %%g1\n" | ||
| 473 | "ld [%0+1668], %%g1\n" | ||
| 474 | "ld [%0+1672], %%g1\n" | ||
| 475 | "st %%g1, [%0+1676]\n" | ||
| 476 | "ld [%0+1680], %%g1\n" | ||
| 477 | "ld [%0+1684], %%g1\n" | ||
| 478 | "ld [%0+1688], %%g1\n" | ||
| 479 | "st %%g1, [%0+1692]\n" | ||
| 480 | "ld [%0+1696], %%g1\n" | ||
| 481 | "ld [%0+1700], %%g1\n" | ||
| 482 | "ld [%0+1704], %%g1\n" | ||
| 483 | "st %%g1, [%0+1708]\n" | ||
| 484 | "ld [%0+1712], %%g1\n" | ||
| 485 | "ld [%0+1716], %%g1\n" | ||
| 486 | "ld [%0+1720], %%g1\n" | ||
| 487 | "st %%g1, [%0+1724]\n" | ||
| 488 | "ld [%0+1728], %%g1\n" | ||
| 489 | "ld [%0+1732], %%g1\n" | ||
| 490 | "ld [%0+1736], %%g1\n" | ||
| 491 | "st %%g1, [%0+1740]\n" | ||
| 492 | "ld [%0+1744], %%g1\n" | ||
| 493 | "ld [%0+1748], %%g1\n" | ||
| 494 | "ld [%0+1752], %%g1\n" | ||
| 495 | "st %%g1, [%0+1756]\n" | ||
| 496 | "ld [%0+1760], %%g1\n" | ||
| 497 | "ld [%0+1764], %%g1\n" | ||
| 498 | "ld [%0+1768], %%g1\n" | ||
| 499 | "st %%g1, [%0+1772]\n" | ||
| 500 | "ld [%0+1776], %%g1\n" | ||
| 501 | "ld [%0+1780], %%g1\n" | ||
| 502 | "ld [%0+1784], %%g1\n" | ||
| 503 | "st %%g1, [%0+1788]\n" | ||
| 504 | "ld [%0+1792], %%g1\n" | ||
| 505 | "ld [%0+1796], %%g1\n" | ||
| 506 | "ld [%0+1800], %%g1\n" | ||
| 507 | "st %%g1, [%0+1804]\n" | ||
| 508 | "ld [%0+1808], %%g1\n" | ||
| 509 | "ld [%0+1812], %%g1\n" | ||
| 510 | "ld [%0+1816], %%g1\n" | ||
| 511 | "st %%g1, [%0+1820]\n" | ||
| 512 | "ld [%0+1824], %%g1\n" | ||
| 513 | "ld [%0+1828], %%g1\n" | ||
| 514 | "ld [%0+1832], %%g1\n" | ||
| 515 | "st %%g1, [%0+1836]\n" | ||
| 516 | "ld [%0+1840], %%g1\n" | ||
| 517 | "ld [%0+1844], %%g1\n" | ||
| 518 | "ld [%0+1848], %%g1\n" | ||
| 519 | "st %%g1, [%0+1852]\n" | ||
| 520 | "ld [%0+1856], %%g1\n" | ||
| 521 | "ld [%0+1860], %%g1\n" | ||
| 522 | "ld [%0+1864], %%g1\n" | ||
| 523 | "st %%g1, [%0+1868]\n" | ||
| 524 | "ld [%0+1872], %%g1\n" | ||
| 525 | "ld [%0+1876], %%g1\n" | ||
| 526 | "ld [%0+1880], %%g1\n" | ||
| 527 | "st %%g1, [%0+1884]\n" | ||
| 528 | "ld [%0+1888], %%g1\n" | ||
| 529 | "ld [%0+1892], %%g1\n" | ||
| 530 | "ld [%0+1896], %%g1\n" | ||
| 531 | "st %%g1, [%0+1900]\n" | ||
| 532 | "ld [%0+1904], %%g1\n" | ||
| 533 | "ld [%0+1908], %%g1\n" | ||
| 534 | "ld [%0+1912], %%g1\n" | ||
| 535 | "st %%g1, [%0+1916]\n" | ||
| 536 | "ld [%0+1920], %%g1\n" | ||
| 537 | "ld [%0+1924], %%g1\n" | ||
| 538 | "ld [%0+1928], %%g1\n" | ||
| 539 | "st %%g1, [%0+1932]\n" | ||
| 540 | "ld [%0+1936], %%g1\n" | ||
| 541 | "ld [%0+1940], %%g1\n" | ||
| 542 | "ld [%0+1944], %%g1\n" | ||
| 543 | "st %%g1, [%0+1948]\n" | ||
| 544 | "ld [%0+1952], %%g1\n" | ||
| 545 | "ld [%0+1956], %%g1\n" | ||
| 546 | "ld [%0+1960], %%g1\n" | ||
| 547 | "st %%g1, [%0+1964]\n" | ||
| 548 | "ld [%0+1968], %%g1\n" | ||
| 549 | "ld [%0+1972], %%g1\n" | ||
| 550 | "ld [%0+1976], %%g1\n" | ||
| 551 | "st %%g1, [%0+1980]\n" | ||
| 552 | "ld [%0+1984], %%g1\n" | ||
| 553 | "ld [%0+1988], %%g1\n" | ||
| 554 | "ld [%0+1992], %%g1\n" | ||
| 555 | "st %%g1, [%0+1996]\n" | ||
| 556 | "ld [%0+2000], %%g1\n" | ||
| 557 | "ld [%0+2004], %%g1\n" | ||
| 558 | "ld [%0+2008], %%g1\n" | ||
| 559 | "st %%g1, [%0+2012]\n" | ||
| 560 | "ld [%0+2016], %%g1\n" | ||
| 561 | "ld [%0+2020], %%g1\n" | ||
| 562 | "ld [%0+2024], %%g1\n" | ||
| 563 | "st %%g1, [%0+2028]\n" | ||
| 564 | "ld [%0+2032], %%g1\n" | ||
| 565 | "ld [%0+2036], %%g1\n" | ||
| 566 | "ld [%0+2040], %%g1\n" | ||
| 567 | "st %%g1, [%0+2044]\n" | ||
| 568 | "ld [%0+2048], %%g1\n" | ||
| 569 | "ld [%0+2052], %%g1\n" | ||
| 570 | "ld [%0+2056], %%g1\n" | ||
| 571 | "st %%g1, [%0+2060]\n" | ||
| 572 | "ld [%0+2064], %%g1\n" | ||
| 573 | "ld [%0+2068], %%g1\n" | ||
| 574 | "ld [%0+2072], %%g1\n" | ||
| 575 | "st %%g1, [%0+2076]\n" | ||
| 576 | "ld [%0+2080], %%g1\n" | ||
| 577 | "ld [%0+2084], %%g1\n" | ||
| 578 | "ld [%0+2088], %%g1\n" | ||
| 579 | "st %%g1, [%0+2092]\n" | ||
| 580 | "ld [%0+2096], %%g1\n" | ||
| 581 | "ld [%0+2100], %%g1\n" | ||
| 582 | "ld [%0+2104], %%g1\n" | ||
| 583 | "st %%g1, [%0+2108]\n" | ||
| 584 | "ld [%0+2112], %%g1\n" | ||
| 585 | "ld [%0+2116], %%g1\n" | ||
| 586 | "ld [%0+2120], %%g1\n" | ||
| 587 | "st %%g1, [%0+2124]\n" | ||
| 588 | "ld [%0+2128], %%g1\n" | ||
| 589 | "ld [%0+2132], %%g1\n" | ||
| 590 | "ld [%0+2136], %%g1\n" | ||
| 591 | "st %%g1, [%0+2140]\n" | ||
| 592 | "ld [%0+2144], %%g1\n" | ||
| 593 | "ld [%0+2148], %%g1\n" | ||
| 594 | "ld [%0+2152], %%g1\n" | ||
| 595 | "st %%g1, [%0+2156]\n" | ||
| 596 | "ld [%0+2160], %%g1\n" | ||
| 597 | "ld [%0+2164], %%g1\n" | ||
| 598 | "ld [%0+2168], %%g1\n" | ||
| 599 | "st %%g1, [%0+2172]\n" | ||
| 600 | "ld [%0+2176], %%g1\n" | ||
| 601 | "ld [%0+2180], %%g1\n" | ||
| 602 | "ld [%0+2184], %%g1\n" | ||
| 603 | "st %%g1, [%0+2188]\n" | ||
| 604 | "ld [%0+2192], %%g1\n" | ||
| 605 | "ld [%0+2196], %%g1\n" | ||
| 606 | "ld [%0+2200], %%g1\n" | ||
| 607 | "st %%g1, [%0+2204]\n" | ||
| 608 | "ld [%0+2208], %%g1\n" | ||
| 609 | "ld [%0+2212], %%g1\n" | ||
| 610 | "ld [%0+2216], %%g1\n" | ||
| 611 | "st %%g1, [%0+2220]\n" | ||
| 612 | "ld [%0+2224], %%g1\n" | ||
| 613 | "ld [%0+2228], %%g1\n" | ||
| 614 | "ld [%0+2232], %%g1\n" | ||
| 615 | "st %%g1, [%0+2236]\n" | ||
| 616 | "ld [%0+2240], %%g1\n" | ||
| 617 | "ld [%0+2244], %%g1\n" | ||
| 618 | "ld [%0+2248], %%g1\n" | ||
| 619 | "st %%g1, [%0+2252]\n" | ||
| 620 | "ld [%0+2256], %%g1\n" | ||
| 621 | "ld [%0+2260], %%g1\n" | ||
| 622 | "ld [%0+2264], %%g1\n" | ||
| 623 | "st %%g1, [%0+2268]\n" | ||
| 624 | "ld [%0+2272], %%g1\n" | ||
| 625 | "ld [%0+2276], %%g1\n" | ||
| 626 | "ld [%0+2280], %%g1\n" | ||
| 627 | "st %%g1, [%0+2284]\n" | ||
| 628 | "ld [%0+2288], %%g1\n" | ||
| 629 | "ld [%0+2292], %%g1\n" | ||
| 630 | "ld [%0+2296], %%g1\n" | ||
| 631 | "st %%g1, [%0+2300]\n" | ||
| 632 | "ld [%0+2304], %%g1\n" | ||
| 633 | "ld [%0+2308], %%g1\n" | ||
| 634 | "ld [%0+2312], %%g1\n" | ||
| 635 | "st %%g1, [%0+2316]\n" | ||
| 636 | "ld [%0+2320], %%g1\n" | ||
| 637 | "ld [%0+2324], %%g1\n" | ||
| 638 | "ld [%0+2328], %%g1\n" | ||
| 639 | "st %%g1, [%0+2332]\n" | ||
| 640 | "ld [%0+2336], %%g1\n" | ||
| 641 | "ld [%0+2340], %%g1\n" | ||
| 642 | "ld [%0+2344], %%g1\n" | ||
| 643 | "st %%g1, [%0+2348]\n" | ||
| 644 | "ld [%0+2352], %%g1\n" | ||
| 645 | "ld [%0+2356], %%g1\n" | ||
| 646 | "ld [%0+2360], %%g1\n" | ||
| 647 | "st %%g1, [%0+2364]\n" | ||
| 648 | "ld [%0+2368], %%g1\n" | ||
| 649 | "ld [%0+2372], %%g1\n" | ||
| 650 | "ld [%0+2376], %%g1\n" | ||
| 651 | "st %%g1, [%0+2380]\n" | ||
| 652 | "ld [%0+2384], %%g1\n" | ||
| 653 | "ld [%0+2388], %%g1\n" | ||
| 654 | "ld [%0+2392], %%g1\n" | ||
| 655 | "st %%g1, [%0+2396]\n" | ||
| 656 | "ld [%0+2400], %%g1\n" | ||
| 657 | "ld [%0+2404], %%g1\n" | ||
| 658 | "ld [%0+2408], %%g1\n" | ||
| 659 | "st %%g1, [%0+2412]\n" | ||
| 660 | "ld [%0+2416], %%g1\n" | ||
| 661 | "ld [%0+2420], %%g1\n" | ||
| 662 | "ld [%0+2424], %%g1\n" | ||
| 663 | "st %%g1, [%0+2428]\n" | ||
| 664 | "ld [%0+2432], %%g1\n" | ||
| 665 | "ld [%0+2436], %%g1\n" | ||
| 666 | "ld [%0+2440], %%g1\n" | ||
| 667 | "st %%g1, [%0+2444]\n" | ||
| 668 | "ld [%0+2448], %%g1\n" | ||
| 669 | "ld [%0+2452], %%g1\n" | ||
| 670 | "ld [%0+2456], %%g1\n" | ||
| 671 | "st %%g1, [%0+2460]\n" | ||
| 672 | "ld [%0+2464], %%g1\n" | ||
| 673 | "ld [%0+2468], %%g1\n" | ||
| 674 | "ld [%0+2472], %%g1\n" | ||
| 675 | "st %%g1, [%0+2476]\n" | ||
| 676 | "ld [%0+2480], %%g1\n" | ||
| 677 | "ld [%0+2484], %%g1\n" | ||
| 678 | "ld [%0+2488], %%g1\n" | ||
| 679 | "st %%g1, [%0+2492]\n" | ||
| 680 | "ld [%0+2496], %%g1\n" | ||
| 681 | "ld [%0+2500], %%g1\n" | ||
| 682 | "ld [%0+2504], %%g1\n" | ||
| 683 | "st %%g1, [%0+2508]\n" | ||
| 684 | "ld [%0+2512], %%g1\n" | ||
| 685 | "ld [%0+2516], %%g1\n" | ||
| 686 | "ld [%0+2520], %%g1\n" | ||
| 687 | "st %%g1, [%0+2524]\n" | ||
| 688 | "ld [%0+2528], %%g1\n" | ||
| 689 | "ld [%0+2532], %%g1\n" | ||
| 690 | "ld [%0+2536], %%g1\n" | ||
| 691 | "st %%g1, [%0+2540]\n" | ||
| 692 | "ld [%0+2544], %%g1\n" | ||
| 693 | "ld [%0+2548], %%g1\n" | ||
| 694 | "ld [%0+2552], %%g1\n" | ||
| 695 | "st %%g1, [%0+2556]\n" | ||
| 696 | "ld [%0+2560], %%g1\n" | ||
| 697 | "ld [%0+2564], %%g1\n" | ||
| 698 | "ld [%0+2568], %%g1\n" | ||
| 699 | "st %%g1, [%0+2572]\n" | ||
| 700 | "ld [%0+2576], %%g1\n" | ||
| 701 | "ld [%0+2580], %%g1\n" | ||
| 702 | "ld [%0+2584], %%g1\n" | ||
| 703 | "st %%g1, [%0+2588]\n" | ||
| 704 | "ld [%0+2592], %%g1\n" | ||
| 705 | "ld [%0+2596], %%g1\n" | ||
| 706 | "ld [%0+2600], %%g1\n" | ||
| 707 | "st %%g1, [%0+2604]\n" | ||
| 708 | "ld [%0+2608], %%g1\n" | ||
| 709 | "ld [%0+2612], %%g1\n" | ||
| 710 | "ld [%0+2616], %%g1\n" | ||
| 711 | "st %%g1, [%0+2620]\n" | ||
| 712 | "ld [%0+2624], %%g1\n" | ||
| 713 | "ld [%0+2628], %%g1\n" | ||
| 714 | "ld [%0+2632], %%g1\n" | ||
| 715 | "st %%g1, [%0+2636]\n" | ||
| 716 | "ld [%0+2640], %%g1\n" | ||
| 717 | "ld [%0+2644], %%g1\n" | ||
| 718 | "ld [%0+2648], %%g1\n" | ||
| 719 | "st %%g1, [%0+2652]\n" | ||
| 720 | "ld [%0+2656], %%g1\n" | ||
| 721 | "ld [%0+2660], %%g1\n" | ||
| 722 | "ld [%0+2664], %%g1\n" | ||
| 723 | "st %%g1, [%0+2668]\n" | ||
| 724 | "ld [%0+2672], %%g1\n" | ||
| 725 | "ld [%0+2676], %%g1\n" | ||
| 726 | "ld [%0+2680], %%g1\n" | ||
| 727 | "st %%g1, [%0+2684]\n" | ||
| 728 | "ld [%0+2688], %%g1\n" | ||
| 729 | "ld [%0+2692], %%g1\n" | ||
| 730 | "ld [%0+2696], %%g1\n" | ||
| 731 | "st %%g1, [%0+2700]\n" | ||
| 732 | "ld [%0+2704], %%g1\n" | ||
| 733 | "ld [%0+2708], %%g1\n" | ||
| 734 | "ld [%0+2712], %%g1\n" | ||
| 735 | "st %%g1, [%0+2716]\n" | ||
| 736 | "ld [%0+2720], %%g1\n" | ||
| 737 | "ld [%0+2724], %%g1\n" | ||
| 738 | "ld [%0+2728], %%g1\n" | ||
| 739 | "st %%g1, [%0+2732]\n" | ||
| 740 | "ld [%0+2736], %%g1\n" | ||
| 741 | "ld [%0+2740], %%g1\n" | ||
| 742 | "ld [%0+2744], %%g1\n" | ||
| 743 | "st %%g1, [%0+2748]\n" | ||
| 744 | "ld [%0+2752], %%g1\n" | ||
| 745 | "ld [%0+2756], %%g1\n" | ||
| 746 | "ld [%0+2760], %%g1\n" | ||
| 747 | "st %%g1, [%0+2764]\n" | ||
| 748 | "ld [%0+2768], %%g1\n" | ||
| 749 | "ld [%0+2772], %%g1\n" | ||
| 750 | "ld [%0+2776], %%g1\n" | ||
| 751 | "st %%g1, [%0+2780]\n" | ||
| 752 | "ld [%0+2784], %%g1\n" | ||
| 753 | "ld [%0+2788], %%g1\n" | ||
| 754 | "ld [%0+2792], %%g1\n" | ||
| 755 | "st %%g1, [%0+2796]\n" | ||
| 756 | "ld [%0+2800], %%g1\n" | ||
| 757 | "ld [%0+2804], %%g1\n" | ||
| 758 | "ld [%0+2808], %%g1\n" | ||
| 759 | "st %%g1, [%0+2812]\n" | ||
| 760 | "ld [%0+2816], %%g1\n" | ||
| 761 | "ld [%0+2820], %%g1\n" | ||
| 762 | "ld [%0+2824], %%g1\n" | ||
| 763 | "st %%g1, [%0+2828]\n" | ||
| 764 | "ld [%0+2832], %%g1\n" | ||
| 765 | "ld [%0+2836], %%g1\n" | ||
| 766 | "ld [%0+2840], %%g1\n" | ||
| 767 | "st %%g1, [%0+2844]\n" | ||
| 768 | "ld [%0+2848], %%g1\n" | ||
| 769 | "ld [%0+2852], %%g1\n" | ||
| 770 | "ld [%0+2856], %%g1\n" | ||
| 771 | "st %%g1, [%0+2860]\n" | ||
| 772 | "ld [%0+2864], %%g1\n" | ||
| 773 | "ld [%0+2868], %%g1\n" | ||
| 774 | "ld [%0+2872], %%g1\n" | ||
| 775 | "st %%g1, [%0+2876]\n" | ||
| 776 | "ld [%0+2880], %%g1\n" | ||
| 777 | "ld [%0+2884], %%g1\n" | ||
| 778 | "ld [%0+2888], %%g1\n" | ||
| 779 | "st %%g1, [%0+2892]\n" | ||
| 780 | "ld [%0+2896], %%g1\n" | ||
| 781 | "ld [%0+2900], %%g1\n" | ||
| 782 | "ld [%0+2904], %%g1\n" | ||
| 783 | "st %%g1, [%0+2908]\n" | ||
| 784 | "ld [%0+2912], %%g1\n" | ||
| 785 | "ld [%0+2916], %%g1\n" | ||
| 786 | "ld [%0+2920], %%g1\n" | ||
| 787 | "st %%g1, [%0+2924]\n" | ||
| 788 | "ld [%0+2928], %%g1\n" | ||
| 789 | "ld [%0+2932], %%g1\n" | ||
| 790 | "ld [%0+2936], %%g1\n" | ||
| 791 | "st %%g1, [%0+2940]\n" | ||
| 792 | "ld [%0+2944], %%g1\n" | ||
| 793 | "ld [%0+2948], %%g1\n" | ||
| 794 | "ld [%0+2952], %%g1\n" | ||
| 795 | "st %%g1, [%0+2956]\n" | ||
| 796 | "ld [%0+2960], %%g1\n" | ||
| 797 | "ld [%0+2964], %%g1\n" | ||
| 798 | "ld [%0+2968], %%g1\n" | ||
| 799 | "st %%g1, [%0+2972]\n" | ||
| 800 | "ld [%0+2976], %%g1\n" | ||
| 801 | "ld [%0+2980], %%g1\n" | ||
| 802 | "ld [%0+2984], %%g1\n" | ||
| 803 | "st %%g1, [%0+2988]\n" | ||
| 804 | "ld [%0+2992], %%g1\n" | ||
| 805 | "ld [%0+2996], %%g1\n" | ||
| 806 | "ld [%0+3000], %%g1\n" | ||
| 807 | "st %%g1, [%0+3004]\n" | ||
| 808 | "ld [%0+3008], %%g1\n" | ||
| 809 | "ld [%0+3012], %%g1\n" | ||
| 810 | "ld [%0+3016], %%g1\n" | ||
| 811 | "st %%g1, [%0+3020]\n" | ||
| 812 | "ld [%0+3024], %%g1\n" | ||
| 813 | "ld [%0+3028], %%g1\n" | ||
| 814 | "ld [%0+3032], %%g1\n" | ||
| 815 | "st %%g1, [%0+3036]\n" | ||
| 816 | "ld [%0+3040], %%g1\n" | ||
| 817 | "ld [%0+3044], %%g1\n" | ||
| 818 | "ld [%0+3048], %%g1\n" | ||
| 819 | "st %%g1, [%0+3052]\n" | ||
| 820 | "ld [%0+3056], %%g1\n" | ||
| 821 | "ld [%0+3060], %%g1\n" | ||
| 822 | "ld [%0+3064], %%g1\n" | ||
| 823 | "st %%g1, [%0+3068]\n" | ||
| 824 | "ld [%0+3072], %%g1\n" | ||
| 825 | "ld [%0+3076], %%g1\n" | ||
| 826 | "ld [%0+3080], %%g1\n" | ||
| 827 | "st %%g1, [%0+3084]\n" | ||
| 828 | "ld [%0+3088], %%g1\n" | ||
| 829 | "ld [%0+3092], %%g1\n" | ||
| 830 | "ld [%0+3096], %%g1\n" | ||
| 831 | "st %%g1, [%0+3100]\n" | ||
| 832 | "ld [%0+3104], %%g1\n" | ||
| 833 | "ld [%0+3108], %%g1\n" | ||
| 834 | "ld [%0+3112], %%g1\n" | ||
| 835 | "st %%g1, [%0+3116]\n" | ||
| 836 | "ld [%0+3120], %%g1\n" | ||
| 837 | "ld [%0+3124], %%g1\n" | ||
| 838 | "ld [%0+3128], %%g1\n" | ||
| 839 | "st %%g1, [%0+3132]\n" | ||
| 840 | "ld [%0+3136], %%g1\n" | ||
| 841 | "ld [%0+3140], %%g1\n" | ||
| 842 | "ld [%0+3144], %%g1\n" | ||
| 843 | "st %%g1, [%0+3148]\n" | ||
| 844 | "ld [%0+3152], %%g1\n" | ||
| 845 | "ld [%0+3156], %%g1\n" | ||
| 846 | "ld [%0+3160], %%g1\n" | ||
| 847 | "st %%g1, [%0+3164]\n" | ||
| 848 | "ld [%0+3168], %%g1\n" | ||
| 849 | "ld [%0+3172], %%g1\n" | ||
| 850 | "ld [%0+3176], %%g1\n" | ||
| 851 | "st %%g1, [%0+3180]\n" | ||
| 852 | "ld [%0+3184], %%g1\n" | ||
| 853 | "ld [%0+3188], %%g1\n" | ||
| 854 | "ld [%0+3192], %%g1\n" | ||
| 855 | "st %%g1, [%0+3196]\n" | ||
| 856 | "ld [%0+3200], %%g1\n" | ||
| 857 | "ld [%0+3204], %%g1\n" | ||
| 858 | "ld [%0+3208], %%g1\n" | ||
| 859 | "st %%g1, [%0+3212]\n" | ||
| 860 | "ld [%0+3216], %%g1\n" | ||
| 861 | "ld [%0+3220], %%g1\n" | ||
| 862 | "ld [%0+3224], %%g1\n" | ||
| 863 | "st %%g1, [%0+3228]\n" | ||
| 864 | "ld [%0+3232], %%g1\n" | ||
| 865 | "ld [%0+3236], %%g1\n" | ||
| 866 | "ld [%0+3240], %%g1\n" | ||
| 867 | "st %%g1, [%0+3244]\n" | ||
| 868 | "ld [%0+3248], %%g1\n" | ||
| 869 | "ld [%0+3252], %%g1\n" | ||
| 870 | "ld [%0+3256], %%g1\n" | ||
| 871 | "st %%g1, [%0+3260]\n" | ||
| 872 | "ld [%0+3264], %%g1\n" | ||
| 873 | "ld [%0+3268], %%g1\n" | ||
| 874 | "ld [%0+3272], %%g1\n" | ||
| 875 | "st %%g1, [%0+3276]\n" | ||
| 876 | "ld [%0+3280], %%g1\n" | ||
| 877 | "ld [%0+3284], %%g1\n" | ||
| 878 | "ld [%0+3288], %%g1\n" | ||
| 879 | "st %%g1, [%0+3292]\n" | ||
| 880 | "ld [%0+3296], %%g1\n" | ||
| 881 | "ld [%0+3300], %%g1\n" | ||
| 882 | "ld [%0+3304], %%g1\n" | ||
| 883 | "st %%g1, [%0+3308]\n" | ||
| 884 | "ld [%0+3312], %%g1\n" | ||
| 885 | "ld [%0+3316], %%g1\n" | ||
| 886 | "ld [%0+3320], %%g1\n" | ||
| 887 | "st %%g1, [%0+3324]\n" | ||
| 888 | "ld [%0+3328], %%g1\n" | ||
| 889 | "ld [%0+3332], %%g1\n" | ||
| 890 | "ld [%0+3336], %%g1\n" | ||
| 891 | "st %%g1, [%0+3340]\n" | ||
| 892 | "ld [%0+3344], %%g1\n" | ||
| 893 | "ld [%0+3348], %%g1\n" | ||
| 894 | "ld [%0+3352], %%g1\n" | ||
| 895 | "st %%g1, [%0+3356]\n" | ||
| 896 | "ld [%0+3360], %%g1\n" | ||
| 897 | "ld [%0+3364], %%g1\n" | ||
| 898 | "ld [%0+3368], %%g1\n" | ||
| 899 | "st %%g1, [%0+3372]\n" | ||
| 900 | "ld [%0+3376], %%g1\n" | ||
| 901 | "ld [%0+3380], %%g1\n" | ||
| 902 | "ld [%0+3384], %%g1\n" | ||
| 903 | "st %%g1, [%0+3388]\n" | ||
| 904 | "ld [%0+3392], %%g1\n" | ||
| 905 | "ld [%0+3396], %%g1\n" | ||
| 906 | "ld [%0+3400], %%g1\n" | ||
| 907 | "st %%g1, [%0+3404]\n" | ||
| 908 | "ld [%0+3408], %%g1\n" | ||
| 909 | "ld [%0+3412], %%g1\n" | ||
| 910 | "ld [%0+3416], %%g1\n" | ||
| 911 | "st %%g1, [%0+3420]\n" | ||
| 912 | "ld [%0+3424], %%g1\n" | ||
| 913 | "ld [%0+3428], %%g1\n" | ||
| 914 | "ld [%0+3432], %%g1\n" | ||
| 915 | "st %%g1, [%0+3436]\n" | ||
| 916 | "ld [%0+3440], %%g1\n" | ||
| 917 | "ld [%0+3444], %%g1\n" | ||
| 918 | "ld [%0+3448], %%g1\n" | ||
| 919 | "st %%g1, [%0+3452]\n" | ||
| 920 | "ld [%0+3456], %%g1\n" | ||
| 921 | "ld [%0+3460], %%g1\n" | ||
| 922 | "ld [%0+3464], %%g1\n" | ||
| 923 | "st %%g1, [%0+3468]\n" | ||
| 924 | "ld [%0+3472], %%g1\n" | ||
| 925 | "ld [%0+3476], %%g1\n" | ||
| 926 | "ld [%0+3480], %%g1\n" | ||
| 927 | "st %%g1, [%0+3484]\n" | ||
| 928 | "ld [%0+3488], %%g1\n" | ||
| 929 | "ld [%0+3492], %%g1\n" | ||
| 930 | "ld [%0+3496], %%g1\n" | ||
| 931 | "st %%g1, [%0+3500]\n" | ||
| 932 | "ld [%0+3504], %%g1\n" | ||
| 933 | "ld [%0+3508], %%g1\n" | ||
| 934 | "ld [%0+3512], %%g1\n" | ||
| 935 | "st %%g1, [%0+3516]\n" | ||
| 936 | "ld [%0+3520], %%g1\n" | ||
| 937 | "ld [%0+3524], %%g1\n" | ||
| 938 | "ld [%0+3528], %%g1\n" | ||
| 939 | "st %%g1, [%0+3532]\n" | ||
| 940 | "ld [%0+3536], %%g1\n" | ||
| 941 | "ld [%0+3540], %%g1\n" | ||
| 942 | "ld [%0+3544], %%g1\n" | ||
| 943 | "st %%g1, [%0+3548]\n" | ||
| 944 | "ld [%0+3552], %%g1\n" | ||
| 945 | "ld [%0+3556], %%g1\n" | ||
| 946 | "ld [%0+3560], %%g1\n" | ||
| 947 | "st %%g1, [%0+3564]\n" | ||
| 948 | "ld [%0+3568], %%g1\n" | ||
| 949 | "ld [%0+3572], %%g1\n" | ||
| 950 | "ld [%0+3576], %%g1\n" | ||
| 951 | "st %%g1, [%0+3580]\n" | ||
| 952 | "ld [%0+3584], %%g1\n" | ||
| 953 | "ld [%0+3588], %%g1\n" | ||
| 954 | "ld [%0+3592], %%g1\n" | ||
| 955 | "st %%g1, [%0+3596]\n" | ||
| 956 | "ld [%0+3600], %%g1\n" | ||
| 957 | "ld [%0+3604], %%g1\n" | ||
| 958 | "ld [%0+3608], %%g1\n" | ||
| 959 | "st %%g1, [%0+3612]\n" | ||
| 960 | "ld [%0+3616], %%g1\n" | ||
| 961 | "ld [%0+3620], %%g1\n" | ||
| 962 | "ld [%0+3624], %%g1\n" | ||
| 963 | "st %%g1, [%0+3628]\n" | ||
| 964 | "ld [%0+3632], %%g1\n" | ||
| 965 | "ld [%0+3636], %%g1\n" | ||
| 966 | "ld [%0+3640], %%g1\n" | ||
| 967 | "st %%g1, [%0+3644]\n" | ||
| 968 | "ld [%0+3648], %%g1\n" | ||
| 969 | "ld [%0+3652], %%g1\n" | ||
| 970 | "ld [%0+3656], %%g1\n" | ||
| 971 | "st %%g1, [%0+3660]\n" | ||
| 972 | "ld [%0+3664], %%g1\n" | ||
| 973 | "ld [%0+3668], %%g1\n" | ||
| 974 | "ld [%0+3672], %%g1\n" | ||
| 975 | "st %%g1, [%0+3676]\n" | ||
| 976 | "ld [%0+3680], %%g1\n" | ||
| 977 | "ld [%0+3684], %%g1\n" | ||
| 978 | "ld [%0+3688], %%g1\n" | ||
| 979 | "st %%g1, [%0+3692]\n" | ||
| 980 | "ld [%0+3696], %%g1\n" | ||
| 981 | "ld [%0+3700], %%g1\n" | ||
| 982 | "ld [%0+3704], %%g1\n" | ||
| 983 | "st %%g1, [%0+3708]\n" | ||
| 984 | "ld [%0+3712], %%g1\n" | ||
| 985 | "ld [%0+3716], %%g1\n" | ||
| 986 | "ld [%0+3720], %%g1\n" | ||
| 987 | "st %%g1, [%0+3724]\n" | ||
| 988 | "ld [%0+3728], %%g1\n" | ||
| 989 | "ld [%0+3732], %%g1\n" | ||
| 990 | "ld [%0+3736], %%g1\n" | ||
| 991 | "st %%g1, [%0+3740]\n" | ||
| 992 | "ld [%0+3744], %%g1\n" | ||
| 993 | "ld [%0+3748], %%g1\n" | ||
| 994 | "ld [%0+3752], %%g1\n" | ||
| 995 | "st %%g1, [%0+3756]\n" | ||
| 996 | "ld [%0+3760], %%g1\n" | ||
| 997 | "ld [%0+3764], %%g1\n" | ||
| 998 | "ld [%0+3768], %%g1\n" | ||
| 999 | "st %%g1, [%0+3772]\n" | ||
| 1000 | "ld [%0+3776], %%g1\n" | ||
| 1001 | "ld [%0+3780], %%g1\n" | ||
| 1002 | "ld [%0+3784], %%g1\n" | ||
| 1003 | "st %%g1, [%0+3788]\n" | ||
| 1004 | "ld [%0+3792], %%g1\n" | ||
| 1005 | "ld [%0+3796], %%g1\n" | ||
| 1006 | "ld [%0+3800], %%g1\n" | ||
| 1007 | "st %%g1, [%0+3804]\n" | ||
| 1008 | "ld [%0+3808], %%g1\n" | ||
| 1009 | "ld [%0+3812], %%g1\n" | ||
| 1010 | "ld [%0+3816], %%g1\n" | ||
| 1011 | "st %%g1, [%0+3820]\n" | ||
| 1012 | "ld [%0+3824], %%g1\n" | ||
| 1013 | "ld [%0+3828], %%g1\n" | ||
| 1014 | "ld [%0+3832], %%g1\n" | ||
| 1015 | "st %%g1, [%0+3836]\n" | ||
| 1016 | "ld [%0+3840], %%g1\n" | ||
| 1017 | "ld [%0+3844], %%g1\n" | ||
| 1018 | "ld [%0+3848], %%g1\n" | ||
| 1019 | "st %%g1, [%0+3852]\n" | ||
| 1020 | "ld [%0+3856], %%g1\n" | ||
| 1021 | "ld [%0+3860], %%g1\n" | ||
| 1022 | "ld [%0+3864], %%g1\n" | ||
| 1023 | "st %%g1, [%0+3868]\n" | ||
| 1024 | "ld [%0+3872], %%g1\n" | ||
| 1025 | "ld [%0+3876], %%g1\n" | ||
| 1026 | "ld [%0+3880], %%g1\n" | ||
| 1027 | "st %%g1, [%0+3884]\n" | ||
| 1028 | "ld [%0+3888], %%g1\n" | ||
| 1029 | "ld [%0+3892], %%g1\n" | ||
| 1030 | "ld [%0+3896], %%g1\n" | ||
| 1031 | "st %%g1, [%0+3900]\n" | ||
| 1032 | "ld [%0+3904], %%g1\n" | ||
| 1033 | "ld [%0+3908], %%g1\n" | ||
| 1034 | "ld [%0+3912], %%g1\n" | ||
| 1035 | "st %%g1, [%0+3916]\n" | ||
| 1036 | "ld [%0+3920], %%g1\n" | ||
| 1037 | "ld [%0+3924], %%g1\n" | ||
| 1038 | "ld [%0+3928], %%g1\n" | ||
| 1039 | "st %%g1, [%0+3932]\n" | ||
| 1040 | "ld [%0+3936], %%g1\n" | ||
| 1041 | "ld [%0+3940], %%g1\n" | ||
| 1042 | "ld [%0+3944], %%g1\n" | ||
| 1043 | "st %%g1, [%0+3948]\n" | ||
| 1044 | "ld [%0+3952], %%g1\n" | ||
| 1045 | "ld [%0+3956], %%g1\n" | ||
| 1046 | "ld [%0+3960], %%g1\n" | ||
| 1047 | "st %%g1, [%0+3964]\n" | ||
| 1048 | "ld [%0+3968], %%g1\n" | ||
| 1049 | "ld [%0+3972], %%g1\n" | ||
| 1050 | "ld [%0+3976], %%g1\n" | ||
| 1051 | "st %%g1, [%0+3980]\n" | ||
| 1052 | "ld [%0+3984], %%g1\n" | ||
| 1053 | "ld [%0+3988], %%g1\n" | ||
| 1054 | "ld [%0+3992], %%g1\n" | ||
| 1055 | "st %%g1, [%0+3996]\n" | ||
| 1056 | "ld [%0+4000], %%g1\n" | ||
| 1057 | "ld [%0+4004], %%g1\n" | ||
| 1058 | "ld [%0+4008], %%g1\n" | ||
| 1059 | "st %%g1, [%0+4012]\n" | ||
| 1060 | "ld [%0+4016], %%g1\n" | ||
| 1061 | "ld [%0+4020], %%g1\n" | ||
| 1062 | "ld [%0+4024], %%g1\n" | ||
| 1063 | "st %%g1, [%0+4028]\n" | ||
| 1064 | "ld [%0+4032], %%g1\n" | ||
| 1065 | "ld [%0+4036], %%g1\n" | ||
| 1066 | "ld [%0+4040], %%g1\n" | ||
| 1067 | "st %%g1, [%0+4044]\n" | ||
| 1068 | "ld [%0+4048], %%g1\n" | ||
| 1069 | "ld [%0+4052], %%g1\n" | ||
| 1070 | "ld [%0+4056], %%g1\n" | ||
| 1071 | "st %%g1, [%0+4060]\n" | ||
| 1072 | "ld [%0+4064], %%g1\n" | ||
| 1073 | "ld [%0+4068], %%g1\n" | ||
| 1074 | "ld [%0+4072], %%g1\n" | ||
| 1075 | "st %%g1, [%0+4076]\n" | ||
| 1076 | "ld [%0+4080], %%g1\n" | ||
| 1077 | "ld [%0+4084], %%g1\n" | ||
| 1078 | "ld [%0+4088], %%g1\n" | ||
| 1079 | "st %%g1, [%0+4092]\n" | ||
| 1080 | : : "r"(mem_ptr) : "g1", "cc", "memory"); | ||
| 1081 | } | ||
| 1082 | #endif /* ! __sparc__ */ | ||
| 1083 | |||
| 1084 | #endif | ||
diff --git a/pm_test/pm_task.c b/pm_test/pm_task.c new file mode 100644 index 0000000..e6e630b --- /dev/null +++ b/pm_test/pm_task.c | |||
| @@ -0,0 +1,279 @@ | |||
| 1 | /* | ||
| 2 | * pm_task.c | ||
| 3 | * | ||
| 4 | * A real-time task that measures preemption and migration costs | ||
| 5 | * for a specific working set size. | ||
| 6 | * | ||
| 7 | * 2008 Original version and idea by John Calandrino | ||
| 8 | * (litmus2008, liblitmus2008) | ||
| 9 | * | ||
| 10 | * 2010 Porting of original program to litmus2010 and | ||
| 11 | * integration within liblitmus2010 by Andrea Bastoni | ||
| 12 | */ | ||
| 13 | |||
| 14 | /* common data structures and defines */ | ||
| 15 | #include "pm_common.h" | ||
| 16 | |||
| 17 | #include "litmus.h" | ||
| 18 | #include "asm.h" | ||
| 19 | #include "cycles.h" | ||
| 20 | |||
| 21 | /* architectural dependend code for pm measurement */ | ||
| 22 | #include "pm_arch.h" | ||
| 23 | |||
| 24 | int mem_block[NUMWS][INTS_PER_WSS] __attribute__ ((aligned(CACHEALIGNMENT))); | ||
| 25 | |||
| 26 | /* Setup flags, then enter loop to measure costs. */ | ||
| 27 | int main(int argc, char **argv) | ||
| 28 | { | ||
| 29 | /* control_page to read data from kernel */ | ||
| 30 | struct control_page *ctrl = NULL; | ||
| 31 | |||
| 32 | unsigned long curr_job_count = 0; | ||
| 33 | unsigned long curr_sched_count = 0; | ||
| 34 | unsigned int curr_cpu = 0; | ||
| 35 | unsigned long curr_last_rt_task = 0; | ||
| 36 | unsigned long curr_ws = 0; | ||
| 37 | |||
| 38 | unsigned long long curr_preemption_length = 0; | ||
| 39 | |||
| 40 | unsigned long long start_time, end_time; | ||
| 41 | |||
| 42 | int *mem_ptr = NULL; | ||
| 43 | int *mem_ptr_end = NULL; | ||
| 44 | |||
| 45 | struct data_entry data_points[DATAPOINTS]; | ||
| 46 | int data_count = 0; | ||
| 47 | int data_wrapped = 0; | ||
| 48 | |||
| 49 | int refcount; | ||
| 50 | |||
| 51 | int task_pid = gettid(); | ||
| 52 | int task_period; | ||
| 53 | int read, *loc_ptr; | ||
| 54 | struct rt_task param; | ||
| 55 | |||
| 56 | char *filename; | ||
| 57 | #ifdef DEBUG | ||
| 58 | int i; | ||
| 59 | #endif | ||
| 60 | |||
| 61 | if (argc < 2) { | ||
| 62 | printf("pm_task: need a filename\n"); | ||
| 63 | return -1; | ||
| 64 | } | ||
| 65 | |||
| 66 | filename = argv[1]; | ||
| 67 | #ifdef DEBUG | ||
| 68 | fprintf(stderr, "Saving on %s\n",filename); | ||
| 69 | #endif | ||
| 70 | |||
| 71 | /* Initialize random library for read/write ratio enforcement. */ | ||
| 72 | srandom(SEEDVAL); | ||
| 73 | |||
| 74 | /* this will lock all pages and will call init_kernel_iface */ | ||
| 75 | init_litmus(); | ||
| 76 | |||
| 77 | /* Ensure that the pages that we care about, either because they | ||
| 78 | * are shared with the kernel or they are performance-critical, | ||
| 79 | * are loaded and locked in memory before benchmarking begins. | ||
| 80 | */ | ||
| 81 | memset(¶m, 0, sizeof(struct rt_task)); | ||
| 82 | |||
| 83 | memset(&mem_block, 0, sizeof(int) * NUMWS * INTS_PER_WSS); | ||
| 84 | |||
| 85 | memset(&mem_ptr, 0, sizeof(int*)); | ||
| 86 | memset(&mem_ptr_end, 0, sizeof(int*)); | ||
| 87 | |||
| 88 | /* Get task period. */ | ||
| 89 | if (get_rt_task_param(task_pid, ¶m) < 0) { | ||
| 90 | perror("Cannot get task parameters\n"); | ||
| 91 | return -1; | ||
| 92 | } | ||
| 93 | |||
| 94 | task_period = param.period / NS_PER_MS; | ||
| 95 | |||
| 96 | /* get the shared control page for this task */ | ||
| 97 | if (!(ctrl = get_ctrl_page())) { | ||
| 98 | perror("Cannot get the shared control page\n"); | ||
| 99 | return -1; | ||
| 100 | } | ||
| 101 | |||
| 102 | /* Enter loop that measures preemption and migration costs. */ | ||
| 103 | while (curr_job_count * task_period < SIMRUNTIME) { | ||
| 104 | |||
| 105 | if (curr_job_count != ctrl->job_count) { | ||
| 106 | |||
| 107 | /* ok, this is a new job. Get info from kernel */ | ||
| 108 | |||
| 109 | curr_job_count = ctrl->job_count; | ||
| 110 | curr_sched_count = ctrl->sched_count; | ||
| 111 | curr_cpu = ctrl->cpu; | ||
| 112 | curr_last_rt_task = ctrl->last_rt_task; | ||
| 113 | |||
| 114 | barrier(); | ||
| 115 | |||
| 116 | /* job's portion of the mem_block */ | ||
| 117 | curr_ws = curr_job_count % NUMWS; | ||
| 118 | |||
| 119 | mem_ptr = &mem_block[curr_ws][0]; | ||
| 120 | mem_ptr_end = mem_ptr + INTS_PER_WSS; | ||
| 121 | |||
| 122 | /* Access WS when cache cold, then immediately | ||
| 123 | * re-access to calculate "cache-hot" access time. | ||
| 124 | */ | ||
| 125 | |||
| 126 | /* Cache-cold accesses. */ | ||
| 127 | start_time = get_cycles(); | ||
| 128 | for (; mem_ptr < mem_ptr_end; mem_ptr += 1024) | ||
| 129 | readwrite_one_thousand_ints(mem_ptr); | ||
| 130 | end_time = get_cycles(); | ||
| 131 | |||
| 132 | data_points[data_count].timestamp = end_time; | ||
| 133 | |||
| 134 | /* Am I the same I was before? */ | ||
| 135 | if (curr_job_count != ctrl->job_count || | ||
| 136 | curr_sched_count != ctrl->sched_count || | ||
| 137 | curr_cpu != ctrl->cpu) | ||
| 138 | /* fishiness */ | ||
| 139 | data_points[data_count].access_type = 'c'; | ||
| 140 | else | ||
| 141 | /* okay */ | ||
| 142 | data_points[data_count].access_type = 'C'; | ||
| 143 | |||
| 144 | data_points[data_count].access_time = | ||
| 145 | end_time - start_time; | ||
| 146 | data_points[data_count].cpu = curr_cpu; | ||
| 147 | data_points[data_count].job_count = curr_job_count; | ||
| 148 | data_points[data_count].sched_count = curr_sched_count; | ||
| 149 | data_points[data_count].last_rt_task = curr_last_rt_task; | ||
| 150 | data_points[data_count].preemption_length = 0; | ||
| 151 | |||
| 152 | data_wrapped = ((data_count+1) / DATAPOINTS > 0); | ||
| 153 | data_count = (data_count+1) % DATAPOINTS; | ||
| 154 | |||
| 155 | barrier(); | ||
| 156 | |||
| 157 | /* "Best case". Read multiple times. */ | ||
| 158 | for (refcount = 0; refcount < REFTOTAL; refcount++) { | ||
| 159 | |||
| 160 | mem_ptr = &mem_block[curr_ws][0]; | ||
| 161 | |||
| 162 | start_time = get_cycles(); | ||
| 163 | for (; mem_ptr < mem_ptr_end; mem_ptr += 1024) | ||
| 164 | readwrite_one_thousand_ints(mem_ptr); | ||
| 165 | end_time = get_cycles(); | ||
| 166 | |||
| 167 | data_points[data_count].timestamp = end_time; | ||
| 168 | |||
| 169 | if (curr_job_count != ctrl->job_count || | ||
| 170 | curr_sched_count != ctrl->sched_count || | ||
| 171 | curr_cpu != ctrl->cpu) | ||
| 172 | /* fishiness */ | ||
| 173 | data_points[data_count]. | ||
| 174 | access_type = 'h'; | ||
| 175 | else | ||
| 176 | /* okay */ | ||
| 177 | data_points[data_count]. | ||
| 178 | access_type = 'H'; | ||
| 179 | |||
| 180 | data_points[data_count].access_time = | ||
| 181 | end_time - start_time; | ||
| 182 | data_points[data_count].cpu = curr_cpu; | ||
| 183 | data_points[data_count].job_count = | ||
| 184 | curr_job_count; | ||
| 185 | data_points[data_count].sched_count = | ||
| 186 | curr_sched_count; | ||
| 187 | data_points[data_count].last_rt_task = | ||
| 188 | curr_last_rt_task; | ||
| 189 | data_points[data_count].preemption_length = 0; | ||
| 190 | |||
| 191 | data_wrapped = | ||
| 192 | ((data_count+1) / DATAPOINTS > 0); | ||
| 193 | data_count = (data_count+1) % DATAPOINTS; | ||
| 194 | } | ||
| 195 | |||
| 196 | } else if (mem_ptr && mem_ptr_end && | ||
| 197 | (curr_sched_count != ctrl->sched_count || | ||
| 198 | curr_cpu != ctrl->cpu)) { | ||
| 199 | /* we have done at least one go in the "best case". | ||
| 200 | * job is the same => preempted / migrated | ||
| 201 | */ | ||
| 202 | curr_preemption_length = | ||
| 203 | ctrl->preempt_end - ctrl->preempt_start; | ||
| 204 | curr_job_count = ctrl->job_count; | ||
| 205 | curr_sched_count = ctrl->sched_count; | ||
| 206 | curr_cpu = ctrl->cpu; | ||
| 207 | curr_last_rt_task = ctrl->last_rt_task; | ||
| 208 | |||
| 209 | barrier(); | ||
| 210 | |||
| 211 | /* Measure preemption or migration cost. */ | ||
| 212 | mem_ptr = &mem_block[curr_ws][0]; | ||
| 213 | |||
| 214 | start_time = get_cycles(); | ||
| 215 | for (; mem_ptr < mem_ptr_end; mem_ptr += 1024) | ||
| 216 | readwrite_one_thousand_ints(mem_ptr); | ||
| 217 | end_time = get_cycles(); | ||
| 218 | |||
| 219 | data_points[data_count].timestamp = end_time; | ||
| 220 | |||
| 221 | /* just record pP, we tell the difference later */ | ||
| 222 | if (curr_job_count != ctrl->job_count || | ||
| 223 | curr_sched_count != ctrl->sched_count || | ||
| 224 | curr_cpu != ctrl->cpu) | ||
| 225 | /* fishiness */ | ||
| 226 | data_points[data_count].access_type = 'p'; | ||
| 227 | else | ||
| 228 | /* okay */ | ||
| 229 | data_points[data_count].access_type = 'P'; | ||
| 230 | |||
| 231 | data_points[data_count].access_time = | ||
| 232 | end_time - start_time; | ||
| 233 | data_points[data_count].cpu = curr_cpu; | ||
| 234 | data_points[data_count].job_count = curr_job_count; | ||
| 235 | data_points[data_count].sched_count = curr_sched_count; | ||
| 236 | data_points[data_count].last_rt_task = | ||
| 237 | curr_last_rt_task; | ||
| 238 | data_points[data_count].preemption_length = | ||
| 239 | curr_preemption_length; | ||
| 240 | |||
| 241 | data_wrapped = ((data_count+1) / DATAPOINTS > 0); | ||
| 242 | data_count = (data_count+1) % DATAPOINTS; | ||
| 243 | |||
| 244 | } else if (mem_ptr && mem_ptr_end) { | ||
| 245 | /* | ||
| 246 | * Ok, we run: | ||
| 247 | * Read or write some random location in the WS | ||
| 248 | * to keep the task "cache warm". We only do | ||
| 249 | * this if the pointers are valid, because we | ||
| 250 | * do not want to skew the "cold" read of the WS | ||
| 251 | * on the first job. | ||
| 252 | */ | ||
| 253 | read = (random() % 100) < READRATIO; | ||
| 254 | loc_ptr = &mem_block[curr_ws][0]; | ||
| 255 | loc_ptr += (random() % INTS_PER_WSS); | ||
| 256 | |||
| 257 | barrier(); | ||
| 258 | |||
| 259 | if (read) | ||
| 260 | read_mem(loc_ptr); | ||
| 261 | else | ||
| 262 | write_mem(loc_ptr); | ||
| 263 | } | ||
| 264 | } | ||
| 265 | |||
| 266 | #ifdef DEBUG | ||
| 267 | /* Print (most recent) results. */ | ||
| 268 | for (i = 0; i < (data_wrapped ? DATAPOINTS : data_count) ; i++) | ||
| 269 | fprintf(stderr, "(%c) - ACC %llu, CPU %u, PLEN %llu\n", | ||
| 270 | data_points[i].access_type, | ||
| 271 | data_points[i].access_time, data_points[i].cpu, | ||
| 272 | data_points[i].preemption_length); | ||
| 273 | #endif | ||
| 274 | serialize_data_entry(filename, data_points, | ||
| 275 | (data_wrapped ? DATAPOINTS : data_count)); | ||
| 276 | |||
| 277 | return 0; | ||
| 278 | } | ||
| 279 | |||
