• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /barrelfish-2018-10-04/lib/acpica/tests/aslts/src/runtime/collections/functional/control/
1/*
2 * Some or all of this work - Copyright (c) 2006 - 2016, 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 actualy 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, 0, 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, 1, 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, 2, 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