• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /barrelfish-2018-10-04/lib/acpica/tests/aslts/src/runtime/collections/functional/control/Recursion/
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 * Check recursive calls to methods
31 *
32 * recursively called methods may have internal NS objects and Switch operations
33 */
34
35Name(z177, 177)
36
37/*
38 * Simplest example of recursive calls of methods
39 * not overburden with the additional checkings.
40 *
41 * When the method m100 is invoked last time (44-th invocation),
42 * we have there the following hierarchy of method calls - 45 method
43 * invocations in progress:
44 *
45 *   m100  ...
46 *   m200  ... ...
47 *   m300  ... ... ... ...
48 *   m400  ... ... ... ... ... ... ... ...
49 *
50 * The sequence of invocations is this:
51 *
52 *   m100  0,22,44
53 *   m200  1,11,21  23,33,43
54 *   m300  2, 6,10  12,16,20  24,28,32  34,38,42
55 *   m400  3, 4, 5   7, 8, 9  13,14,15  17,18,19  25,26,27  29,30,31  35,36,37  39,40,41
56 */
57Method(m0ef,, Serialized)
58{
59	Name(ts, "m0ef")
60
61	Name(rpt0, 0)
62
63	/*
64	 * Total number of calls of the same Recursively Called method (RCM),
65	 * the first call is counted there too.
66	 */
67	Name(n000, 3)
68
69	Name(cnt0, 0) // how many methods are in progress simultaneously
70	Name(max0, 0) // maximal number of methods being in progress simultaneously
71
72	/*
73	 * Open method execution
74	 *
75	 * arg0 - ID of method (1,2,3...)
76	 * arg1 - the message to be reported
77	 */
78	Method(m800, 2)
79	{
80		if (rpt0) {
81			Store(arg1, Debug)
82		}
83		Increment(cnt0)
84
85		if (LGreater(cnt0, max0)) {
86			Store(cnt0, max0)
87		}
88	}
89
90	/*
91	 * Close method execution
92	 *
93	 * arg0 - ID of method (1,2,3...)
94	 */
95	Method(m801, 1)
96	{
97		Decrement(cnt0)
98	}
99
100	/*
101	 * Arguments of methods:
102	 * arg0 - 0 - the first call, otherwise - recursive calls
103	 */
104
105	Name(c000, 3)
106
107	Method(m100,, Serialized)
108	{
109		Name(c100, 3)
110		Method(m200,, Serialized)
111		{
112			Name(c200, 3)
113			Method(m300,, Serialized)
114			{
115				Name(c300, 3)
116				Method(m400)
117				{
118					m800(4, "m400")
119					Decrement(c300)
120					if (LEqual(c300, 0)) {
121						m300()
122					} else {
123						m400()
124					}
125					m801(4)
126				}
127				m800(3, "m300")
128				Decrement(c200)
129				if (LEqual(c200, 0)) {
130					m200()
131				} else {
132					m400()
133				}
134				m801(3)
135			}
136			m800(2, "m200")
137			Decrement(c100)
138			if (LEqual(c100, 0)) {
139				m100()
140			} else {
141				m300()
142			}
143			m801(2)
144		}
145		m800(1, "m100")
146		Decrement(c000)
147		if (LEqual(c000, 0)) {
148			// m000()
149		} else {
150			m200()
151		}
152		m801(1)
153	}
154
155	CH03(ts, z177, 0x000, 0, 0)
156
157	m100()
158
159	Concatenate("Maximal number of methods being in progress simultaneously ", max0, Debug)
160
161	/* Check Maximal number of methods being in progress simultaneously */
162	if (LNotEqual(max0, 45)) {
163		err(ts, z177, 0x001, 0, 0, max0, 45)
164	}
165
166	/* Overall got out of methods the same number as got into methods */
167	if (LNotEqual(cnt0, 0)) {
168		err(ts, z177, 0x002, 0, 0, cnt0, 0)
169	}
170
171	CH03(ts, z177, 0x003, 0, 0)
172}
173
174/*
175 * The same hierarchy of recursive calls like m0ef
176 * but more checkings added.
177 */
178Method(m0fb,, Serialized)
179{
180	Name(ts, "m0fb")
181
182	Name(rpt0, 0)
183
184	/*
185	 * Total number of calls of the same Recursively Called method (RCM),
186	 * the first call is counted there too.
187	 */
188	Name(n000, 3)
189
190	Name(cnt0, 0) // how many methods are in progress simultaneously
191	Name(max0, 0) // maximal number of methods being in progress simultaneously
192	Name(cnt1, 0) // summary of total indexes
193
194	Name(ix00, 0) // total index of current call
195	Name(ind1, 0) // index of call to m100
196	Name(ind2, 0) // index of call to m200
197	Name(ind3, 0) // index of call to m300
198	Name(ind4, 0) // index of call to m400
199
200	Name(n100,  3) // number of calls to m100
201	Name(n200,  6) // number of calls to m200
202	Name(n300, 12) // number of calls to m300
203	Name(n400, 24) // number of calls to m400
204
205	Name(p100, Package(n100) {}) // Package to keep total indexs of call to m100
206	Name(p200, Package(n200) {}) // Package to keep total indexs of call to m200
207	Name(p300, Package(n300) {}) // Package to keep total indexs of call to m300
208	Name(p400, Package(n400) {}) // Package to keep total indexs of call to m400
209
210	// Benchmarks of indexes
211	Name(b1b0, Buffer(n100) {0,22,44})
212	Name(b2b0, Buffer(n200) {1,11,21,  23,33,43})
213	Name(b3b0, Buffer(n300) {2, 6,10,  12,16,20,  24,28,32,  34,38,42})
214	Name(b4b0, Buffer(n400) {3, 4, 5,   7, 8, 9,  13,14,15,  17,18,19,
215					25,26,27,  29,30,31,  35,36,37,  39,40,41})
216
217	/*
218	 * Open method execution
219	 *
220	 * arg0 - ID of method (1,2,3...)
221	 * arg1 - the message to be reported
222	 */
223	Method(m800, 2)
224	{
225		if (rpt0) {
226			Store(arg1, Debug)
227		}
228		Increment(cnt0)
229
230		if (LGreater(cnt0, max0)) {
231			Store(cnt0, max0)
232		}
233
234		Switch (arg0) {
235			Case (1) {
236				Store(ix00, Index(p100, ind1))
237				Increment(ind1)
238			}
239			Case (2) {
240				Store(ix00, Index(p200, ind2))
241				Increment(ind2)
242			}
243			Case (3) {
244				Store(ix00, Index(p300, ind3))
245				Increment(ind3)
246			}
247			Case (4) {
248				Store(ix00, Index(p400, ind4))
249				Increment(ind4)
250			}
251		}
252
253		Increment(ix00) // total index
254	}
255
256	/*
257	 * Close method execution
258	 *
259	 * arg0 - ID of method (1,2,3...)
260	 */
261	Method(m801, 1)
262	{
263		Decrement(cnt0)
264	}
265
266	/*
267	 * arg0 - ID of method (1,2,3...)
268	 * arg1 - number of elements to be compared
269	 * arg2 - Package
270	 * arg3 - Package with the benchmark values
271	 */
272	Method(m802, 4) {
273		Name(lpN0, 0)
274		Name(lpC0, 0)
275
276		Store(arg1, lpN0)
277		Store(0, lpC0)
278
279		While (lpN0) {
280
281			Store(DeRefOf(Index(arg2, lpC0)), Local0)
282			Store(DeRefOf(Index(arg3, lpC0)), Local1)
283			if (LNotEqual(Local0, Local1)) {
284				err(ts, z177, 0x004, 0, 0, Local0, Local1)
285				Store(arg0, Debug)
286				Store(lpC0, Debug)
287			}
288			Decrement(lpN0)
289			Increment(lpC0)
290		}
291
292		Switch (arg0) {
293			Case (1) {
294				if (LNotEqual(ind1, n100)) {
295					err(ts, z177, 0x005, 0, 0, ind1, n100)
296				}
297			}
298			Case (2) {
299				if (LNotEqual(ind2, n200)) {
300					err(ts, z177, 0x006, 0, 0, ind2, n200)
301				}
302			}
303			Case (3) {
304				if (LNotEqual(ind3, n300)) {
305					err(ts, z177, 0x007, 0, 0, ind3, n300)
306				}
307			}
308			Case (4) {
309				if (LNotEqual(ind4, n400)) {
310					err(ts, z177, 0x008, 0, 0, ind4, n400)
311				}
312			}
313		}
314	}
315
316	/*
317	 * Arguments of methods:
318	 * arg0 - 0 - the first call, otherwise - recursive calls
319	 */
320
321	Name(c000, 3)
322
323	Method(m100)
324	{
325		Name(ii00, 0)
326
327		Name(c100, 3)
328		Method(m200)
329		{
330			Name(ii00, 0)
331
332			Name(c200, 3)
333			Method(m300)
334			{
335				Name(ii00, 0)
336
337				Name(c300, 3)
338				Method(m400)
339				{
340					Name(ii00, 0)
341
342					Store(ind4, ii00)
343					Store(ix00, Local0)
344					m800(4, "m400")
345					Decrement(c300)
346					Switch (c300) {
347						Case (0) {
348							m300()
349						}
350						Default {
351							m400()
352						}
353					}
354					m801(4)
355					Add(cnt1, Local0, cnt1)
356					Store(DerefOf(Index(p400, ii00)), ii00)
357					if (LNotEqual(ii00, Local0)) {
358						err(ts, z177, 0x009, 0, 0, ii00, Local0)
359					}
360				}
361				Store(ind3, ii00)
362				Store(ix00, Local0)
363				m800(3, "m300")
364				Decrement(c200)
365				Switch (c200) {
366					Case (0) {
367						m200()
368					}
369					Default {
370						m400()
371					}
372				}
373				m801(3)
374				Add(cnt1, Local0, cnt1)
375				Store(DerefOf(Index(p300, ii00)), ii00)
376				if (LNotEqual(ii00, Local0)) {
377					err(ts, z177, 0x00a, 0, 0, ii00, Local0)
378				}
379			}
380			Store(ind2, ii00)
381			Store(ix00, Local0)
382			m800(2, "m200")
383			Decrement(c100)
384			Switch (c100) {
385				Case (0) {
386					m100()
387				}
388				Default {
389					m300()
390				}
391			}
392			m801(2)
393			Add(cnt1, Local0, cnt1)
394			Store(DerefOf(Index(p200, ii00)), ii00)
395			if (LNotEqual(ii00, Local0)) {
396				err(ts, z177, 0x00b, 0, 0, ii00, Local0)
397			}
398		}
399		Store(ind1, ii00)
400		Store(ix00, Local0)
401		m800(1, "m100")
402		Decrement(c000)
403		Switch (c000) {
404			Case (0) {
405				// m000()
406			}
407			Default {
408				m200()
409			}
410		}
411		m801(1)
412		Add(cnt1, Local0, cnt1)
413		Store(DerefOf(Index(p100, ii00)), ii00)
414		if (LNotEqual(ii00, Local0)) {
415			err(ts, z177, 0x00c, 0, 0, ii00, Local0)
416		}
417	}
418
419	CH03(ts, z177, 0x00d, 0, 0)
420
421	m100()
422
423	Concatenate("Maximal number of methods being in progress simultaneously ", max0, Debug)
424
425	/* Check Maximal number of methods being in progress simultaneously */
426	if (LNotEqual(max0, 45)) {
427		err(ts, z177, 0x00e, 0, 0, max0, 45)
428	}
429
430	/* Overall got out of methods the same number as got into methods */
431	if (LNotEqual(cnt0, 0)) {
432		err(ts, z177, 0x00f, 0, 0, cnt0, 0)
433	}
434
435	/* Check indexes */
436	m802(1, n100, p100, b1b0)
437	m802(2, n200, p200, b2b0)
438	m802(3, n300, p300, b3b0)
439	m802(4, n400, p400, b4b0)
440
441
442	/* Check the overall sum of total indexes */
443	if (LNotEqual(cnt1, 0x3DE)) {
444		err(ts, z177, 0x010, 0, 0, cnt1, 0x3DE)
445	}
446
447	CH03(ts, z177, 0x011, 0, 0)
448}
449
450/*
451 * The same hierarchy of recursive calls like m0ef
452 * but deeper.
453 */
454Method(m0ff, 1, Serialized)
455{
456	Name(ts, "m0ff")
457
458	Name(rpt0, 0)
459
460	Name(i000, 0)
461
462	/*
463	 * Total number of calls of the same Recursively Called method (RCM),
464	 * the first call is counted there too.
465	 */
466	Name(n000, 3)
467
468	Name(cnt0, 0) // how many methods are in progress simultaneously
469	Name(max0, 0) // maximal number of methods being in progress simultaneously
470
471	/*
472	 * Open method execution
473	 *
474	 * arg0 - ID of method (1,2,3...)
475	 * arg1 - the message to be reported
476	 */
477	Method(m800, 2)
478	{
479		if (rpt0) {
480			Store(arg1, Debug)
481		}
482		Increment(cnt0)
483
484		if (LGreater(cnt0, max0)) {
485			Store(cnt0, max0)
486		}
487	}
488
489	/*
490	 * Close method execution
491	 *
492	 * arg0 - ID of method (1,2,3...)
493	 */
494	Method(m801, 1)
495	{
496		Decrement(cnt0)
497	}
498
499	/*
500	 * Arguments of methods:
501	 * arg0 - 0 - the first call, otherwise - recursive calls
502	 */
503
504	Name(c000, 3)
505
506	Method(m100,, Serialized)
507	{
508		Name(c100, 3)
509		Method(m200,, Serialized)
510		{
511			Name(c200, 3)
512			Method(m300,, Serialized)
513			{
514				Name(c300, 3)
515				Method(m400,, Serialized)
516				{
517					Name(c400, 3)
518					Method(m500,, Serialized)
519					{
520						Name(c500, 4)
521						Method(m600)
522						{
523							m800(6, "m600")
524							Decrement(c500)
525							if (LEqual(c500, 0)) {
526								m500()
527							} else {
528								m600()
529							}
530							m801(6)
531						}
532						m800(5, "m500")
533						Decrement(c400)
534						if (LEqual(c400, 0)) {
535							m400()
536						} else {
537							m600()
538						}
539						m801(5)
540					}
541					if (i000) {
542						Store(4, c400)
543					}
544					m800(4, "m400")
545					Decrement(c300)
546					if (LEqual(c300, 0)) {
547						m300()
548					} else {
549						m500()
550					}
551					m801(4)
552				}
553				m800(3, "m300")
554				Decrement(c200)
555				if (LEqual(c200, 0)) {
556					m200()
557				} else {
558					m400()
559				}
560				m801(3)
561			}
562			m800(2, "m200")
563			Decrement(c100)
564			if (LEqual(c100, 0)) {
565				m100()
566			} else {
567				m300()
568			}
569			m801(2)
570		}
571		m800(1, "m100")
572		Decrement(c000)
573		if (LEqual(c000, 0)) {
574			// m000()
575		} else {
576			m200()
577		}
578		m801(1)
579	}
580
581	CH03(ts, z177, 0x012, 0, 0)
582
583	Store(arg0, i000)
584
585	m100()
586
587	if (arg0) {
588		CH04(ts, 0, 84, z177, 0x013, 0, 0)	// AE_AML_METHOD_LIMIT
589	} else {
590		Concatenate("Maximal number of methods being in progress simultaneously ", max0, Debug)
591
592		/* Check Maximal number of methods being in progress simultaneously */
593		if (LNotEqual(max0, 221)) {
594			err(ts, z177, 0x014, 0, 0, max0, 221)
595		}
596
597		/* Overall got out of methods the same number as got into methods */
598		if (LNotEqual(cnt0, 0)) {
599			err(ts, z177, 0x015, 0, 0, cnt0, 0)
600		}
601	}
602
603	CH03(ts, z177, 0x016, 0, 0)
604}
605
606/*
607 * Similar to m0fb but
608 * all methods are Serialized (0 level all)
609 * and no internal objects (including Methods) or Switches in those Serialized methods
610 *
611 * Check that Serialized method being invoked recursively on the same thread
612 * works well (no exceptions) in case it has none either internal objects
613 * (including Methods) or Switches.
614 */
615Method(m18a, 1, Serialized)
616{
617	Name(ts, "m18a")
618
619	Name(rpt0, 0)
620	Name(i000, 0)
621
622	/*
623	 * Total number of calls of the same Recursively Called method (RCM),
624	 * the first call is counted there too.
625	 */
626	Name(n000, 3)
627
628	Name(cnt0, 0) // how many methods are in progress simultaneously
629	Name(max0, 0) // maximal number of methods being in progress simultaneously
630	Name(cnt1, 0) // summary of total indexes
631
632	Name(ix00, 0) // total index of current call
633	Name(ind1, 0) // index of call to m100
634	Name(ind2, 0) // index of call to m200
635	Name(ind3, 0) // index of call to m300
636	Name(ind4, 0) // index of call to m400
637
638	Name(n100,  3) // number of calls to m100
639	Name(n200,  6) // number of calls to m200
640	Name(n300, 12) // number of calls to m300
641	Name(n400, 24) // number of calls to m400
642
643	Name(p100, Package(n100) {}) // Package to keep total indexs of call to m100
644	Name(p200, Package(n200) {}) // Package to keep total indexs of call to m200
645	Name(p300, Package(n300) {}) // Package to keep total indexs of call to m300
646	Name(p400, Package(0x100) {}) // Package to keep total indexs of call to m400
647
648	// Benchmarks of indexes
649	Name(b1b0, Buffer(n100) {0,22,44})
650	Name(b2b0, Buffer(n200) {1,11,21,  23,33,43})
651	Name(b3b0, Buffer(n300) {2, 6,10,  12,16,20,  24,28,32,  34,38,42})
652	Name(b4b0, Buffer(0x100) {3, 4, 5,   7, 8, 9,  13,14,15,  17,18,19,
653					25,26,27,  29,30,31,  35,36,37,  39,40,41})
654
655	/*
656	 * Open method execution
657	 *
658	 * arg0 - ID of method (1,2,3...)
659	 * arg1 - the message to be reported
660	 */
661	Method(m800, 2)
662	{
663		if (rpt0) {
664			Store(arg1, Debug)
665		}
666		Increment(cnt0)
667
668		if (LGreater(cnt0, max0)) {
669			Store(cnt0, max0)
670		}
671
672		Switch (arg0) {
673			Case (1) {
674				Store(ix00, Index(p100, ind1))
675				Increment(ind1)
676			}
677			Case (2) {
678				Store(ix00, Index(p200, ind2))
679				Increment(ind2)
680			}
681			Case (3) {
682				Store(ix00, Index(p300, ind3))
683				Increment(ind3)
684			}
685			Case (4) {
686				Store(ix00, Index(p400, ind4))
687				Increment(ind4)
688			}
689		}
690
691		Increment(ix00) // total index
692	}
693
694	/*
695	 * Close method execution
696	 *
697	 * arg0 - ID of method (1,2,3...)
698	 */
699	Method(m801, 1)
700	{
701		Decrement(cnt0)
702	}
703
704	/*
705	 * arg0 - ID of method (1,2,3...)
706	 * arg1 - number of elements to be compared
707	 * arg2 - Package
708	 * arg3 - Package with the benchmark values
709	 */
710	Method(m802, 4) {
711		Name(lpN0, 0)
712		Name(lpC0, 0)
713
714		Store(arg1, lpN0)
715		Store(0, lpC0)
716
717		While (lpN0) {
718
719			Store(DeRefOf(Index(arg2, lpC0)), Local0)
720			Store(DeRefOf(Index(arg3, lpC0)), Local1)
721			if (LNotEqual(Local0, Local1)) {
722				err(ts, z177, 0x017, 0, 0, Local0, Local1)
723				Store(arg0, Debug)
724				Store(lpC0, Debug)
725			}
726			Decrement(lpN0)
727			Increment(lpC0)
728		}
729
730		Switch (arg0) {
731			Case (1) {
732				if (LNotEqual(ind1, n100)) {
733					err(ts, z177, 0x018, 0, 0, ind1, n100)
734				}
735			}
736			Case (2) {
737				if (LNotEqual(ind2, n200)) {
738					err(ts, z177, 0x019, 0, 0, ind2, n200)
739				}
740			}
741			Case (3) {
742				if (LNotEqual(ind3, n300)) {
743					err(ts, z177, 0x01a, 0, 0, ind3, n300)
744				}
745			}
746			Case (4) {
747				if (LNotEqual(ind4, n400)) {
748					err(ts, z177, 0x01b, 0, 0, ind4, n400)
749				}
750			}
751		}
752	}
753
754	/*
755	 * Arguments of methods:
756	 * arg0 - 0 - the first call, otherwise - recursive calls
757	 */
758
759	Name(c000, 3)
760	Name(c100, 3)
761	Name(c200, 3)
762	Name(c300, 3)
763
764	/*
765	 * None internal objects (including Methods) or Switches in Serialized methods below
766	 *
767	 * Note: if Serialized method has internal objects (including Methods and Switches)
768	 *       it could not be invoked recursively by the same thread.
769	 */
770	Method(m100, 0, Serialized, 0)
771	{
772		Store(3, c100)
773		Store(ind1, Local1)
774		Store(ix00, Local0)
775		m800(1, "m100")
776		Decrement(c000)
777		if (LEqual(c000, 0)) {
778			// m000()
779		} else {
780			m200()
781		}
782		m801(1)
783		Add(cnt1, Local0, cnt1)
784		Store(DerefOf(Index(p100, Local1)), Local1)
785		if (LNotEqual(Local1, Local0)) {
786			err(ts, z177, 0x01c, 0, 0, Local1, Local0)
787		}
788	}
789	Method(m200, 0, Serialized, 0)
790	{
791		Store(3, c200)
792		Store(ind2, Local1)
793		Store(ix00, Local0)
794		m800(2, "m200")
795		Decrement(c100)
796		if (LEqual(c100, 0)) {
797			m100()
798		} else {
799			m300()
800		}
801		m801(2)
802		Add(cnt1, Local0, cnt1)
803		Store(DerefOf(Index(p200, Local1)), Local1)
804		if (LNotEqual(Local1, Local0)) {
805			err(ts, z177, 0x01d, 0, 0, Local1, Local0)
806		}
807	}
808	Method(m300, 0, Serialized, 0)
809	{
810		if (i000) {
811			Store(31, c300)
812		} else {
813			Store(3, c300)
814		}
815
816		Store(ind3, Local1)
817		Store(ix00, Local0)
818		m800(3, "m300")
819		Decrement(c200)
820		if (LEqual(c200, 0)) {
821			m200()
822		} else {
823			m400()
824		}
825		m801(3)
826		Add(cnt1, Local0, cnt1)
827		Store(DerefOf(Index(p300, Local1)), Local1)
828		if (LNotEqual(Local1, Local0)) {
829			err(ts, z177, 0x01e, 0, 0, Local1, Local0)
830		}
831	}
832	Method(m400, 0, Serialized, 0)
833	{
834		Store(ind4, Local1)
835		Store(ix00, Local0)
836		m800(4, "m400")
837		Decrement(c300)
838		if (LEqual(c300, 0)) {
839			m300()
840		} else {
841			m400()
842		}
843		m801(4)
844		Add(cnt1, Local0, cnt1)
845		Store(DerefOf(Index(p400, Local1)), Local1)
846		if (LNotEqual(Local1, Local0)) {
847			err(ts, z177, 0x01f, 0, 0, Local1, Local0)
848		}
849	}
850
851	CH03(ts, z177, 0x020, 0, 0)
852
853	Store(arg0, i000)
854
855	m100()
856
857	Concatenate("Maximal number of methods being in progress simultaneously ", max0, Debug)
858
859	if (arg0) {
860		CH04(ts, 0, 84, z177, 0x113, 0, 0)	// AE_AML_METHOD_LIMIT
861	} else {
862
863		/* Check Maximal number of methods being in progress simultaneously */
864		if (LNotEqual(max0, 45)) {
865			err(ts, z177, 0x021, 0, 0, max0, 45)
866		}
867
868		/* Overall got out of methods the same number as got into methods */
869		if (LNotEqual(cnt0, 0)) {
870			err(ts, z177, 0x022, 0, 0, cnt0, 0)
871		}
872
873		/* Check indexes */
874		m802(1, n100, p100, b1b0)
875		m802(2, n200, p200, b2b0)
876		m802(3, n300, p300, b3b0)
877		m802(4, n400, p400, b4b0)
878
879
880		/* Check the overall sum of total indexes */
881		if (LNotEqual(cnt1, 0x3DE)) {
882			err(ts, z177, 0x023, 0, 0, cnt1, 0x3DE)
883		}
884	}
885	CH03(ts, z177, 0x024, 0, 0)
886}
887
888/*
889 * The same as m18a the level of Serialized methods is non-zero (7 level all)
890 */
891Method(m18b, 1, Serialized)
892{
893	Name(ts, "m18b")
894	Name(i000, 0)
895
896	Name(rpt0, 0)
897
898	/*
899	 * Total number of calls of the same Recursively Called method (RCM),
900	 * the first call is counted there too.
901	 */
902	Name(n000, 3)
903
904	Name(cnt0, 0) // how many methods are in progress simultaneously
905	Name(max0, 0) // maximal number of methods being in progress simultaneously
906	Name(cnt1, 0) // summary of total indexes
907
908	Name(ix00, 0) // total index of current call
909	Name(ind1, 0) // index of call to m100
910	Name(ind2, 0) // index of call to m200
911	Name(ind3, 0) // index of call to m300
912	Name(ind4, 0) // index of call to m400
913
914	Name(n100,  3) // number of calls to m100
915	Name(n200,  6) // number of calls to m200
916	Name(n300, 12) // number of calls to m300
917	Name(n400, 24) // number of calls to m400
918
919	Name(p100, Package(n100) {}) // Package to keep total indexs of call to m100
920	Name(p200, Package(n200) {}) // Package to keep total indexs of call to m200
921	Name(p300, Package(n300) {}) // Package to keep total indexs of call to m300
922	Name(p400, Package(0x100) {}) // Package to keep total indexs of call to m400
923
924	// Benchmarks of indexes
925	Name(b1b0, Buffer(n100) {0,22,44})
926	Name(b2b0, Buffer(n200) {1,11,21,  23,33,43})
927	Name(b3b0, Buffer(n300) {2, 6,10,  12,16,20,  24,28,32,  34,38,42})
928	Name(b4b0, Buffer(0x100) {3, 4, 5,   7, 8, 9,  13,14,15,  17,18,19,
929					25,26,27,  29,30,31,  35,36,37,  39,40,41})
930
931	/*
932	 * Open method execution
933	 *
934	 * arg0 - ID of method (1,2,3...)
935	 * arg1 - the message to be reported
936	 */
937	Method(m800, 2)
938	{
939		if (rpt0) {
940			Store(arg1, Debug)
941		}
942		Increment(cnt0)
943
944		if (LGreater(cnt0, max0)) {
945			Store(cnt0, max0)
946		}
947
948		/*
949		 * Don't use Switch() here because we want this method to
950		 * be reentrant.
951		 */
952		if (LEqual(arg0, 1)) {
953			Store(ix00, Index(p100, ind1))
954			Increment(ind1)
955		} else {
956			if (LEqual(arg0, 2)) {
957				Store(ix00, Index(p200, ind2))
958				Increment(ind2)
959			} else {
960				if (LEqual(arg0, 3)) {
961					Store(ix00, Index(p300, ind3))
962					Increment(ind3)
963				} else {
964					if (LEqual(arg0, 4)) {
965						Store(ix00, Index(p400, ind4))
966						Increment(ind4)
967					}
968				}
969			}
970		}
971
972		Increment(ix00) // total index
973	}
974
975	/*
976	 * Close method execution
977	 *
978	 * arg0 - ID of method (1,2,3...)
979	 */
980	Method(m801, 1)
981	{
982		Decrement(cnt0)
983	}
984
985	/*
986	 * arg0 - ID of method (1,2,3...)
987	 * arg1 - number of elements to be compared
988	 * arg2 - Package
989	 * arg3 - Package with the benchmark values
990	 */
991	Method(m802, 4) {
992		Name(lpN0, 0)
993		Name(lpC0, 0)
994
995		Store(arg1, lpN0)
996		Store(0, lpC0)
997
998		While (lpN0) {
999
1000			Store(DeRefOf(Index(arg2, lpC0)), Local0)
1001			Store(DeRefOf(Index(arg3, lpC0)), Local1)
1002			if (LNotEqual(Local0, Local1)) {
1003				err(ts, z177, 0x025, 0, 0, Local0, Local1)
1004				Store(arg0, Debug)
1005				Store(lpC0, Debug)
1006			}
1007			Decrement(lpN0)
1008			Increment(lpC0)
1009		}
1010
1011		Switch (arg0) {
1012			Case (1) {
1013				if (LNotEqual(ind1, n100)) {
1014					err(ts, z177, 0x026, 0, 0, ind1, n100)
1015				}
1016			}
1017			Case (2) {
1018				if (LNotEqual(ind2, n200)) {
1019					err(ts, z177, 0x027, 0, 0, ind2, n200)
1020				}
1021			}
1022			Case (3) {
1023				if (LNotEqual(ind3, n300)) {
1024					err(ts, z177, 0x028, 0, 0, ind3, n300)
1025				}
1026			}
1027			Case (4) {
1028				if (LNotEqual(ind4, n400)) {
1029					err(ts, z177, 0x029, 0, 0, ind4, n400)
1030				}
1031			}
1032		}
1033	}
1034
1035	/*
1036	 * Arguments of methods:
1037	 * arg0 - 0 - the first call, otherwise - recursive calls
1038	 */
1039
1040	Name(c000, 3)
1041	Name(c100, 3)
1042	Name(c200, 3)
1043	Name(c300, 3)
1044
1045	/*
1046	 * None internal objects (including Methods) or Switches in Serialized methods below
1047	 *
1048	 * Note: if Serialized method has internal objects (including Methods and Switches)
1049	 *       it could not be invoked recursively by the same thread.
1050	 */
1051	Method(m100, 0, Serialized, 7)
1052	{
1053		Store(3, c100)
1054		Store(ind1, Local1)
1055		Store(ix00, Local0)
1056		m800(1, "m100")
1057		Decrement(c000)
1058		if (LEqual(c000, 0)) {
1059			// m000()
1060		} else {
1061			m200()
1062		}
1063		m801(1)
1064		Add(cnt1, Local0, cnt1)
1065		Store(DerefOf(Index(p100, Local1)), Local1)
1066		if (LNotEqual(Local1, Local0)) {
1067			err(ts, z177, 0x02a, 0, 0, Local1, Local0)
1068		}
1069	}
1070	Method(m200, 0, Serialized, 7)
1071	{
1072		Store(3, c200)
1073		Store(ind2, Local1)
1074		Store(ix00, Local0)
1075		m800(2, "m200")
1076		Decrement(c100)
1077		if (LEqual(c100, 0)) {
1078			m100()
1079		} else {
1080			m300()
1081		}
1082		m801(2)
1083		Add(cnt1, Local0, cnt1)
1084		Store(DerefOf(Index(p200, Local1)), Local1)
1085		if (LNotEqual(Local1, Local0)) {
1086			err(ts, z177, 0x02b, 0, 0, Local1, Local0)
1087		}
1088	}
1089	Method(m300, 0, Serialized, 7)
1090	{
1091		if (i000) {
1092			Store(31, c300)
1093		} else {
1094			Store(3, c300)
1095		}
1096
1097		Store(ind3, Local1)
1098		Store(ix00, Local0)
1099		m800(3, "m300")
1100		Decrement(c200)
1101		if (LEqual(c200, 0)) {
1102			m200()
1103		} else {
1104			m400()
1105		}
1106		m801(3)
1107		Add(cnt1, Local0, cnt1)
1108		Store(DerefOf(Index(p300, Local1)), Local1)
1109		if (LNotEqual(Local1, Local0)) {
1110			err(ts, z177, 0x02c, 0, 0, Local1, Local0)
1111		}
1112	}
1113	Method(m400, 0, Serialized, 7)
1114	{
1115		Store(ind4, Local1)
1116		Store(ix00, Local0)
1117		m800(4, "m400")
1118		Decrement(c300)
1119		if (LEqual(c300, 0)) {
1120			m300()
1121		} else {
1122			m400()
1123		}
1124		m801(4)
1125		Add(cnt1, Local0, cnt1)
1126		Store(DerefOf(Index(p400, Local1)), Local1)
1127		if (LNotEqual(Local1, Local0)) {
1128			err(ts, z177, 0x02d, 0, 0, Local1, Local0)
1129		}
1130	}
1131
1132	CH03(ts, z177, 0x02e, 0, 0)
1133
1134	Store(arg0, i000)
1135
1136	m100()
1137
1138	Concatenate("Maximal number of methods being in progress simultaneously ", max0, Debug)
1139
1140	if (arg0) {
1141		CH04(ts, 0, 84, z177, 0x213, 0, 0)	// AE_AML_METHOD_LIMIT
1142	} else {
1143
1144		/* Check Maximal number of methods being in progress simultaneously */
1145		if (LNotEqual(max0, 45)) {
1146			err(ts, z177, 0x02f, 0, 0, max0, 45)
1147		}
1148
1149		/* Overall got out of methods the same number as got into methods */
1150		if (LNotEqual(cnt0, 0)) {
1151			err(ts, z177, 0x030, 0, 0, cnt0, 0)
1152		}
1153
1154		/* Check indexes */
1155		m802(1, n100, p100, b1b0)
1156		m802(2, n200, p200, b2b0)
1157		m802(3, n300, p300, b3b0)
1158		m802(4, n400, p400, b4b0)
1159
1160
1161		/* Check the overall sum of total indexes */
1162		if (LNotEqual(cnt1, 0x3DE)) {
1163			err(ts, z177, 0x031, 0, 0, cnt1, 0x3DE)
1164		}
1165	}
1166
1167	CH03(ts, z177, 0x032, 0, 0)
1168}
1169
1170
1171/*
1172 * Check that Serialized method being invoked recursively on the same thread
1173 * (causes/ doesn't cause)
1174 * exception in case it has either internal objects (including Methods) or Switches.
1175 */
1176
1177
1178/*
1179 * No internal objects in Serialized method (including Methods and Switches),
1180 * so no exceptions are expected on recursive calls.
1181 */
1182Method(m18d,, Serialized)
1183{
1184	Name(ts, "m18d")
1185
1186	Method(m000, 1, Serialized, 7)
1187	{
1188		if (LNot(arg0)) {
1189			m000(1)
1190		}
1191	}
1192
1193	CH03(ts, z177, 0x033, 0, 0)
1194	m000(0)
1195	CH03(ts, z177, 0x034, 0, 0)
1196}
1197
1198/*
1199 * Serialized method has internal object (Named Integer),
1200 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1201 */
1202Method(m18e,, Serialized)
1203{
1204	Name(ts, "m18e")
1205
1206	Method(m000, 1, Serialized, 7)
1207	{
1208		Name(i000, 0xabcd0000)
1209
1210		if (LNot(arg0)) {
1211			m000(1)
1212		}
1213	}
1214
1215	CH03(ts, z177, 0x035, 0, 0)
1216	m000(0)
1217	if (y902) {
1218		CH04(ts, 0, 7, z177, 0x036, 0, 0)	// AE_ALREADY_EXISTS
1219	} else {
1220		CH03(ts, z177, 0x037, 0, 0)
1221	}
1222}
1223
1224/*
1225 * Serialized method has internal Switch,
1226 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1227 */
1228Method(m18f,, Serialized)
1229{
1230	Name(ts, "m18f")
1231
1232	Method(m000, 1, Serialized, 7)
1233	{
1234		Switch (0) {
1235			Case (0) {
1236				Store("m18f", Debug)
1237			}
1238		}
1239
1240		if (LNot(arg0)) {
1241			m000(1)
1242		}
1243	}
1244
1245	CH03(ts, z177, 0x038, 0, 0)
1246	m000(0)
1247	if (y902) {
1248		CH04(ts, 0, 7, z177, 0x039, 0, 0)	// AE_ALREADY_EXISTS
1249	} else {
1250		CH03(ts, z177, 0x03a, 0, 0)
1251	}
1252}
1253
1254/*
1255 * Serialized method has internal declaration of Method,
1256 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1257 */
1258Method(m19a,, Serialized)
1259{
1260	Name(ts, "m19a")
1261
1262	Method(m000, 1, Serialized, 7)
1263	{
1264		Method(m100) {}
1265
1266		if (LNot(arg0)) {
1267			m000(1)
1268		}
1269	}
1270
1271	CH03(ts, z177, 0x03b, 0, 0)
1272	m000(0)
1273	if (y902) {
1274		CH04(ts, 0, 7, z177, 0x03c, 0, 0)	// AE_ALREADY_EXISTS
1275	} else {
1276		CH03(ts, z177, 0x03d, 0, 0)
1277	}
1278}
1279
1280/*
1281 * Serialized method has internal declaration of Device,
1282 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1283 */
1284Method(m19b,, Serialized)
1285{
1286	Name(ts, "m19b")
1287
1288	Method(m000, 1, Serialized, 7)
1289	{
1290		Device(d000) {}
1291
1292		if (LNot(arg0)) {
1293			m000(1)
1294		}
1295	}
1296
1297	CH03(ts, z177, 0x03e, 0, 0)
1298	m000(0)
1299	if (y902) {
1300		CH04(ts, 0, 7, z177, 0x03f, 0, 0)	// AE_ALREADY_EXISTS
1301	} else {
1302		CH03(ts, z177, 0x040, 0, 0)
1303	}
1304}
1305
1306/*
1307 * It is m0ef but all the relevant methods are Serialized.
1308 * Exceptions are expected.
1309 * Now we have crash there.
1310 */
1311Method(m19c,, Serialized)
1312{
1313	Name(ts, "m19c")
1314
1315	Name(rpt0, 0)
1316
1317	/*
1318	 * Total number of calls of the same Recursively Called method (RCM),
1319	 * the first call is counted there too.
1320	 */
1321	Name(n000, 3)
1322
1323	Name(cnt0, 0) // how many methods are in progress simultaneously
1324	Name(max0, 0) // maximal number of methods being in progress simultaneously
1325
1326	/*
1327	 * Open method execution
1328	 *
1329	 * arg0 - ID of method (1,2,3...)
1330	 * arg1 - the message to be reported
1331	 */
1332	Method(m800, 2)
1333	{
1334		if (rpt0) {
1335			Store(arg1, Debug)
1336		}
1337		Increment(cnt0)
1338
1339		if (LGreater(cnt0, max0)) {
1340			Store(cnt0, max0)
1341		}
1342	}
1343
1344	/*
1345	 * Close method execution
1346	 *
1347	 * arg0 - ID of method (1,2,3...)
1348	 */
1349	Method(m801, 1)
1350	{
1351		Decrement(cnt0)
1352	}
1353
1354	/*
1355	 * Arguments of methods:
1356	 * arg0 - 0 - the first call, otherwise - recursive calls
1357	 */
1358
1359	Name(c000, 3)
1360
1361	Method(m100, 0, Serialized, 9)
1362	{
1363		Name(c100, 3)
1364		Method(m200, 0, Serialized, 9)
1365		{
1366			Name(c200, 3)
1367			Method(m300, 0, Serialized, 9)
1368			{
1369				Name(c300, 3)
1370				Method(m400, 0, Serialized, 9)
1371				{
1372					m800(4, "m400")
1373					Decrement(c300)
1374					if (LEqual(c300, 0)) {
1375						m300()
1376					} else {
1377						m400()
1378					}
1379					m801(4)
1380				}
1381				m800(3, "m300")
1382				Decrement(c200)
1383				if (LEqual(c200, 0)) {
1384					m200()
1385				} else {
1386					m400()
1387				}
1388				m801(3)
1389			}
1390			m800(2, "m200")
1391			Decrement(c100)
1392			if (LEqual(c100, 0)) {
1393				m100()
1394			} else {
1395				m300()
1396			}
1397			m801(2)
1398		}
1399		m800(1, "m100")
1400		Decrement(c000)
1401		if (LEqual(c000, 0)) {
1402			// m000()
1403		} else {
1404			m200()
1405		}
1406		m801(1)
1407	}
1408
1409	CH03(ts, z177, 0x041, 0, 0)
1410	m100()
1411	if (y902) {
1412		CH04(ts, 0, 7, z177, 0x042, 0, 0)	// AE_ALREADY_EXISTS
1413	} else {
1414		CH03(ts, z177, 0x043, 0, 0)
1415	}
1416}
1417
1418
1419/*
1420 * Full-path declarations
1421 */
1422
1423
1424/*
1425 * Non-Serialized method has full-path declaration
1426 */
1427Method(m19d,, Serialized)
1428{
1429	Name(ts, "m19d")
1430
1431	Method(m000, 1, Serialized)
1432	{
1433		Name(\i2z0, 0xabcd0000)
1434
1435		if (LNotEqual(i2z0, 0xabcd0000)) {
1436			err(ts, z177, 0x044, 0, 0, i2z0, 0xabcd0000)
1437		}
1438		if (LNotEqual(\i2z0, 0xabcd0000)) {
1439			err(ts, z177, 0x045, 0, 0, \i2z0, 0xabcd0000)
1440		}
1441
1442		Store(0x12345678, i2z0)
1443		if (LNotEqual(i2z0, 0x12345678)) {
1444			err(ts, z177, 0x046, 0, 0, i2z0, 0x12345678)
1445		}
1446		if (LNotEqual(\i2z0, 0x12345678)) {
1447			err(ts, z177, 0x047, 0, 0, \i2z0, 0x12345678)
1448		}
1449
1450		Store(0x11112222, \i2z0)
1451		if (LNotEqual(i2z0, 0x11112222)) {
1452			err(ts, z177, 0x048, 0, 0, i2z0, 0x11112222)
1453		}
1454		if (LNotEqual(\i2z0, 0x11112222)) {
1455			err(ts, z177, 0x049, 0, 0, \i2z0, 0x11112222)
1456		}
1457	}
1458	CH03(ts, z177, 0x04a, 0, 0)
1459	m000(0)
1460	CH03(ts, z177, 0x04b, 0, 0)
1461
1462	Store(0x11112222, i2z0)
1463
1464	CH04(ts, 1, 5, z177, 0x04c, 0, 0)	// AE_NOT_FOUND
1465
1466	Store(0x11112222, \i2z0)
1467
1468	CH04(ts, 1, 5, z177, 0x04d, 0, 0)	// AE_NOT_FOUND
1469}
1470
1471/*
1472 * Serialized method has full-path declaration
1473 */
1474Method(m19e,, Serialized)
1475{
1476	Name(ts, "m19e")
1477
1478	Method(m000, 1, Serialized, 7)
1479	{
1480		Name(\i2z1, 0xabcd0000)
1481
1482		if (LNotEqual(i2z1, 0xabcd0000)) {
1483			err(ts, z177, 0x04e, 0, 0, i2z1, 0xabcd0000)
1484		}
1485		if (LNotEqual(\i2z1, 0xabcd0000)) {
1486			err(ts, z177, 0x04f, 0, 0, \i2z1, 0xabcd0000)
1487		}
1488
1489		Store(0x12345678, i2z1)
1490		if (LNotEqual(i2z1, 0x12345678)) {
1491			err(ts, z177, 0x050, 0, 0, i2z1, 0x12345678)
1492		}
1493		if (LNotEqual(\i2z1, 0x12345678)) {
1494			err(ts, z177, 0x051, 0, 0, \i2z1, 0x12345678)
1495		}
1496
1497		Store(0x22223333, \i2z1)
1498		if (LNotEqual(i2z1, 0x22223333)) {
1499			err(ts, z177, 0x052, 0, 0, i2z1, 0x22223333)
1500		}
1501		if (LNotEqual(\i2z1, 0x22223333)) {
1502			err(ts, z177, 0x053, 0, 0, \i2z1, 0x22223333)
1503		}
1504	}
1505	CH03(ts, z177, 0x054, 0, 0)
1506	m000(0)
1507	CH03(ts, z177, 0x055, 0, 0)
1508
1509	Store(0x11112222, i2z1)
1510
1511	CH04(ts, 1, 5, z177, 0x056, 0, 0)	// AE_NOT_FOUND
1512
1513	Store(0x11112222, \i2z1)
1514
1515	CH04(ts, 1, 5, z177, 0x057, 0, 0)	// AE_NOT_FOUND
1516}
1517
1518/*
1519 * Non-Serialized method has full-path declaration,
1520 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1521 */
1522Method(m19f,, Serialized)
1523{
1524	Name(ts, "m19f")
1525
1526	Method(m000, 1, Serialized)
1527	{
1528		Name(\i2z2, 0xabcd0002)
1529
1530		if (LNot(arg0)) {
1531			m000(1)
1532		}
1533	}
1534
1535	CH03(ts, z177, 0x058, 0, 0)
1536	m000(0)
1537	CH04(ts, 0, 7, z177, 0x059, 0, 0)	// AE_ALREADY_EXISTS
1538}
1539
1540/*
1541 * Serialized method has full-path declaration,
1542 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1543 */
1544Method(m1b8,, Serialized)
1545{
1546	Name(ts, "m1b8")
1547
1548	Method(m000, 1, Serialized, 7)
1549	{
1550		Name(\i2z3, 0xabcd0003)
1551
1552		if (LNot(arg0)) {
1553			m000(1)
1554		}
1555	}
1556
1557	CH03(ts, z177, 0x05a, 0, 0)
1558	m000(0)
1559	CH04(ts, 0, 7, z177, 0x05b, 0, 0)	// AE_ALREADY_EXISTS
1560}
1561
1562
1563/*
1564 * Scope declarations
1565 */
1566
1567
1568/*
1569 * Non-Serialized method has Scope declaration
1570 */
1571Method(m1b9,, Serialized)
1572{
1573	Name(ts, "m1b9")
1574
1575	Method(m000, 1, Serialized)
1576	{
1577		Scope(\_SB) { Name(i2z4, 0xabcd0004) }
1578	}
1579
1580	CH03(ts, z177, 0x05c, 0, 0)
1581	m000(0)
1582	CH03(ts, z177, 0x05d, 0, 0)
1583}
1584
1585/*
1586 * Serialized method has Scope declaration,
1587 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1588 */
1589Method(m1ba,, Serialized)
1590{
1591	Name(ts, "m1ba")
1592
1593	Method(m000, 1, Serialized, 7)
1594	{
1595		Scope(\_SB) { Name(i2z5, 0xabcd0005) }
1596	}
1597
1598	CH03(ts, z177, 0x05e, 0, 0)
1599	m000(0)
1600	CH03(ts, z177, 0x05f, 0, 0)
1601}
1602
1603/*
1604 * Non-Serialized method has Scope declaration,
1605 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1606 */
1607Method(m1bb,, Serialized)
1608{
1609	Name(ts, "m1bb")
1610
1611	Method(m000, 1, Serialized)
1612	{
1613		Scope(\_SB) { Name(i2z6, 0xabcd0006) }
1614
1615		if (LNot(arg0)) {
1616			m000(1)
1617		}
1618	}
1619
1620	CH03(ts, z177, 0x060, 0, 0)
1621	m000(0)
1622	CH04(ts, 0, 7, z177, 0x061, 0, 0)	// AE_ALREADY_EXISTS
1623}
1624
1625/*
1626 * Serialized method has Scope declaration,
1627 * so AE_ALREADY_EXISTS exception is expected on recursive call.
1628 */
1629Method(m1bc,, Serialized)
1630{
1631	Name(ts, "m1bc")
1632
1633	Method(m000, 1, Serialized, 7)
1634	{
1635		Scope(\_SB) { Name(i2z7, 0xabcd0007) }
1636
1637		if (LNot(arg0)) {
1638			m000(1)
1639		}
1640	}
1641
1642	CH03(ts, z177, 0x062, 0, 0)
1643	m000(0)
1644	CH04(ts, 0, 7, z177, 0x063, 0, 0)	// AE_ALREADY_EXISTS
1645}
1646
1647/*
1648 * Non-Serialized method declares full-path name on first call,
1649 * and allows proper access for the second recursive call too.
1650 */
1651Method(m1bd,, Serialized)
1652{
1653	Name(ts, "m1bd")
1654
1655	Method(m000, 1, Serialized)
1656	{
1657		if (LNot(arg0)) {
1658
1659			Name(\i2z8, 0xabcd0108)
1660
1661			if (LNotEqual(i2z8, 0xabcd0108)) {
1662				err(ts, z177, 0x064, 0, 0, i2z8, 0xabcd0108)
1663			}
1664			if (LNotEqual(\i2z8, 0xabcd0108)) {
1665				err(ts, z177, 0x065, 0, 0, \i2z8, 0xabcd0108)
1666			}
1667		} else {
1668			if (LNotEqual(i2z8, 0x22223333)) {
1669				err(ts, z177, 0x066, 0, 0, i2z8, 0x22223333)
1670			}
1671			if (LNotEqual(\i2z8, 0x22223333)) {
1672				err(ts, z177, 0x067, 0, 0, \i2z8, 0x22223333)
1673			}
1674		}
1675
1676		Store(0x12345678, i2z8)
1677		if (LNotEqual(i2z8, 0x12345678)) {
1678			err(ts, z177, 0x068, 0, 0, i2z8, 0x12345678)
1679		}
1680		if (LNotEqual(\i2z8, 0x12345678)) {
1681			err(ts, z177, 0x069, 0, 0, \i2z8, 0x12345678)
1682		}
1683
1684		Store(0x22223333, \i2z8)
1685		if (LNotEqual(i2z8, 0x22223333)) {
1686			err(ts, z177, 0x06a, 0, 0, i2z8, 0x22223333)
1687		}
1688		if (LNotEqual(\i2z8, 0x22223333)) {
1689			err(ts, z177, 0x06b, 0, 0, \i2z8, 0x22223333)
1690		}
1691
1692		if (LNot(arg0)) {
1693			m000(1)
1694		}
1695
1696		if (arg0) {
1697			if (LNotEqual(i2z8, 0x22223333)) {
1698				err(ts, z177, 0x06c, 0, 0, i2z8, 0x22223333)
1699			}
1700			if (LNotEqual(\i2z8, 0x22223333)) {
1701				err(ts, z177, 0x06d, 0, 0, \i2z8, 0x22223333)
1702			}
1703		} else {
1704			if (LNotEqual(i2z8, 0x66667777)) {
1705				err(ts, z177, 0x06e, 0, 0, i2z8, 0x66667777)
1706			}
1707			if (LNotEqual(\i2z8, 0x66667777)) {
1708				err(ts, z177, 0x06f, 0, 0, \i2z8, 0x66667777)
1709			}
1710		}
1711
1712		if (arg0) {
1713			Store(0x66667777, i2z8)
1714		} else {
1715			Store(0x44445555, i2z8)
1716		}
1717	}
1718
1719	CH03(ts, z177, 0x070, 0, 0)
1720	m000(0)
1721	CH03(ts, z177, 0x071, 0, 0)
1722}
1723
1724/*
1725 * Serialized method declares full-path name on first call,
1726 * and allows proper access for the second recursive call too.
1727 */
1728Method(m1be,, Serialized)
1729{
1730	Name(ts, "m1be")
1731
1732	Method(m000, 1, Serialized, 7)
1733	{
1734		if (LNot(arg0)) {
1735
1736			Name(\i2z9, 0xabcd0109)
1737
1738			if (LNotEqual(i2z9, 0xabcd0109)) {
1739				err(ts, z177, 0x072, 0, 0, i2z9, 0xabcd0109)
1740			}
1741			if (LNotEqual(\i2z9, 0xabcd0109)) {
1742				err(ts, z177, 0x073, 0, 0, \i2z9, 0xabcd0109)
1743			}
1744		} else {
1745			if (LNotEqual(i2z9, 0x22223333)) {
1746				err(ts, z177, 0x074, 0, 0, i2z9, 0x22223333)
1747			}
1748			if (LNotEqual(\i2z9, 0x22223333)) {
1749				err(ts, z177, 0x075, 0, 0, \i2z9, 0x22223333)
1750			}
1751		}
1752
1753		Store(0x12345678, i2z9)
1754		if (LNotEqual(i2z9, 0x12345678)) {
1755			err(ts, z177, 0x076, 0, 0, i2z9, 0x12345678)
1756		}
1757		if (LNotEqual(\i2z9, 0x12345678)) {
1758			err(ts, z177, 0x077, 0, 0, \i2z9, 0x12345678)
1759		}
1760
1761		Store(0x22223333, \i2z9)
1762		if (LNotEqual(i2z9, 0x22223333)) {
1763			err(ts, z177, 0x078, 0, 0, i2z9, 0x22223333)
1764		}
1765		if (LNotEqual(\i2z9, 0x22223333)) {
1766			err(ts, z177, 0x079, 0, 0, \i2z9, 0x22223333)
1767		}
1768
1769		if (LNot(arg0)) {
1770			m000(1)
1771		}
1772
1773		if (arg0) {
1774			if (LNotEqual(i2z9, 0x22223333)) {
1775				err(ts, z177, 0x07a, 0, 0, i2z9, 0x22223333)
1776			}
1777			if (LNotEqual(\i2z9, 0x22223333)) {
1778				err(ts, z177, 0x07b, 0, 0, \i2z9, 0x22223333)
1779			}
1780		} else {
1781			if (LNotEqual(i2z9, 0x66667777)) {
1782				err(ts, z177, 0x07c, 0, 0, i2z9, 0x66667777)
1783			}
1784			if (LNotEqual(\i2z9, 0x66667777)) {
1785				err(ts, z177, 0x07d, 0, 0, \i2z9, 0x66667777)
1786			}
1787		}
1788
1789		if (arg0) {
1790			Store(0x66667777, i2z9)
1791		} else {
1792			Store(0x44445555, i2z9)
1793		}
1794	}
1795
1796	CH03(ts, z177, 0x07e, 0, 0)
1797	m000(0)
1798	CH03(ts, z177, 0x07f, 0, 0)
1799}
1800
1801/*
1802 * Non-Serialized method provides access to the upper level named object,
1803 * for the second recursive call too.
1804 */
1805Method(m1de,, Serialized)
1806{
1807	Name(ts, "m1de")
1808	Name(i3z0, 0xabcd0000)
1809
1810	Method(m000, 1)
1811	{
1812		if (LNot(arg0)) {
1813			if (LNotEqual(i3z0, 0xabcd0000)) {
1814				err(ts, z177, 0x080, 0, 0, i3z0, 0xabcd0000)
1815			}
1816		} else {
1817			if (LNotEqual(i3z0, 0x12345678)) {
1818				err(ts, z177, 0x081, 0, 0, i3z0, 0x12345678)
1819			}
1820		}
1821
1822		Store(0x12345678, i3z0)
1823		if (LNotEqual(i3z0, 0x12345678)) {
1824			err(ts, z177, 0x082, 0, 0, i3z0, 0x12345678)
1825		}
1826
1827		if (LNot(arg0)) {
1828			m000(1)
1829		}
1830
1831		if (arg0) {
1832			if (LNotEqual(i3z0, 0x12345678)) {
1833				err(ts, z177, 0x083, 0, 0, i3z0, 0x12345678)
1834			}
1835		} else {
1836			if (LNotEqual(i3z0, 0x66667777)) {
1837				err(ts, z177, 0x084, 0, 0, i3z0, 0x66667777)
1838			}
1839		}
1840
1841		if (arg0) {
1842			Store(0x66667777, i3z0)
1843		} else {
1844			Store(0x44445555, i3z0)
1845		}
1846	}
1847
1848	CH03(ts, z177, 0x085, 0, 0)
1849	m000(0)
1850	CH03(ts, z177, 0x086, 0, 0)
1851}
1852
1853/*
1854 * Serialized method provides access to the upper level named object,
1855 * for the second recursive call too.
1856 */
1857Method(m1df,, Serialized)
1858{
1859	Name(ts, "m1df")
1860	Name(i3z0, 0xabcd0000)
1861
1862	Method(m000, 1, Serialized, 7)
1863	{
1864		if (LNot(arg0)) {
1865			if (LNotEqual(i3z0, 0xabcd0000)) {
1866				err(ts, z177, 0x087, 0, 0, i3z0, 0xabcd0000)
1867			}
1868		} else {
1869			if (LNotEqual(i3z0, 0x12345678)) {
1870				err(ts, z177, 0x088, 0, 0, i3z0, 0x12345678)
1871			}
1872		}
1873
1874		Store(0x12345678, i3z0)
1875		if (LNotEqual(i3z0, 0x12345678)) {
1876			err(ts, z177, 0x089, 0, 0, i3z0, 0x12345678)
1877		}
1878
1879		if (LNot(arg0)) {
1880			m000(1)
1881		}
1882
1883		if (arg0) {
1884			if (LNotEqual(i3z0, 0x12345678)) {
1885				err(ts, z177, 0x08a, 0, 0, i3z0, 0x12345678)
1886			}
1887		} else {
1888			if (LNotEqual(i3z0, 0x66667777)) {
1889				err(ts, z177, 0x08b, 0, 0, i3z0, 0x66667777)
1890			}
1891		}
1892
1893		if (arg0) {
1894			Store(0x66667777, i3z0)
1895		} else {
1896			Store(0x44445555, i3z0)
1897		}
1898	}
1899
1900	CH03(ts, z177, 0x08c, 0, 0)
1901	m000(0)
1902	CH03(ts, z177, 0x08d, 0, 0)
1903}
1904
1905/*
1906 * Non-Serialized method declares full-path name on first call,
1907 * and allows proper access for the second recursive call too.
1908 */
1909Method(m1ee,, Serialized)
1910{
1911	Name(ts, "m1ee")
1912
1913	Method(m000, 1, Serialized)
1914	{
1915		if (LNot(arg0)) {
1916			Name(\_SB.i0q8, 0xabcd0008)
1917
1918			if (LNotEqual(\_SB.i0q8, 0xabcd0008)) {
1919				err(ts, z177, 0x08e, 0, 0, \_SB.i0q8, 0xabcd0008)
1920			}
1921		} else {
1922			if (LNotEqual(\_SB.i0q8, 0x22223333)) {
1923				err(ts, z177, 0x08f, 0, 0, \_SB.i0q8, 0x22223333)
1924			}
1925		}
1926		Store(0x22223333, \_SB.i0q8)
1927		if (LNotEqual(\_SB.i0q8, 0x22223333)) {
1928			err(ts, z177, 0x090, 0, 0, \_SB.i0q8, 0x22223333)
1929		}
1930
1931		if (LNot(arg0)) {
1932			m000(1)
1933		}
1934
1935		if (arg0) {
1936			if (LNotEqual(\_SB.i0q8, 0x22223333)) {
1937				err(ts, z177, 0x091, 0, 0, \_SB.i0q8, 0x22223333)
1938			}
1939		} else {
1940			if (LNotEqual(\_SB.i0q8, 0x66667777)) {
1941				err(ts, z177, 0x092, 0, 0, \_SB.i0q8, 0x66667777)
1942			}
1943		}
1944		if (arg0) {
1945			Store(0x66667777, \_SB.i0q8)
1946		} else {
1947			Store(0x44445555, \_SB.i0q8)
1948		}
1949	}
1950
1951	CH03(ts, z177, 0x093, 0, 0)
1952	m000(0)
1953	CH03(ts, z177, 0x094, 0, 0)
1954}
1955
1956/*
1957 * Serialized method declares full-path name on first call,
1958 * and allows proper access for the second recursive call too.
1959 */
1960Method(m1ef,, Serialized)
1961{
1962	Name(ts, "m1ef")
1963
1964	Method(m000, 1, Serialized, 7)
1965	{
1966		if (LNot(arg0)) {
1967
1968			Name(\_SB.i0q9, 0xabcd0009)
1969
1970			if (LNotEqual(\_SB.i0q9, 0xabcd0009)) {
1971				err(ts, z177, 0x08e, 0, 0, \_SB.i0q9, 0xabcd0009)
1972			}
1973		} else {
1974			if (LNotEqual(\_SB.i0q9, 0x22223333)) {
1975				err(ts, z177, 0x08f, 0, 0, \_SB.i0q9, 0x22223333)
1976			}
1977		}
1978
1979		Store(0x22223333, \_SB.i0q9)
1980		if (LNotEqual(\_SB.i0q9, 0x22223333)) {
1981			err(ts, z177, 0x090, 0, 0, \_SB.i0q9, 0x22223333)
1982		}
1983
1984		if (LNot(arg0)) {
1985			m000(1)
1986		}
1987
1988		if (arg0) {
1989			if (LNotEqual(\_SB.i0q9, 0x22223333)) {
1990				err(ts, z177, 0x091, 0, 0, \_SB.i0q9, 0x22223333)
1991			}
1992		} else {
1993			if (LNotEqual(\_SB.i0q9, 0x66667777)) {
1994				err(ts, z177, 0x092, 0, 0, \_SB.i0q9, 0x66667777)
1995			}
1996		}
1997
1998		if (arg0) {
1999			Store(0x66667777, \_SB.i0q9)
2000		} else {
2001			Store(0x44445555, \_SB.i0q9)
2002		}
2003	}
2004
2005	CH03(ts, z177, 0x093, 0, 0)
2006	m000(0)
2007	CH03(ts, z177, 0x094, 0, 0)
2008}
2009
2010/*
2011 * Non-Serialized method declares Scope(\_SB) on first call,
2012 * and allows proper access for the second recursive call too.
2013 */
2014Method(m1bf,, Serialized)
2015{
2016	Name(ts, "m1bf")
2017
2018	Method(m000, 1, Serialized)
2019	{
2020		if (LNot(arg0)) {
2021
2022			Scope(\_SB) { Name(i1q8, 0xabcd0008) }
2023
2024			if (LNotEqual(\_SB.i1q8, 0xabcd0008)) {
2025				err(ts, z177, 0x095, 0, 0, \_SB.i1q8, 0xabcd0008)
2026			}
2027		} else {
2028			if (LNotEqual(\_SB.i1q8, 0x22223333)) {
2029				err(ts, z177, 0x096, 0, 0, \_SB.i1q8, 0x22223333)
2030			}
2031		}
2032
2033		Store(0x22223333, \_SB.i1q8)
2034		if (LNotEqual(\_SB.i1q8, 0x22223333)) {
2035			err(ts, z177, 0x097, 0, 0, \_SB.i1q8, 0x22223333)
2036		}
2037
2038		if (LNot(arg0)) {
2039			m000(1)
2040		}
2041
2042		if (arg0) {
2043			if (LNotEqual(\_SB.i1q8, 0x22223333)) {
2044				err(ts, z177, 0x098, 0, 0, \_SB.i1q8, 0x22223333)
2045			}
2046		} else {
2047			if (LNotEqual(\_SB.i1q8, 0x66667777)) {
2048				err(ts, z177, 0x099, 0, 0, \_SB.i1q8, 0x66667777)
2049			}
2050		}
2051		if (arg0) {
2052			Store(0x66667777, \_SB.i1q8)
2053		} else {
2054			Store(0x44445555, \_SB.i1q8)
2055		}
2056	}
2057
2058	CH03(ts, z177, 0x09a, 0, 0)
2059	m000(0)
2060	CH03(ts, z177, 0x09b, 0, 0)
2061}
2062
2063/*
2064 * Serialized method declares Scope(\_SB) on first call,
2065 * and allows proper access for the second recursive call too.
2066 */
2067Method(m1dd,, Serialized)
2068{
2069	Name(ts, "m1dd")
2070
2071	Method(m000, 1, Serialized, 7)
2072	{
2073		if (LNot(arg0)) {
2074
2075			Scope(\_SB) { Name(i1q9, 0xabcd0008) }
2076
2077			if (LNotEqual(\_SB.i1q9, 0xabcd0008)) {
2078				err(ts, z177, 0x09c, 0, 0, \_SB.i1q9, 0xabcd0008)
2079			}
2080		} else {
2081			if (LNotEqual(\_SB.i1q9, 0x22223333)) {
2082				err(ts, z177, 0x09d, 0, 0, \_SB.i1q9, 0x22223333)
2083			}
2084		}
2085
2086		Store(0x22223333, \_SB.i1q9)
2087		if (LNotEqual(\_SB.i1q9, 0x22223333)) {
2088			err(ts, z177, 0x09e, 0, 0, \_SB.i1q9, 0x22223333)
2089		}
2090
2091		if (LNot(arg0)) {
2092			m000(1)
2093		}
2094
2095		if (arg0) {
2096			if (LNotEqual(\_SB.i1q9, 0x22223333)) {
2097				err(ts, z177, 0x09f, 0, 0, \_SB.i1q9, 0x22223333)
2098			}
2099		} else {
2100			if (LNotEqual(\_SB.i1q9, 0x66667777)) {
2101				err(ts, z177, 0x0a0, 0, 0, \_SB.i1q9, 0x66667777)
2102			}
2103		}
2104		if (arg0) {
2105			Store(0x66667777, \_SB.i1q9)
2106		} else {
2107			Store(0x44445555, \_SB.i1q9)
2108		}
2109	}
2110
2111	CH03(ts, z177, 0x0a1, 0, 0)
2112	m000(0)
2113	CH03(ts, z177, 0x0a2, 0, 0)
2114}
2115
2116
2117/*
2118 * Non-Serialized method declares Scope(\) on first call,
2119 * and allows proper access for the second recursive call too.
2120 */
2121Method(m277,, Serialized)
2122{
2123	Name(ts, "m277")
2124
2125	Method(m000, 1, Serialized)
2126	{
2127		if (LNot(arg0)) {
2128
2129			Scope(\) { Name(i3z1, 0xabcd0208) }
2130
2131			if (LNotEqual(i3z1, 0xabcd0208)) {
2132				err(ts, z177, 0x064, 0, 0, i3z1, 0xabcd0208)
2133			}
2134			if (LNotEqual(\i3z1, 0xabcd0208)) {
2135				err(ts, z177, 0x065, 0, 0, \i3z1, 0xabcd0208)
2136			}
2137		} else {
2138			if (LNotEqual(i3z1, 0x22223333)) {
2139				err(ts, z177, 0x066, 0, 0, i3z1, 0x22223333)
2140			}
2141			if (LNotEqual(\i3z1, 0x22223333)) {
2142				err(ts, z177, 0x067, 0, 0, \i3z1, 0x22223333)
2143			}
2144		}
2145
2146		Store(0x12345678, i3z1)
2147		if (LNotEqual(i3z1, 0x12345678)) {
2148			err(ts, z177, 0x068, 0, 0, i3z1, 0x12345678)
2149		}
2150		if (LNotEqual(\i3z1, 0x12345678)) {
2151			err(ts, z177, 0x069, 0, 0, \i3z1, 0x12345678)
2152		}
2153
2154		Store(0x22223333, \i3z1)
2155		if (LNotEqual(i3z1, 0x22223333)) {
2156			err(ts, z177, 0x06a, 0, 0, i3z1, 0x22223333)
2157		}
2158		if (LNotEqual(\i3z1, 0x22223333)) {
2159			err(ts, z177, 0x06b, 0, 0, \i3z1, 0x22223333)
2160		}
2161
2162		if (LNot(arg0)) {
2163			m000(1)
2164		}
2165
2166		if (arg0) {
2167			if (LNotEqual(i3z1, 0x22223333)) {
2168				err(ts, z177, 0x06c, 0, 0, i3z1, 0x22223333)
2169			}
2170			if (LNotEqual(\i3z1, 0x22223333)) {
2171				err(ts, z177, 0x06d, 0, 0, \i3z1, 0x22223333)
2172			}
2173		} else {
2174			if (LNotEqual(i3z1, 0x66667777)) {
2175				err(ts, z177, 0x06e, 0, 0, i3z1, 0x66667777)
2176			}
2177			if (LNotEqual(\i3z1, 0x66667777)) {
2178				err(ts, z177, 0x06f, 0, 0, \i3z1, 0x66667777)
2179			}
2180		}
2181
2182		if (arg0) {
2183			Store(0x66667777, i3z1)
2184		} else {
2185			Store(0x44445555, i3z1)
2186		}
2187	}
2188
2189	CH03(ts, z177, 0x070, 0, 0)
2190	m000(0)
2191	CH03(ts, z177, 0x071, 0, 0)
2192}
2193
2194/*
2195 * Serialized method declares Scope(\) on first call,
2196 * and allows proper access for the second recursive call too.
2197 */
2198Method(m27d,, Serialized)
2199{
2200	Name(ts, "m27d")
2201
2202	Method(m000, 1, Serialized, 7)
2203	{
2204		if (LNot(arg0)) {
2205
2206			Scope(\) { Name(i3z2, 0xabcd0209) }
2207
2208			if (LNotEqual(i3z2, 0xabcd0209)) {
2209				err(ts, z177, 0x072, 0, 0, i3z2, 0xabcd0209)
2210			}
2211			if (LNotEqual(\i3z2, 0xabcd0209)) {
2212				err(ts, z177, 0x073, 0, 0, \i3z2, 0xabcd0209)
2213			}
2214		} else {
2215			if (LNotEqual(i3z2, 0x22223333)) {
2216				err(ts, z177, 0x074, 0, 0, i3z2, 0x22223333)
2217			}
2218			if (LNotEqual(\i3z2, 0x22223333)) {
2219				err(ts, z177, 0x075, 0, 0, \i3z2, 0x22223333)
2220			}
2221		}
2222
2223		Store(0x12345678, i3z2)
2224		if (LNotEqual(i3z2, 0x12345678)) {
2225			err(ts, z177, 0x076, 0, 0, i3z2, 0x12345678)
2226		}
2227		if (LNotEqual(\i3z2, 0x12345678)) {
2228			err(ts, z177, 0x077, 0, 0, \i3z2, 0x12345678)
2229		}
2230
2231		Store(0x22223333, \i3z2)
2232		if (LNotEqual(i3z2, 0x22223333)) {
2233			err(ts, z177, 0x078, 0, 0, i3z2, 0x22223333)
2234		}
2235		if (LNotEqual(\i3z2, 0x22223333)) {
2236			err(ts, z177, 0x079, 0, 0, \i3z2, 0x22223333)
2237		}
2238
2239		if (LNot(arg0)) {
2240			m000(1)
2241		}
2242
2243		if (arg0) {
2244			if (LNotEqual(i3z2, 0x22223333)) {
2245				err(ts, z177, 0x07a, 0, 0, i3z2, 0x22223333)
2246			}
2247			if (LNotEqual(\i3z2, 0x22223333)) {
2248				err(ts, z177, 0x07b, 0, 0, \i3z2, 0x22223333)
2249			}
2250		} else {
2251			if (LNotEqual(i3z2, 0x66667777)) {
2252				err(ts, z177, 0x07c, 0, 0, i3z2, 0x66667777)
2253			}
2254			if (LNotEqual(\i3z2, 0x66667777)) {
2255				err(ts, z177, 0x07d, 0, 0, \i3z2, 0x66667777)
2256			}
2257		}
2258
2259		if (arg0) {
2260			Store(0x66667777, i3z2)
2261		} else {
2262			Store(0x44445555, i3z2)
2263		}
2264	}
2265
2266	CH03(ts, z177, 0x07e, 0, 0)
2267	m000(0)
2268	CH03(ts, z177, 0x07f, 0, 0)
2269}
2270
2271
2272Method(m0ed)
2273{
2274
2275/*
2276SRMT("m0ff-1")
2277m0ff(1)
2278return
2279
2280SRMT("m1ee")
2281m1ee()
2282
2283SRMT("m1ef")
2284m1ef()
2285
2286return
2287*/
2288
2289	SRMT("m0ef")
2290	if (y300) {
2291		m0ef()
2292	} else {
2293		BLCK()
2294	}
2295
2296	SRMT("m0fb")
2297	if (y300) {
2298		m0fb()
2299	} else {
2300		BLCK()
2301	}
2302
2303	SRMT("m0ff-0")
2304	if (y300) {
2305		m0ff(0)
2306	} else {
2307		BLCK()
2308	}
2309
2310	SRMT("m0ff-1")
2311	if (LAnd(y300, y200)) {
2312		m0ff(1)
2313	} else {
2314		BLCK()
2315	}
2316
2317	SRMT("m18a-0")
2318	m18a(0)
2319
2320	SRMT("m18a-1")
2321	if (LAnd(y300, y200)) {
2322		m18a(1)
2323	} else {
2324		BLCK()
2325	}
2326
2327	SRMT("m18b-0")
2328	m18b(0)
2329
2330	SRMT("m18b-1")
2331	if (LAnd(y300, y200)) {
2332		m18b(1)
2333	} else {
2334		BLCK()
2335	}
2336
2337	SRMT("m18d")
2338	m18d()
2339
2340	SRMT("m18e")
2341	m18e()
2342
2343	SRMT("m18f")
2344	m18f()
2345
2346	SRMT("m19a")
2347	m19a()
2348
2349	SRMT("m19b")
2350	m19b()
2351
2352	SRMT("m19c")
2353	if (LOr(y301, LNot(y902))) {
2354		m19c()
2355	} else {
2356		BLCK()
2357	}
2358
2359	SRMT("m19d")
2360	m19d()
2361
2362	SRMT("m19e")
2363	m19e()
2364
2365	SRMT("m19f")
2366	m19f()
2367
2368	SRMT("m1b8")
2369	m1b8()
2370
2371	SRMT("m1b9")
2372	m1b9()
2373
2374	SRMT("m1ba")
2375	m1ba()
2376
2377	SRMT("m1bb")
2378	m1bb()
2379
2380	SRMT("m1bc")
2381	m1bc()
2382
2383	SRMT("m1bd")
2384	m1bd()
2385
2386	SRMT("m1be")
2387	m1be()
2388
2389	SRMT("m1de")
2390	m1de()
2391
2392	SRMT("m1df")
2393	m1df()
2394
2395	SRMT("m1ee")
2396	m1ee()
2397
2398	SRMT("m1ef")
2399	m1ef()
2400
2401	SRMT("m1bf")
2402	m1bf()
2403
2404	SRMT("m1dd")
2405	m1dd()
2406
2407	SRMT("m277")
2408	if (y200) {
2409		m277()
2410	} else {
2411		BLCK()
2412	}
2413
2414	SRMT("m27d")
2415	if (y200) {
2416		m27d()
2417	} else {
2418		BLCK()
2419	}
2420}
2421