1/* 2 * Some or all of this work - Copyright (c) 2006 - 2021, Intel Corp. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * Neither the name of Intel Corporation nor the names of its contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29/* 30 * Method execution control 31 * 32 * Timing operators 33 */ 34 35Name(z006, 6) 36Name(MSLP, 2000) // Max sleep (ms) defined in acconfig.h, Oct 2013 37 38// Verifying 1-parameter, 0-result operator 39// 40// Arg5 - additional parameter (event...) 41// 42// Local0 - argument passed by test (MilliSeconds) 43// Local4 - specified time to be delayed (in Timer units) 44// Local6 - time actually was delayed (measured by Timer, in Timer units) 45// Local7 - delta == (actual - specified) (in Timer units) 46// 47Method(m0c8, 6) 48{ 49 Store(0, Local5) 50 Store(arg1, Local3) 51 52 While(Local3) { 53 54 // Operand 55 56 Store(DeRefOf(Index(arg3, Local5)), Local0) 57 58 switch (arg4) { 59 case (0) { 60 if (LLess(MSLP, Local0)) { 61 // Exceeding max allowable sleep time 62 Store("m0c8: Note, argument exceeds max defined time for Sleep.", 63 Debug); 64 Break 65 } 66 67 Store(Timer, Local1) 68 Sleep(Local0) 69 Store(Timer, Local2) 70 Subtract(Local2, Local1, Local6) 71 Multiply(Local0, 10000, Local4) 72 73 if (LLess(Local6, Local4)) { 74 Subtract(Local4, Local6, Local7) 75 err(arg0, z006, __LINE__, 0, 0, Local5, arg2) 76 Store(Local0, Debug) 77 Store(Local4, Debug) 78 Store(Local6, Debug) 79 Store(Local7, Debug) 80 return (1) 81 } else { 82 Subtract(Local6, Local4, Local7) 83 } 84 } 85 case (1) { 86 Store(Timer, Local1) 87 Stall(Local0) 88 Store(Timer, Local2) 89 Subtract(Local2, Local1, Local6) 90 Multiply(Local0, 10, Local4) 91 92 if (LLess(Local6, Local4)) { 93 Subtract(Local4, Local6, Local7) 94 err(arg0, z006, __LINE__, 0, 0, Local5, arg2) 95 Store(Local0, Debug) 96 Store(Local4, Debug) 97 Store(Local6, Debug) 98 Store(Local7, Debug) 99 return (1) 100 } else { 101 Subtract(Local6, Local4, Local7) 102 } 103 } 104 case (2) { 105 Store(Timer, Local1) 106 Wait(arg5, Local0) 107 Store(Timer, Local2) 108 Subtract(Local2, Local1, Local6) 109 Multiply(Local0, 10000, Local4) 110 111 if (LLess(Local6, Local4)) { 112 Subtract(Local4, Local6, Local7) 113 err(arg0, z006, __LINE__, 0, 0, Local5, arg2) 114 Store(Local0, Debug) 115 Store(Local4, Debug) 116 Store(Local6, Debug) 117 Store(Local7, Debug) 118 return (1) 119 } else { 120 Subtract(Local6, Local4, Local7) 121 } 122 } 123 } 124 125 if (0) { 126 Store("====================:", Debug) 127 Store(Local0, Debug) 128 Store(Local4, Debug) 129 Store(Local6, Debug) 130 Store(Local7, Debug) 131 } 132 133 Increment(Local5) 134 Decrement(Local3) 135 } 136 137 return (0) 138} 139 140// Sleep. Sleep n milliseconds (yields the processor) 141Method(m0c9,, Serialized) 142{ 143 Name(ts, "m0c9") 144 145 Store("TEST: m0c9, Sleep, sleep n milliseconds (yields the processor)", Debug) 146 147 Name(p000, Package() { 0, 1, 10, 100, 1000, 2000, 3456, 10000, 12345 }) 148 149 Store(1, Local0) 150 While(Local0) { 151 if (m0c8(ts, 9, "p000", p000, 0, 0)) { 152 return (1) 153 } 154 Decrement(Local0) 155 } 156 return (0) 157} 158 159// Stall. Delay n microseconds (does not yield the processor) 160Method(m0ca,, Serialized) 161{ 162 Name(ts, "m0ca") 163 164 Store("TEST: m0ca, Stall, delay n microseconds (does not yield the processor)", Debug) 165 166 Name(p000, Package() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 167 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 168 14, 23, 37, 49, 55, 62, 78, 81, 96, 100 }) 169 170 Store(5, Local0) 171 While(Local0) { 172 if (m0c8(ts, 30, "p000", p000, 1, 0)) { 173 return (1) 174 } 175 Decrement(Local0) 176 } 177 return (0) 178} 179 180// Wait. The calling method blocks while waiting for the event to be signaled 181Method(m0cb,, Serialized) 182{ 183 Name(ts, "m0cb") 184 185 Store("TEST: m0cb, Wait, waiting for the event to be signaled", Debug) 186 187 Event(e000) 188 189 Name(p000, Package() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 190 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 191 14, 23, 37, 49, 55, 62, 78, 81, 96, 100 }) 192 193 Store(1, Local0) 194 While(Local0) { 195 if (m0c8(ts, 30, "p000", p000, 2, e000)) { 196 return (1) 197 } 198 Decrement(Local0) 199 } 200 201 Name(p001, Package() { 0, 1, 10, 100, 1000, 2000, 3456, 10000, 12345 }) 202 203 Store(1, Local0) 204 While(Local0) { 205 if (m0c8(ts, 9, "p001", p001, 2, e000)) { 206 return (1) 207 } 208 Decrement(Local0) 209 } 210 return (0) 211} 212 213// Handle and summarize the Timer-times package. 214Method(m0cc, 3, Serialized) 215{ 216 Name(n000, 0) 217 Name(ncur, 0) 218 219 // Size of p001=(p000-1) 220 Name(n001, 0) 221 Subtract(arg2, 1, n001) 222 223 Name(p001, Package(n001) {}) 224 225 Name(nmin, 0) 226 Name(nmax, 0) 227 Name(ndcr, 0) 228 Name(navr, 0) 229 Name(nspl, 0) 230 231 // Index for p001 232 Name(ncu1, 0) 233 234 // Obtain the adjacent deltas. 235 236 Store(0, Local7) 237 Store(arg2, n000) 238 Store(0, ncur) 239 Store(0, ncu1) 240 241 While (n000) { 242 Store(DeRefOf(Index(arg1, ncur)), Local0) 243 if (ncur) { 244 Subtract(Local0, Local7, Local6) 245 Store(Local6, Index(p001, ncu1)) 246 Increment(ncu1) 247 if (0) { 248 Store(Local6, Debug) 249 } 250 } 251 252 // Previous time 253 254 Store(Local0, Local7) 255 256 Decrement(n000) 257 Increment(ncur) 258 } 259 260 // Summarize - min, max, average 261 262 Store(0, Local6) 263 Store(n001, n000) 264 Store(0, ncur) 265 266 Store(0, nmin) 267 Store(0, nmax) 268 Store(0, ndcr) 269 Store(0, navr) 270 271 While (n000) { 272 Store(DeRefOf(Index(p001, ncur)), Local0) 273 Add(Local6, Local0, Local6) 274 if (ncur) { 275 // New value less then previous 276 if (LLess(Local0, Local7)) { 277 Increment(ndcr) 278 } 279 if (LLess(Local0, nmin)) { 280 Store(Local0, nmin) 281 } elseif (LGreater(Local0, nmax)) { 282 Store(Local0, nmax) 283 } 284 } else { 285 Store(Local0, nmin) 286 Store(Local0, nmax) 287 } 288 289 // Previous delta 290 291 Store(Local0, Local7) 292 293 Decrement(n000) 294 Increment(ncur) 295 } 296 297 Divide(Local6, n001, Local0, navr) 298 299 // Summarize - check monotony, no splashes 300 // exceeding the adjacent points in times. 301 302 Store(0, Local6) 303 Store(n001, n000) 304 Store(0, ncur) 305 Store(0, nspl) 306 307 While (n000) { 308 Store(DeRefOf(Index(arg1, ncur)), Local0) 309 if (ncur) { 310 311 // Splashes different in times 312 313 if (LLess(Local0, Local7)) { 314 Divide(Local7, Local0, Local1, Local6) 315 } else { 316 Divide(Local0, Local7, Local1, Local6) 317 } 318 if (LGreater(Local6, 2)) { 319 Increment(nspl) 320 } 321 } 322 323 // Previous delta 324 325 Store(Local0, Local7) 326 327 Decrement(n000) 328 Increment(ncur) 329 } 330 331 Store("Summary:", Debug) 332 333 Store(nmin, Debug) 334 Store(nmax, Debug) 335 Store(navr, Debug) 336 Store(ndcr, Debug) 337 Store(nspl, Debug) 338} 339 340// Timer with Package - is not a test as such, but shows behaviour of Timer. 341// 342// Get Timer-time N times, store them into Package. 343// Then, calculate the Timer-time between each adjacent points. 344// Much time is spent on storing into Package. 345// 346// Summary of deltas between the adjacent points: 347// 348// nmin - minimal 349// nmax - maximal 350// navr - average 351// 352// Monotony: 353// 354// ndcr - # lower than previous 355// nspl - # splashes exceeding the adjacent point by 2 or more times 356Method(m0cd,, Serialized) 357{ 358 Name(ts, "m0cd") 359 360 Store("TEST: m0cd, Timer with Package", Debug) 361 362 // nsz0 - size of p000 363 // n000 - decr cur counter 364 // ncur - incr cur counter 365 366 Name(nsz0, 101) 367 Name(n000, 0) 368 Name(ncur, 0) 369 370 Store(nsz0, n000) 371 Store(0, ncur) 372 373 Name(p000, Package(n000) {}) 374 375 // Obtain the time and store into Package. 376 // Do as quickly as possible without any unnecessary actions. 377 While (n000) { 378 379 Store(Timer, Local0) 380 Store(Local0, Index(p000, ncur)) 381 Decrement(n000) 382 Increment(ncur) 383 } 384 385 m0cc(ts, p000, nsz0) 386} 387 388// Timer with Name 389Method(m0ce,, Serialized) 390{ 391 Name(ts, "m0ce") 392 393 Store("TEST: m0ce, Timer with Name", Debug) 394 395 Name(nsz0, 101) 396 Name(p000, Package(nsz0) {}) 397 398 Name(tmp, 0) 399 400 Name(n000, 0) 401 Name(n001, 0) 402 Name(n002, 0) 403 Name(n003, 0) 404 Name(n004, 0) 405 Name(n005, 0) 406 Name(n006, 0) 407 Name(n007, 0) 408 Name(n008, 0) 409 Name(n009, 0) 410 Name(n010, 0) 411 Name(n011, 0) 412 Name(n012, 0) 413 Name(n013, 0) 414 Name(n014, 0) 415 Name(n015, 0) 416 Name(n016, 0) 417 Name(n017, 0) 418 Name(n018, 0) 419 Name(n019, 0) 420 Name(n020, 0) 421 Name(n021, 0) 422 Name(n022, 0) 423 Name(n023, 0) 424 Name(n024, 0) 425 Name(n025, 0) 426 Name(n026, 0) 427 Name(n027, 0) 428 Name(n028, 0) 429 Name(n029, 0) 430 Name(n030, 0) 431 Name(n031, 0) 432 Name(n032, 0) 433 Name(n033, 0) 434 Name(n034, 0) 435 Name(n035, 0) 436 Name(n036, 0) 437 Name(n037, 0) 438 Name(n038, 0) 439 Name(n039, 0) 440 Name(n040, 0) 441 Name(n041, 0) 442 Name(n042, 0) 443 Name(n043, 0) 444 Name(n044, 0) 445 Name(n045, 0) 446 Name(n046, 0) 447 Name(n047, 0) 448 Name(n048, 0) 449 Name(n049, 0) 450 Name(n050, 0) 451 Name(n051, 0) 452 Name(n052, 0) 453 Name(n053, 0) 454 Name(n054, 0) 455 Name(n055, 0) 456 Name(n056, 0) 457 Name(n057, 0) 458 Name(n058, 0) 459 Name(n059, 0) 460 Name(n060, 0) 461 Name(n061, 0) 462 Name(n062, 0) 463 Name(n063, 0) 464 Name(n064, 0) 465 Name(n065, 0) 466 Name(n066, 0) 467 Name(n067, 0) 468 Name(n068, 0) 469 Name(n069, 0) 470 Name(n070, 0) 471 Name(n071, 0) 472 Name(n072, 0) 473 Name(n073, 0) 474 Name(n074, 0) 475 Name(n075, 0) 476 Name(n076, 0) 477 Name(n077, 0) 478 Name(n078, 0) 479 Name(n079, 0) 480 Name(n080, 0) 481 Name(n081, 0) 482 Name(n082, 0) 483 Name(n083, 0) 484 Name(n084, 0) 485 Name(n085, 0) 486 Name(n086, 0) 487 Name(n087, 0) 488 Name(n088, 0) 489 Name(n089, 0) 490 Name(n090, 0) 491 Name(n091, 0) 492 Name(n092, 0) 493 Name(n093, 0) 494 Name(n094, 0) 495 Name(n095, 0) 496 Name(n096, 0) 497 Name(n097, 0) 498 Name(n098, 0) 499 Name(n099, 0) 500 Name(n100, 0) 501 502 Store(Timer, n000) 503 Store(Timer, n001) 504 Store(Timer, n002) 505 Store(Timer, n003) 506 Store(Timer, n004) 507 Store(Timer, n005) 508 Store(Timer, n006) 509 Store(Timer, n007) 510 Store(Timer, n008) 511 Store(Timer, n009) 512 Store(Timer, n010) 513 Store(Timer, n011) 514 Store(Timer, n012) 515 Store(Timer, n013) 516 Store(Timer, n014) 517 Store(Timer, n015) 518 Store(Timer, n016) 519 Store(Timer, n017) 520 Store(Timer, n018) 521 Store(Timer, n019) 522 Store(Timer, n020) 523 Store(Timer, n021) 524 Store(Timer, n022) 525 Store(Timer, n023) 526 Store(Timer, n024) 527 Store(Timer, n025) 528 Store(Timer, n026) 529 Store(Timer, n027) 530 Store(Timer, n028) 531 Store(Timer, n029) 532 Store(Timer, n030) 533 Store(Timer, n031) 534 Store(Timer, n032) 535 Store(Timer, n033) 536 Store(Timer, n034) 537 Store(Timer, n035) 538 Store(Timer, n036) 539 Store(Timer, n037) 540 Store(Timer, n038) 541 Store(Timer, n039) 542 Store(Timer, n040) 543 Store(Timer, n041) 544 Store(Timer, n042) 545 Store(Timer, n043) 546 Store(Timer, n044) 547 Store(Timer, n045) 548 Store(Timer, n046) 549 Store(Timer, n047) 550 Store(Timer, n048) 551 Store(Timer, n049) 552 Store(Timer, n050) 553 Store(Timer, n051) 554 Store(Timer, n052) 555 Store(Timer, n053) 556 Store(Timer, n054) 557 Store(Timer, n055) 558 Store(Timer, n056) 559 Store(Timer, n057) 560 Store(Timer, n058) 561 Store(Timer, n059) 562 Store(Timer, n060) 563 Store(Timer, n061) 564 Store(Timer, n062) 565 Store(Timer, n063) 566 Store(Timer, n064) 567 Store(Timer, n065) 568 Store(Timer, n066) 569 Store(Timer, n067) 570 Store(Timer, n068) 571 Store(Timer, n069) 572 Store(Timer, n070) 573 Store(Timer, n071) 574 Store(Timer, n072) 575 Store(Timer, n073) 576 Store(Timer, n074) 577 Store(Timer, n075) 578 Store(Timer, n076) 579 Store(Timer, n077) 580 Store(Timer, n078) 581 Store(Timer, n079) 582 Store(Timer, n080) 583 Store(Timer, n081) 584 Store(Timer, n082) 585 Store(Timer, n083) 586 Store(Timer, n084) 587 Store(Timer, n085) 588 Store(Timer, n086) 589 Store(Timer, n087) 590 Store(Timer, n088) 591 Store(Timer, n089) 592 Store(Timer, n090) 593 Store(Timer, n091) 594 Store(Timer, n092) 595 Store(Timer, n093) 596 Store(Timer, n094) 597 Store(Timer, n095) 598 Store(Timer, n096) 599 Store(Timer, n097) 600 Store(Timer, n098) 601 Store(Timer, n099) 602 Store(Timer, n100) 603 604 605 Store(n000, Index(p000, tmp)) Increment(tmp) 606 Store(n001, Index(p000, tmp)) Increment(tmp) 607 Store(n002, Index(p000, tmp)) Increment(tmp) 608 Store(n003, Index(p000, tmp)) Increment(tmp) 609 Store(n004, Index(p000, tmp)) Increment(tmp) 610 Store(n005, Index(p000, tmp)) Increment(tmp) 611 Store(n006, Index(p000, tmp)) Increment(tmp) 612 Store(n007, Index(p000, tmp)) Increment(tmp) 613 Store(n008, Index(p000, tmp)) Increment(tmp) 614 Store(n009, Index(p000, tmp)) Increment(tmp) 615 Store(n010, Index(p000, tmp)) Increment(tmp) 616 Store(n011, Index(p000, tmp)) Increment(tmp) 617 Store(n012, Index(p000, tmp)) Increment(tmp) 618 Store(n013, Index(p000, tmp)) Increment(tmp) 619 Store(n014, Index(p000, tmp)) Increment(tmp) 620 Store(n015, Index(p000, tmp)) Increment(tmp) 621 Store(n016, Index(p000, tmp)) Increment(tmp) 622 Store(n017, Index(p000, tmp)) Increment(tmp) 623 Store(n018, Index(p000, tmp)) Increment(tmp) 624 Store(n019, Index(p000, tmp)) Increment(tmp) 625 Store(n020, Index(p000, tmp)) Increment(tmp) 626 Store(n021, Index(p000, tmp)) Increment(tmp) 627 Store(n022, Index(p000, tmp)) Increment(tmp) 628 Store(n023, Index(p000, tmp)) Increment(tmp) 629 Store(n024, Index(p000, tmp)) Increment(tmp) 630 Store(n025, Index(p000, tmp)) Increment(tmp) 631 Store(n026, Index(p000, tmp)) Increment(tmp) 632 Store(n027, Index(p000, tmp)) Increment(tmp) 633 Store(n028, Index(p000, tmp)) Increment(tmp) 634 Store(n029, Index(p000, tmp)) Increment(tmp) 635 Store(n030, Index(p000, tmp)) Increment(tmp) 636 Store(n031, Index(p000, tmp)) Increment(tmp) 637 Store(n032, Index(p000, tmp)) Increment(tmp) 638 Store(n033, Index(p000, tmp)) Increment(tmp) 639 Store(n034, Index(p000, tmp)) Increment(tmp) 640 Store(n035, Index(p000, tmp)) Increment(tmp) 641 Store(n036, Index(p000, tmp)) Increment(tmp) 642 Store(n037, Index(p000, tmp)) Increment(tmp) 643 Store(n038, Index(p000, tmp)) Increment(tmp) 644 Store(n039, Index(p000, tmp)) Increment(tmp) 645 Store(n040, Index(p000, tmp)) Increment(tmp) 646 Store(n041, Index(p000, tmp)) Increment(tmp) 647 Store(n042, Index(p000, tmp)) Increment(tmp) 648 Store(n043, Index(p000, tmp)) Increment(tmp) 649 Store(n044, Index(p000, tmp)) Increment(tmp) 650 Store(n045, Index(p000, tmp)) Increment(tmp) 651 Store(n046, Index(p000, tmp)) Increment(tmp) 652 Store(n047, Index(p000, tmp)) Increment(tmp) 653 Store(n048, Index(p000, tmp)) Increment(tmp) 654 Store(n049, Index(p000, tmp)) Increment(tmp) 655 Store(n050, Index(p000, tmp)) Increment(tmp) 656 Store(n051, Index(p000, tmp)) Increment(tmp) 657 Store(n052, Index(p000, tmp)) Increment(tmp) 658 Store(n053, Index(p000, tmp)) Increment(tmp) 659 Store(n054, Index(p000, tmp)) Increment(tmp) 660 Store(n055, Index(p000, tmp)) Increment(tmp) 661 Store(n056, Index(p000, tmp)) Increment(tmp) 662 Store(n057, Index(p000, tmp)) Increment(tmp) 663 Store(n058, Index(p000, tmp)) Increment(tmp) 664 Store(n059, Index(p000, tmp)) Increment(tmp) 665 Store(n060, Index(p000, tmp)) Increment(tmp) 666 Store(n061, Index(p000, tmp)) Increment(tmp) 667 Store(n062, Index(p000, tmp)) Increment(tmp) 668 Store(n063, Index(p000, tmp)) Increment(tmp) 669 Store(n064, Index(p000, tmp)) Increment(tmp) 670 Store(n065, Index(p000, tmp)) Increment(tmp) 671 Store(n066, Index(p000, tmp)) Increment(tmp) 672 Store(n067, Index(p000, tmp)) Increment(tmp) 673 Store(n068, Index(p000, tmp)) Increment(tmp) 674 Store(n069, Index(p000, tmp)) Increment(tmp) 675 Store(n070, Index(p000, tmp)) Increment(tmp) 676 Store(n071, Index(p000, tmp)) Increment(tmp) 677 Store(n072, Index(p000, tmp)) Increment(tmp) 678 Store(n073, Index(p000, tmp)) Increment(tmp) 679 Store(n074, Index(p000, tmp)) Increment(tmp) 680 Store(n075, Index(p000, tmp)) Increment(tmp) 681 Store(n076, Index(p000, tmp)) Increment(tmp) 682 Store(n077, Index(p000, tmp)) Increment(tmp) 683 Store(n078, Index(p000, tmp)) Increment(tmp) 684 Store(n079, Index(p000, tmp)) Increment(tmp) 685 Store(n080, Index(p000, tmp)) Increment(tmp) 686 Store(n081, Index(p000, tmp)) Increment(tmp) 687 Store(n082, Index(p000, tmp)) Increment(tmp) 688 Store(n083, Index(p000, tmp)) Increment(tmp) 689 Store(n084, Index(p000, tmp)) Increment(tmp) 690 Store(n085, Index(p000, tmp)) Increment(tmp) 691 Store(n086, Index(p000, tmp)) Increment(tmp) 692 Store(n087, Index(p000, tmp)) Increment(tmp) 693 Store(n088, Index(p000, tmp)) Increment(tmp) 694 Store(n089, Index(p000, tmp)) Increment(tmp) 695 Store(n090, Index(p000, tmp)) Increment(tmp) 696 Store(n091, Index(p000, tmp)) Increment(tmp) 697 Store(n092, Index(p000, tmp)) Increment(tmp) 698 Store(n093, Index(p000, tmp)) Increment(tmp) 699 Store(n094, Index(p000, tmp)) Increment(tmp) 700 Store(n095, Index(p000, tmp)) Increment(tmp) 701 Store(n096, Index(p000, tmp)) Increment(tmp) 702 Store(n097, Index(p000, tmp)) Increment(tmp) 703 Store(n098, Index(p000, tmp)) Increment(tmp) 704 Store(n099, Index(p000, tmp)) Increment(tmp) 705 Store(n100, Index(p000, tmp)) Increment(tmp) 706 707 m0cc(ts, p000, nsz0) 708} 709 710// Timer with LocalX 711Method(m0cf,, Serialized) 712{ 713 Name(ts, "m0cf") 714 715 Store("TEST: m0cf, Timer with LocalX", Debug) 716 717 Name(nsz0, 101) 718 Name(n000, 0) 719 Name(tmp, 0) 720 Name(last, 0) 721 Name(dlta, 0) 722 723 Store(nsz0, n000) 724 725 Name(p000, Package(n000) {}) 726 727 While (n000) { 728 729 Store(Timer, Local0) 730 Store(Timer, Local1) 731 Store(Timer, Local2) 732 Store(Timer, Local3) 733 Store(Timer, Local4) 734 Store(Timer, Local5) 735 Store(Timer, Local6) 736 Store(Timer, Local7) 737 738 // Eliminate delta due to the storage into Package 739 740 if (last) { 741 Subtract(Local0, last, dlta) 742 743 Subtract(Local0, dlta, Local0) 744 Subtract(Local1, dlta, Local1) 745 Subtract(Local2, dlta, Local2) 746 Subtract(Local3, dlta, Local3) 747 Subtract(Local4, dlta, Local4) 748 Subtract(Local5, dlta, Local5) 749 Subtract(Local6, dlta, Local6) 750 Subtract(Local7, dlta, Local7) 751 } 752 753 Store(Local0, Index(p000, tmp)) Increment(tmp) 754 if (LGreaterEqual(tmp, nsz0)) { 755 break 756 } 757 Store(Local1, Index(p000, tmp)) Increment(tmp) 758 if (LGreaterEqual(tmp, nsz0)) { 759 break 760 } 761 Store(Local2, Index(p000, tmp)) Increment(tmp) 762 if (LGreaterEqual(tmp, nsz0)) { 763 break 764 } 765 Store(Local3, Index(p000, tmp)) Increment(tmp) 766 if (LGreaterEqual(tmp, nsz0)) { 767 break 768 } 769 Store(Local4, Index(p000, tmp)) Increment(tmp) 770 if (LGreaterEqual(tmp, nsz0)) { 771 break 772 } 773 Store(Local5, Index(p000, tmp)) Increment(tmp) 774 if (LGreaterEqual(tmp, nsz0)) { 775 break 776 } 777 Store(Local6, Index(p000, tmp)) Increment(tmp) 778 if (LGreaterEqual(tmp, nsz0)) { 779 break 780 } 781 Store(Local7, Index(p000, tmp)) Increment(tmp) 782 if (LGreaterEqual(tmp, nsz0)) { 783 break 784 } 785 786 Store(Local7, last) 787 788 Decrement(n000) 789 } 790 791 m0cc(ts, p000, nsz0) 792} 793 794// Run-method 795Method(TIM0) 796{ 797 Store("TEST: TIM0, Timing operators", Debug) 798 799 m0c9() 800 m0ca() 801 m0cb() 802 m0cd() 803 m0ce() 804 m0cf() 805} 806