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 * Outstanding: 0x1 allocations after execution.
31 */
32
33Name(id27, 64)
34
35/* Create and write IRef */
36
37Method(mf02, 6, Serialized)
38{
39	Name(i001, 0)
40	Name(i002, 0)
41	Name(i003, 0)
42	Name(i004, 0)
43	Name(ii01, 0)
44	Name(ii02, 0)
45	Name(ii03, 0)
46	Name(ii04, 0)
47
48	if (LEqual(arg1, 1)) {
49		Store(DerefOf(Index(arg2, 0)), i001)
50		Store(Index(arg0, i001), Local7)
51	} elseif (LEqual(arg1, 2)) {
52		Store(DerefOf(Index(arg2, 0)), i001)
53		Store(DerefOf(Index(arg2, 1)), i002)
54		Store(Index(DerefOf(Index(arg0, i001)), i002), Local7)
55	} elseif (LEqual(arg1, 3)) {
56		Store(DerefOf(Index(arg2, 0)), i001)
57		Store(DerefOf(Index(arg2, 1)), i002)
58		Store(DerefOf(Index(arg2, 2)), i003)
59		Store(Index(DerefOf(Index(DerefOf(Index(arg0, i001)), i002)), i003), Local7)
60	} elseif (LEqual(arg1, 4)) {
61		Store(DerefOf(Index(arg2, 0)), i001)
62		Store(DerefOf(Index(arg2, 1)), i002)
63		Store(DerefOf(Index(arg2, 2)), i003)
64		Store(DerefOf(Index(arg2, 3)), i004)
65		Store(Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0,
66				i001)), i002)), i003)), i004), Local7)
67	} else {
68		err("", zFFF, __LINE__, 0, 0, 0, 0)
69		return
70	}
71
72	if (LEqual(arg4, 1)) {
73		Store(DerefOf(Index(arg5, 0)), ii01)
74		Store(Local7, Index(arg3, ii01))
75	} elseif (LEqual(arg4, 2)) {
76		Store(DerefOf(Index(arg5, 0)), ii01)
77		Store(DerefOf(Index(arg5, 1)), ii02)
78		Store(Local7, Index(DerefOf(Index(arg3, ii01)), ii02))
79	} elseif (LEqual(arg4, 3)) {
80		Store(DerefOf(Index(arg5, 0)), ii01)
81		Store(DerefOf(Index(arg5, 1)), ii02)
82		Store(DerefOf(Index(arg5, 2)), ii03)
83		Store(Local7, Index(DerefOf(Index(DerefOf(Index(arg3, ii01)), ii02)), ii03))
84	} elseif (LEqual(arg4, 4)) {
85		Store(DerefOf(Index(arg5, 0)), ii01)
86		Store(DerefOf(Index(arg5, 1)), ii02)
87		Store(DerefOf(Index(arg5, 2)), ii03)
88		Store(DerefOf(Index(arg5, 3)), ii04)
89		Store(Local7, Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg3,
90				ii01)), ii02)), ii03)), ii04))
91	} else {
92		err("", zFFF, __LINE__, 0, 0, 0, 0)
93		return
94	}
95}
96
97/* Read by means of IRef-to-Integer */
98
99Method(mfec, 4, Serialized)
100{
101	Name(i001, 0)
102	Name(i002, 0)
103	Name(i003, 0)
104	Name(i004, 0)
105
106	if (LEqual(arg1, 1)) {
107		Store(DerefOf(Index(arg2, 0)), i001)
108		Store(DerefOf(DerefOf(Index(arg0, i001))), Local7)
109	} elseif (LEqual(arg1, 2)) {
110		Store(DerefOf(Index(arg2, 0)), i001)
111		Store(DerefOf(Index(arg2, 1)), i002)
112		Store(DerefOf(DerefOf(Index(DerefOf(Index(arg0, i001)), i002))), Local7)
113	} elseif (LEqual(arg1, 3)) {
114		Store(DerefOf(Index(arg2, 0)), i001)
115		Store(DerefOf(Index(arg2, 1)), i002)
116		Store(DerefOf(Index(arg2, 2)), i003)
117		Store(DerefOf(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0, i001)), i002)), i003))), Local7)
118	} elseif (LEqual(arg1, 4)) {
119		Store(DerefOf(Index(arg2, 0)), i001)
120		Store(DerefOf(Index(arg2, 1)), i002)
121		Store(DerefOf(Index(arg2, 2)), i003)
122		Store(DerefOf(Index(arg2, 3)), i004)
123		Store(DerefOf(DerefOf(Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0,
124				i001)), i002)), i003)), i004))), Local7)
125	} else {
126		err("", zFFF, __LINE__, 0, 0, 0, 0)
127		return
128	}
129
130	if (LNotEqual(Local7, arg3)) {
131		err("", zFFF, __LINE__, 0, 0, Local7, arg3)
132	}
133}
134
135/* Read by means of IRef-to-Package */
136
137Method(mfed, 5, Serialized)
138{
139	Name(i001, 0)
140	Name(i002, 0)
141	Name(i003, 0)
142	Name(i004, 0)
143
144	if (LEqual(arg1, 1)) {
145		Store(DerefOf(Index(arg2, 0)), i001)
146		Store(DerefOf(DerefOf(Index(arg0, i001))), Local7)
147	} elseif (LEqual(arg1, 2)) {
148		Store(DerefOf(Index(arg2, 0)), i001)
149		Store(DerefOf(Index(arg2, 1)), i002)
150		Store(DerefOf(DerefOf(Index(DerefOf(Index(arg0, i001)), i002))), Local7)
151	} elseif (LEqual(arg1, 3)) {
152		Store(DerefOf(Index(arg2, 0)), i001)
153		Store(DerefOf(Index(arg2, 1)), i002)
154		Store(DerefOf(Index(arg2, 2)), i003)
155		Store(DerefOf(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0, i001)), i002)), i003))), Local7)
156	} elseif (LEqual(arg1, 4)) {
157		Store(DerefOf(Index(arg2, 0)), i001)
158		Store(DerefOf(Index(arg2, 1)), i002)
159		Store(DerefOf(Index(arg2, 2)), i003)
160		Store(DerefOf(Index(arg2, 3)), i004)
161		Store(DerefOf(DerefOf(Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0,
162				i001)), i002)), i003)), i004))), Local7)
163	} else {
164		err("", zFFF, __LINE__, 0, 0, 0, 0)
165		return
166	}
167
168	Store(DerefOf(Index(Local7, arg3)), Local0)
169
170	if (LNotEqual(Local0, arg4)) {
171		err("", zFFF, __LINE__, 0, 0, Local0, arg4)
172	}
173}
174
175Method(mfee,, Serialized)
176{
177		Name(p000, Package(id27) {
178			Package(id27) {
179				Package(id27) {
180					Package(id27) {0x40000000},
181					0x30000000,
182					Package(id27) {0x40000001},
183					0x30000001,
184					0x30000002,
185				},
186				0x20000000,
187				Package(id27) {
188					Package(id27) {0x40000002},
189					0x30000003,
190					Package(id27) {0x40000003},
191					0x30000004,
192					0x30000005,
193				},
194				0x20000001,
195				0x20000002,
196			},
197			0x10000000,
198			Package(id27) {
199				Package(id27) {
200					Package(id27) {0x40000004},
201					0x30000006,
202					Package(id27) {0x40000005},
203					0x30000007,
204					0x30000008,
205				},
206				0x20000003,
207				Package(id27) {
208					Package(id27) {0x40000006},
209					0x30000009,
210					Package(id27) {0x40000007},
211					0x3000000a,
212					0x3000000b,
213				},
214				0x20000004,
215				0x20000005,
216			},
217			0x10000001,
218			0x10000002,
219		})
220
221		Name(p001, Package(id27) {
222			Package(id27) {
223				Package(id27) {
224					Package(id27) {0x40000000},
225					0x30000000,
226					Package(id27) {0x40000001},
227					0x30000001,
228					0x30000002,
229				},
230				0x20000000,
231				Package(id27) {
232					Package(id27) {0x40000002},
233					0x30000003,
234					Package(id27) {0x40000003},
235					0x30000004,
236					0x30000005,
237				},
238				0x20000001,
239				0x20000002,
240			},
241			0x10000000,
242			Package(id27) {
243				Package(id27) {
244					Package(id27) {0x40000004},
245					0x30000006,
246					Package(id27) {0x40000005},
247					0x30000007,
248					0x30000008,
249				},
250				0x20000003,
251				Package(id27) {
252					Package(id27) {0x40000006},
253					0x30000009,
254					Package(id27) {0x40000007},
255					0x3000000a,
256					0x3000000b,
257				},
258				0x20000004,
259				0x20000005,
260			},
261			0x10000001,
262			0x10000002,
263		})
264
265		/* Write access */
266
267		Method(mm04, 6)
268		{
269			Store(arg5, Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0,
270								arg1)), arg2)), arg3)), arg4))
271		}
272
273		Method(mm03, 5)
274		{
275			Store(arg4, Index(DerefOf(Index(DerefOf(Index(arg0, arg1)), arg2)), arg3))
276		}
277
278		Method(mm02, 4)
279		{
280			Store(arg3, Index(DerefOf(Index(arg0, arg1)), arg2))
281		}
282
283		Method(mm01, 3)
284		{
285			Store(arg2, Index(arg0, arg1))
286		}
287
288		/* Read access */
289
290		Method(m004, 6)
291		{
292			Store(DerefOf(Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0,
293								arg1)), arg2)), arg3)), arg4)), Local0)
294			if (LNotEqual(Local0, arg5)) {
295				err("", zFFF, __LINE__, 0, 0, Local0, arg5)
296			}
297		}
298
299		Method(m003, 5)
300		{
301			Store(DerefOf(Index(DerefOf(Index(DerefOf(Index(arg0,
302								arg1)), arg2)), arg3)), Local0)
303			if (LNotEqual(Local0, arg4)) {
304				err("", zFFF, __LINE__, 0, 0, Local0, arg4)
305			}
306		}
307
308		Method(m002, 4)
309		{
310			Store(DerefOf(Index(DerefOf(Index(arg0, arg1)), arg2)), Local0)
311			if (LNotEqual(Local0, arg3)) {
312				err("", zFFF, __LINE__, 0, 0, Local0, arg3)
313			}
314		}
315
316		Method(m001, 3)
317		{
318			Store(DerefOf(Index(arg0, arg1)), Local0)
319			if (LNotEqual(Local0, arg2)) {
320				err("", zFFF, __LINE__, 0, 0, Local0, arg2)
321			}
322		}
323
324		/*
325		 * On each level from 1 to 4 create the following structure of data -
326		 * create IRefs to all levels and alternate them with Packages.
327		 * Verify access through the created IRefs.
328		 *
329		 * Refer packages p000 and p001 directly by names.
330		 *
331		 * arg0 - the start index inside arg1 where to store created objects.
332		 */
333		Method(mmm0, 1, Serialized)
334		{
335			Name(i000, 0)
336
337			/*
338                   * Create IRefs to all levels from 4-level Package.
339                   * Alternate IRefs with Packages.
340                   */
341
342			Store(arg0, i000)
343			mf02(p000, 4, Buffer(){0,0,0,0}, p000, 4, Package(){0,0,0,i000})
344			mfec(p000, 4, Package(){0,0,0,i000}, 0x40000000)
345			Increment(i000)
346			mm04(p000, 0, 0, 0, i000, Package(){0x51000000})
347			Increment(i000)
348
349			mf02(p000, 3, Buffer(){0,0,4}, p000, 4, Package(){0,0,0,i000})
350			mfec(p000, 4, Package(){0,0,0,i000}, 0x30000002)
351			Increment(i000)
352			mm04(p000, 0, 0, 0, i000, Package(){0x51000001})
353			Increment(i000)
354
355			mf02(p000, 2, Buffer(){0,4}, p000, 4, Package(){0,0,0,i000})
356			mfec(p000, 4, Package(){0,0,0,i000}, 0x20000002)
357			Increment(i000)
358			mm04(p000, 0, 0, 0, i000, Package(){0x51000002})
359			Increment(i000)
360
361			mf02(p000, 1, Buffer(){4}, p000, 4, Package(){0,0,0,i000})
362			mfec(p000, 4, Package(){0,0,0,i000}, 0x10000002)
363			Increment(i000)
364			mm04(p000, 0, 0, 0, i000, Package(){0x51000003})
365			Increment(i000)
366
367			/* Reference to Package */
368
369			mf02(p000, 3, Buffer(){0,0,0}, p000, 4, Package(){0,0,0,i000})
370			mfed(p000, 4, Package(){0,0,0,i000}, 0, 0x40000000)
371			Increment(i000)
372
373			/*
374                   * Create IRefs to all levels from 3-level Package.
375                   * Alternate IRefs with Packages.
376                   */
377
378			Store(arg0, i000)
379			mf02(p000, 4, Buffer(){0,0,0,0}, p000, 3, Package(){0,0,i000})
380			mfec(p000, 3, Package(){0,0,i000}, 0x40000000)
381			Increment(i000)
382			mm03(p000, 0, 0, i000, Package(){0x41000000})
383			Increment(i000)
384
385			mf02(p000, 3, Buffer(){0,0,4}, p000, 3, Package(){0,0,i000})
386			mfec(p000, 3, Package(){0,0,i000}, 0x30000002)
387			Increment(i000)
388			mm03(p000, 0, 0, i000, Package(){0x41000001})
389			Increment(i000)
390
391			mf02(p000, 2, Buffer(){0,4}, p000, 3, Package(){0,0,i000})
392			mfec(p000, 3, Package(){0,0,i000}, 0x20000002)
393			Increment(i000)
394			mm03(p000, 0, 0, i000, Package(){0x41000002})
395			Increment(i000)
396
397			mf02(p000, 1, Buffer(){4}, p000, 3, Package(){0,0,i000})
398			mfec(p000, 3, Package(){0,0,i000}, 0x10000002)
399			Increment(i000)
400			mm03(p000, 0, 0, i000, Package(){0x41000003})
401			Increment(i000)
402
403			/*
404                   * Create IRefs to all levels from 2-level Package.
405                   * Alternate IRefs with Packages.
406                   */
407
408			Store(arg0, i000)
409			mf02(p000, 4, Buffer(){0,0,0,0}, p000, 2, Package(){0,i000})
410			mfec(p000, 2, Package(){0,i000}, 0x40000000)
411			Increment(i000)
412			mm02(p000, 0, i000, Package(){0x31000000})
413			Increment(i000)
414
415			mf02(p000, 3, Buffer(){0,0,4}, p000, 2, Package(){0,i000})
416			mfec(p000, 2, Package(){0,i000}, 0x30000002)
417			Increment(i000)
418			mm02(p000, 0, i000, Package(){0x31000001})
419			Increment(i000)
420
421			mf02(p000, 2, Buffer(){0,4}, p000, 2, Package(){0,i000})
422			mfec(p000, 2, Package(){0,i000}, 0x20000002)
423			Increment(i000)
424			mm02(p000, 0, i000, Package(){0x31000002})
425			Increment(i000)
426
427			mf02(p000, 1, Buffer(){4}, p000, 2, Package(){0,i000})
428			mfec(p000, 2, Package(){0,i000}, 0x10000002)
429			Increment(i000)
430			mm02(p000, 0, i000, Package(){0x31000003})
431			Increment(i000)
432
433			/*
434                   * Create IRefs to all levels from 1-level Package.
435                   * Alternate IRefs with Packages.
436                   */
437
438			Store(arg0, i000)
439			mf02(p000, 4, Buffer(){0,0,0,0}, p000, 1, Package(){i000})
440			mfec(p000, 1, Package(){i000}, 0x40000000)
441			Increment(i000)
442			mm01(p000, i000, Package(){0x21000000})
443			Increment(i000)
444
445			mf02(p000, 3, Buffer(){0,0,4}, p000, 1, Package(){i000})
446			mfec(p000, 1, Package(){i000}, 0x30000002)
447			Increment(i000)
448			mm01(p000, i000, Package(){0x21000001})
449			Increment(i000)
450
451			mf02(p000, 2, Buffer(){0,4}, p000, 1, Package(){i000})
452			mfec(p000, 1, Package(){i000}, 0x20000002)
453			Increment(i000)
454			mm01(p000, i000, Package(){0x21000002})
455			Increment(i000)
456
457			mf02(p000, 1, Buffer(){4}, p000, 1, Package(){i000})
458			mfec(p000, 1, Package(){i000}, 0x10000002)
459			Increment(i000)
460			mm01(p000, i000, Package(){0x21000003})
461			Increment(i000)
462		}
463
464		/*
465		 * On each level from 1 to 4 create the following structure of data -
466		 * create IRefs to all levels and alternate them with Packages.
467		 * Verify access through the created IRefs.
468		 *
469		 * arg0 - Package, IRefs are pointing to elements of this Package,
470		 * arg1 - Package, IRefs alternated with Packages are stored as
471		 *        elements of this Package,
472		 * arg2 - the start index inside arg1 where to store created objects,
473		 * arg3 - create structure,
474		 * arg4 - read.
475		 */
476		Method(mmm1, 5, Serialized)
477		{
478			Name(i000, 0)
479
480			/*
481                   * Create IRefs to all levels from 4-level Package.
482                   * Alternate IRefs with Packages.
483                   */
484
485			Store(arg2, i000)
486			if (arg3) {
487				mf02(arg0, 4, Buffer(){0,0,0,0}, arg1, 4, Package(){0,0,0,i000})
488			}
489			if (arg4) {
490				mfec(arg1, 4, Package(){0,0,0,i000}, 0x40000000)
491			}
492			Increment(i000)
493			if (arg3) {
494				mm04(arg1, 0, 0, 0, i000, Package(){0x51000000})
495			}
496			Increment(i000)
497
498			if (arg3) {
499				mf02(arg0, 3, Buffer(){0,0,4}, arg1, 4, Package(){0,0,0,i000})
500			}
501			if (arg4) {
502				mfec(arg1, 4, Package(){0,0,0,i000}, 0x30000002)
503			}
504			Increment(i000)
505			if (arg3) {
506				mm04(arg1, 0, 0, 0, i000, Package(){0x51000001})
507			}
508			Increment(i000)
509
510			if (arg3) {
511				mf02(arg0, 2, Buffer(){0,4}, arg1, 4, Package(){0,0,0,i000})
512			}
513			if (arg4) {
514				mfec(arg1, 4, Package(){0,0,0,i000}, 0x20000002)
515			}
516			Increment(i000)
517			if (arg3) {
518				mm04(arg1, 0, 0, 0, i000, Package(){0x51000002})
519			}
520			Increment(i000)
521
522			if (arg3) {
523				mf02(arg0, 1, Buffer(){4}, arg1, 4, Package(){0,0,0,i000})
524			}
525			if (arg4) {
526				mfec(arg1, 4, Package(){0,0,0,i000}, 0x10000002)
527			}
528			Increment(i000)
529			if (arg3) {
530				mm04(arg1, 0, 0, 0, i000, Package(){0x51000003})
531			}
532			Increment(i000)
533
534			/* Reference to Package */
535
536			if (arg3) {
537				mf02(arg0, 3, Buffer(){0,0,0}, arg1, 4, Package(){0,0,0,i000})
538			}
539			if (arg4) {
540				mfed(arg1, 4, Package(){0,0,0,i000}, 0, 0x40000000)
541			}
542			Increment(i000)
543
544			/*
545                   * Create IRefs to all levels from 3-level Package.
546                   * Alternate IRefs with Packages.
547                   */
548
549			Store(arg2, i000)
550			if (arg3) {
551				mf02(arg0, 4, Buffer(){0,0,0,0}, arg1, 3, Package(){0,0,i000})
552			}
553			if (arg4) {
554				mfec(arg1, 3, Package(){0,0,i000}, 0x40000000)
555			}
556			Increment(i000)
557			if (arg3) {
558				mm03(arg1, 0, 0, i000, Package(){0x41000000})
559			}
560			Increment(i000)
561
562			if (arg3) {
563				mf02(arg0, 3, Buffer(){0,0,4}, arg1, 3, Package(){0,0,i000})
564			}
565			if (arg4) {
566				mfec(arg1, 3, Package(){0,0,i000}, 0x30000002)
567			}
568			Increment(i000)
569			if (arg3) {
570				mm03(arg1, 0, 0, i000, Package(){0x41000001})
571			}
572			Increment(i000)
573
574			if (arg3) {
575				mf02(arg0, 2, Buffer(){0,4}, arg1, 3, Package(){0,0,i000})
576			}
577			if (arg4) {
578				mfec(arg1, 3, Package(){0,0,i000}, 0x20000002)
579			}
580			Increment(i000)
581			if (arg3) {
582				mm03(arg1, 0, 0, i000, Package(){0x41000002})
583			}
584			Increment(i000)
585
586			if (arg3) {
587				mf02(arg0, 1, Buffer(){4}, arg1, 3, Package(){0,0,i000})
588			}
589			if (arg4) {
590				mfec(arg1, 3, Package(){0,0,i000}, 0x10000002)
591			}
592			Increment(i000)
593			if (arg3) {
594				mm03(arg1, 0, 0, i000, Package(){0x41000003})
595			}
596			Increment(i000)
597
598			/*
599                   * Create IRefs to all levels from 2-level Package.
600                   * Alternate IRefs with Packages.
601                   */
602
603			Store(arg2, i000)
604			if (arg3) {
605				mf02(arg0, 4, Buffer(){0,0,0,0}, arg1, 2, Package(){0,i000})
606			}
607			if (arg4) {
608				mfec(arg1, 2, Package(){0,i000}, 0x40000000)
609			}
610			Increment(i000)
611			if (arg3) {
612				mm02(arg1, 0, i000, Package(){0x31000000})
613			}
614			Increment(i000)
615
616			if (arg3) {
617				mf02(arg0, 3, Buffer(){0,0,4}, arg1, 2, Package(){0,i000})
618			}
619			if (arg4) {
620				mfec(arg1, 2, Package(){0,i000}, 0x30000002)
621			}
622			Increment(i000)
623			if (arg3) {
624				mm02(arg1, 0, i000, Package(){0x31000001})
625			}
626			Increment(i000)
627
628			if (arg3) {
629				mf02(arg0, 2, Buffer(){0,4}, arg1, 2, Package(){0,i000})
630			}
631			if (arg4) {
632				mfec(arg1, 2, Package(){0,i000}, 0x20000002)
633			}
634			Increment(i000)
635			if (arg3) {
636				mm02(arg1, 0, i000, Package(){0x31000002})
637			}
638			Increment(i000)
639
640			if (arg3) {
641				mf02(arg0, 1, Buffer(){4}, arg1, 2, Package(){0,i000})
642			}
643			if (arg4) {
644				mfec(arg1, 2, Package(){0,i000}, 0x10000002)
645			}
646			Increment(i000)
647			if (arg3) {
648				mm02(arg1, 0, i000, Package(){0x31000003})
649			}
650			Increment(i000)
651
652			/*
653                   * Create IRefs to all levels from 1-level Package.
654                   * Alternate IRefs with Packages.
655                   */
656
657			Store(arg2, i000)
658			if (arg3) {
659				mf02(arg0, 4, Buffer(){0,0,0,0}, arg1, 1, Package(){i000})
660			}
661			if (arg4) {
662				mfec(arg1, 1, Package(){i000}, 0x40000000)
663			}
664			Increment(i000)
665			if (arg3) {
666				mm01(arg1, i000, Package(){0x21000000})
667			}
668			Increment(i000)
669
670			if (arg3) {
671				mf02(arg0, 3, Buffer(){0,0,4}, arg1, 1, Package(){i000})
672			}
673			if (arg4) {
674				mfec(arg1, 1, Package(){i000}, 0x30000002)
675			}
676			Increment(i000)
677			if (arg3) {
678				mm01(arg1, i000, Package(){0x21000001})
679			}
680			Increment(i000)
681
682			if (arg3) {
683				mf02(arg0, 2, Buffer(){0,4}, arg1, 1, Package(){i000})
684			}
685			if (arg4) {
686				mfec(arg1, 1, Package(){i000}, 0x20000002)
687			}
688			Increment(i000)
689			if (arg3) {
690				mm01(arg1, i000, Package(){0x21000002})
691			}
692			Increment(i000)
693
694			if (arg3) {
695				mf02(arg0, 1, Buffer(){4}, arg1, 1, Package(){i000})
696			}
697			if (arg4) {
698				mfec(arg1, 1, Package(){i000}, 0x10000002)
699			}
700			Increment(i000)
701			if (arg3) {
702				mm01(arg1, i000, Package(){0x21000003})
703			}
704			Increment(i000)
705		}
706
707		/* Verification */
708		Method(mmm2)
709		{
710			m004(p000, 0, 0, 0, 0, 0x40000000)
711			m004(p000, 0, 0, 2, 0, 0x40000001)
712			m004(p000, 0, 2, 0, 0, 0x40000002)
713			m004(p000, 0, 2, 2, 0, 0x40000003)
714			m004(p000, 2, 0, 0, 0, 0x40000004)
715			m004(p000, 2, 0, 2, 0, 0x40000005)
716			m004(p000, 2, 2, 0, 0, 0x40000006)
717			m004(p000, 2, 2, 2, 0, 0x40000007)
718			m003(p000, 0, 0, 4, 0x30000002)
719			m003(p000, 0, 2, 4, 0x30000005)
720			m003(p000, 2, 0, 4, 0x30000008)
721			m003(p000, 2, 2, 4, 0x3000000b)
722			m002(p000, 0, 4, 0x20000002)
723			m002(p000, 2, 4, 0x20000005)
724			m001(p000, 4, 0x10000002)
725		}
726
727		SRMT("mfee")
728
729		mmm0(8)
730
731		mmm1(p000, p000, 18, 1, 1)
732		mmm1(p000, p001, 28, 1, 1)
733		mmm1(p001, p001, 38, 1, 1)
734		mmm1(p001, p000, 48, 1, 1)
735
736		mmm1(0, p000, 18, 0, 1)
737		mmm1(0, p001, 28, 0, 1)
738		mmm1(0, p001, 38, 0, 1)
739		mmm1(0, p000, 48, 0, 1)
740
741		mmm2()
742
743		/* Repeat the same */
744
745		mmm0(8)
746
747		mmm1(p000, p000, 18, 1, 1)
748		mmm1(p000, p001, 28, 1, 1)
749		mmm1(p001, p001, 38, 1, 1)
750		mmm1(p001, p000, 48, 1, 1)
751
752		mmm1(0, p000, 18, 0, 1)
753		mmm1(0, p001, 28, 0, 1)
754		mmm1(0, p001, 38, 0, 1)
755		mmm1(0, p000, 48, 0, 1)
756
757		mmm2()
758}
759