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     * Create Buffer Field operators
30     */
31    /*
32     * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
33     * Clean up method m218 after that when errors 65,66,68,69
34     * (in 32-bit mode) will be investigated and resolved
35     * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36     *
37     * Update needed: 1) add "Common features", see below ...
38     *                2) tune parameters in m21d
39     */
40    Name (Z001, 0x01)
41    Name (BS00, 0x0100)
42    /* Benchmark Buffers */
43
44    Name (B000, Buffer (BS00){})
45    Name (B0FF, Buffer (BS00)
46    {
47        /* 0000 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
48        /* 0008 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
49        /* 0010 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
50        /* 0018 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
51        /* 0020 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
52        /* 0028 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
53        /* 0030 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
54        /* 0038 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
55        /* 0040 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
56        /* 0048 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
57        /* 0050 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
58        /* 0058 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
59        /* 0060 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
60        /* 0068 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
61        /* 0070 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
62        /* 0078 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
63        /* 0080 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
64        /* 0088 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
65        /* 0090 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
66        /* 0098 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
67        /* 00A0 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
68        /* 00A8 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
69        /* 00B0 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
70        /* 00B8 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
71        /* 00C0 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
72        /* 00C8 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
73        /* 00D0 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
74        /* 00D8 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
75        /* 00E0 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
76        /* 00E8 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
77        /* 00F0 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // ........
78        /* 00F8 */  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   // ........
79    })
80    Name (B256, Buffer (BS00)
81    {
82        /* 0000 */  0x00, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,  // ........
83        /* 0008 */  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,  // ........
84        /* 0010 */  0x00, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,  // ........
85        /* 0018 */  0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,  // ........
86        /* 0020 */  0x10, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,  // .!"#$%&'
87        /* 0028 */  0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,  // ()*+,-./
88        /* 0030 */  0x20, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,  //  1234567
89        /* 0038 */  0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,  // 89:;<=>?
90        /* 0040 */  0x30, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,  // 0ABCDEFG
91        /* 0048 */  0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,  // HIJKLMNO
92        /* 0050 */  0x40, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,  // @QRSTUVW
93        /* 0058 */  0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,  // XYZ[\]^_
94        /* 0060 */  0x50, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,  // Pabcdefg
95        /* 0068 */  0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,  // hijklmno
96        /* 0070 */  0x60, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,  // `qrstuvw
97        /* 0078 */  0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,  // xyz{|}~.
98        /* 0080 */  0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,  // ........
99        /* 0088 */  0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,  // ........
100        /* 0090 */  0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,  // ........
101        /* 0098 */  0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,  // ........
102        /* 00A0 */  0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,  // ........
103        /* 00A8 */  0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,  // ........
104        /* 00B0 */  0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,  // ........
105        /* 00B8 */  0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,  // ........
106        /* 00C0 */  0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,  // ........
107        /* 00C8 */  0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,  // ........
108        /* 00D0 */  0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,  // ........
109        /* 00D8 */  0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,  // ........
110        /* 00E0 */  0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,  // ........
111        /* 00E8 */  0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,  // ........
112        /* 00F0 */  0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,  // ........
113        /* 00F8 */  0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF   // ........
114    })
115    /* Generated benchmark buffers for comparison with */
116
117    Name (B010, Buffer (BS00){})
118    Name (B101, Buffer (BS00){})
119    Name (B0B0, Buffer (BS00){})
120    /* Buffer for filling the ground */
121
122    Name (B0G0, Buffer (BS00){})
123    /* Buffer for filling the field (over the ground) */
124
125    Name (B0F0, Buffer (BS00){})
126    /* CreateBitField */
127    /* */
128    /* <test name>, */
129    /* <index of bit>, */
130    /* <buf: 00>, */
131    /* <buf: ff>, */
132    /* <buf: 010>, */
133    /* <buf: 101>, */
134    /* <byte size of buf> */
135    Method (M210, 7, Serialized)
136    {
137        Name (PR00, 0x00)
138        If (PR00)
139        {
140            Debug = "========:"
141        }
142
143        Name (B001, Buffer (Arg6){})
144        Name (B002, Buffer (Arg6){})
145        CreateBitField (B001, Arg1, F001)
146        /*////////////// A. 1->0 (010->000) */
147
148        B001 = Arg4
149        If (PR00)
150        {
151            Debug = B001 /* \M210.B001 */
152        }
153
154        F001 = 0xFFFFFFFFFFFFFFFE
155        Local0 = F001 /* \M210.F001 */
156        If ((Local0 != 0x00))
157        {
158            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
159        }
160
161        B002 = Arg2
162        If ((B001 != B002))
163        {
164            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
165        }
166
167        If (PR00)
168        {
169            Debug = B001 /* \M210.B001 */
170        }
171
172        /*////////////// B. 1->0 (111->101) */
173
174        B001 = Arg3
175        If (PR00)
176        {
177            Debug = B001 /* \M210.B001 */
178        }
179
180        F001 = 0x00
181        Local0 = F001 /* \M210.F001 */
182        If ((Local0 != 0x00))
183        {
184            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
185        }
186
187        B002 = Arg5
188        If ((B001 != B002))
189        {
190            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
191        }
192
193        If (PR00)
194        {
195            Debug = B001 /* \M210.B001 */
196        }
197
198        /*////////////// C. 0->1 (101->111) */
199
200        B001 = Arg5
201        If (PR00)
202        {
203            Debug = B001 /* \M210.B001 */
204        }
205
206        F001 = 0x01
207        Local0 = F001 /* \M210.F001 */
208        If ((Local0 != 0x01))
209        {
210            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x01)
211        }
212
213        B002 = Arg3
214        If ((B001 != B002))
215        {
216            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
217        }
218
219        If (PR00)
220        {
221            Debug = B001 /* \M210.B001 */
222        }
223
224        /*////////////// D. 0->1 (000->010) */
225
226        B001 = Arg2
227        If (PR00)
228        {
229            Debug = B001 /* \M210.B001 */
230        }
231
232        F001 = 0xFFFFFFFFFFFFFFFF
233        Local0 = F001 /* \M210.F001 */
234        If ((Local0 != 0x01))
235        {
236            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x01)
237        }
238
239        B002 = Arg4
240        If ((B001 != B002))
241        {
242            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
243        }
244
245        If (PR00)
246        {
247            Debug = B001 /* \M210.B001 */
248        }
249
250        /* Common features */
251
252        Local0 = SizeOf (B001)
253        If ((Local0 != Arg6))
254        {
255            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg6)
256        }
257
258        Local0 = SizeOf (B002)
259        If ((Local0 != Arg6))
260        {
261            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg6)
262        }
263
264        Local0 = ObjectType (F001)
265        If ((Local0 != C016))
266        {
267            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, C016)
268        }
269
270        If (PR00)
271        {
272            Debug = Local0
273        }
274    }
275
276    Method (M211, 0, Serialized)
277    {
278        Debug = "TEST: m211, Create 1-Bit Buffer Field:"
279        /* Size of buffer (in bytes) */
280
281        Name (BSZ0, 0x00)
282        BSZ0 = BS00 /* \BS00 */
283        /* Max steps to check */
284
285        Name (BSZ1, 0x00)
286        /* How many elements to check */
287
288        Name (N000, 0x00)
289        Name (NCUR, 0x00)
290        N000 = (BSZ0 * 0x08)
291        BSZ1 = N000 /* \M211.N000 */
292        While (N000)
293        {
294            If ((NCUR >= BSZ1))
295            {
296                ERR (__METHOD__, Z001, __LINE__, 0x00, 0x00, NCUR, BSZ1)
297                Break
298            }
299
300            B010 = B000 /* \B000 */
301            B101 = B0FF /* \B0FF */
302            Divide (NCUR, 0x08, Local1, Local0)
303            Local2 = (0x01 << Local1)
304            B010 [Local0] = Local2
305            Local3 = ~Local2
306            B101 [Local0] = Local3
307            M210 (__METHOD__, NCUR, B000, B0FF, B010, B101, BSZ0)
308            N000--
309            NCUR++
310        }
311    }
312
313    /* CreateByteField */
314    /* */
315    /* <test name>, */
316    /* <index of byte>, */
317    /* <byte size of buf> */
318    Method (M212, 3, Serialized)
319    {
320        Name (PR00, 0x00)
321        If (PR00)
322        {
323            Debug = "========:"
324        }
325
326        Name (B001, Buffer (Arg2){})
327        Name (B002, Buffer (Arg2){})
328        /*////////////// A. 1->0 (010->000) */
329
330        CreateByteField (B001, Arg1, F001)
331        B001 = B010 /* \B010 */
332        If (PR00)
333        {
334            Debug = B001 /* \M212.B001 */
335        }
336
337        F001 = 0xFFFFFFFFFFFFFF00
338        Local0 = F001 /* \M212.F001 */
339        If ((Local0 != 0x00))
340        {
341            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
342        }
343
344        B002 = B000 /* \B000 */
345        If ((B001 != B002))
346        {
347            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
348        }
349
350        If (PR00)
351        {
352            Debug = B001 /* \M212.B001 */
353        }
354
355        /*////////////// B. 1->0 (111->101) */
356
357        B001 = B0FF /* \B0FF */
358        If (PR00)
359        {
360            Debug = B001 /* \M212.B001 */
361        }
362
363        F001 = 0x00
364        Local0 = F001 /* \M212.F001 */
365        If ((Local0 != 0x00))
366        {
367            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
368        }
369
370        B002 = B101 /* \B101 */
371        If ((B001 != B002))
372        {
373            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
374        }
375
376        If (PR00)
377        {
378            Debug = B001 /* \M212.B001 */
379        }
380
381        /*////////////// C. 0->1 (101->111) */
382
383        B001 = B101 /* \B101 */
384        If (PR00)
385        {
386            Debug = B001 /* \M212.B001 */
387        }
388
389        F001 = 0xFF
390        Local0 = F001 /* \M212.F001 */
391        If ((Local0 != 0xFF))
392        {
393            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFF)
394        }
395
396        B002 = B0FF /* \B0FF */
397        If ((B001 != B002))
398        {
399            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
400        }
401
402        If (PR00)
403        {
404            Debug = B001 /* \M212.B001 */
405        }
406
407        /*////////////// D. 0->1 (000->010) */
408
409        B001 = B000 /* \B000 */
410        If (PR00)
411        {
412            Debug = B001 /* \M212.B001 */
413        }
414
415        F001 = 0xFFFFFFFFFFFFFFFF
416        Local0 = F001 /* \M212.F001 */
417        If ((Local0 != 0xFF))
418        {
419            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFF)
420        }
421
422        B002 = B010 /* \B010 */
423        If ((B001 != B002))
424        {
425            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
426        }
427
428        If (PR00)
429        {
430            Debug = B001 /* \M212.B001 */
431        }
432
433        /*////////////// E. 0->1 (000->010) */
434
435        B001 = B000 /* \B000 */
436        If (PR00)
437        {
438            Debug = B001 /* \M212.B001 */
439        }
440
441        F001 = 0xFFFFFFFFFFFFFF96
442        Local0 = F001 /* \M212.F001 */
443        If ((Local0 != 0x96))
444        {
445            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x96)
446        }
447
448        B002 = B0B0 /* \B0B0 */
449        If ((B001 != B002))
450        {
451            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
452        }
453
454        If (PR00)
455        {
456            Debug = B001 /* \M212.B001 */
457        }
458
459        /* Common features */
460
461        Local0 = SizeOf (B001)
462        If ((Local0 != Arg2))
463        {
464            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
465        }
466
467        Local0 = SizeOf (B002)
468        If ((Local0 != Arg2))
469        {
470            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
471        }
472
473        Local0 = ObjectType (F001)
474        If ((Local0 != C016))
475        {
476            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, C016)
477        }
478
479        If (PR00)
480        {
481            Debug = Local0
482        }
483    }
484
485    Method (M213, 0, Serialized)
486    {
487        Debug = "TEST: m213, Create 8-Bit Buffer Field:"
488        /* Size of buffer (in bytes) */
489
490        Name (BSZ0, 0x00)
491        BSZ0 = BS00 /* \BS00 */
492        /* Max steps to check */
493
494        Name (BSZ1, 0x00)
495        /* How many elements to check */
496
497        Name (N000, 0x00)
498        Name (NCUR, 0x00)
499        N000 = BSZ0 /* \M213.BSZ0 */
500        BSZ1 = N000 /* \M213.N000 */
501        While (N000)
502        {
503            If ((NCUR >= BSZ1))
504            {
505                ERR (__METHOD__, Z001, __LINE__, 0x00, 0x00, NCUR, BSZ1)
506                Break
507            }
508
509            B010 = B000 /* \B000 */
510            B0B0 = B000 /* \B000 */
511            B101 = B0FF /* \B0FF */
512            B010 [NCUR] = 0xFF
513            B0B0 [NCUR] = 0x96
514            B101 [NCUR] = 0x00
515            M212 (__METHOD__, NCUR, BSZ0)
516            N000--
517            NCUR++
518        }
519    }
520
521    /* CreateWordField */
522    /* */
523    /* <test name>, */
524    /* <index of byte>, */
525    /* <byte size of buf> */
526    Method (M214, 3, Serialized)
527    {
528        Name (PR00, 0x00)
529        If (PR00)
530        {
531            Debug = "========:"
532            Debug = Arg1
533            Debug = Arg2
534        }
535
536        Name (B001, Buffer (Arg2){})
537        Name (B002, Buffer (Arg2){})
538        CreateWordField (B001, Arg1, F001)
539        /*////////////// A. 1->0 (010->000) */
540
541        B001 = B010 /* \B010 */
542        If (PR00)
543        {
544            Debug = B001 /* \M214.B001 */
545        }
546
547        F001 = 0xFFFFFFFFFFFF0000
548        Local0 = F001 /* \M214.F001 */
549        If ((Local0 != 0x00))
550        {
551            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
552        }
553
554        B002 = B000 /* \B000 */
555        If ((B001 != B002))
556        {
557            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
558        }
559
560        If (PR00)
561        {
562            Debug = B001 /* \M214.B001 */
563        }
564
565        /*////////////// B. 1->0 (111->101) */
566
567        B001 = B0FF /* \B0FF */
568        If (PR00)
569        {
570            Debug = B001 /* \M214.B001 */
571        }
572
573        F001 = 0x00
574        Local0 = F001 /* \M214.F001 */
575        If ((Local0 != 0x00))
576        {
577            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
578        }
579
580        B002 = B101 /* \B101 */
581        If ((B001 != B002))
582        {
583            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
584        }
585
586        If (PR00)
587        {
588            Debug = B001 /* \M214.B001 */
589        }
590
591        /*////////////// C. 0->1 (101->111) */
592
593        B001 = B101 /* \B101 */
594        If (PR00)
595        {
596            Debug = B001 /* \M214.B001 */
597        }
598
599        F001 = 0xFFFF
600        Local0 = F001 /* \M214.F001 */
601        If ((Local0 != 0xFFFF))
602        {
603            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFFFF)
604        }
605
606        B002 = B0FF /* \B0FF */
607        If ((B001 != B002))
608        {
609            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
610        }
611
612        If (PR00)
613        {
614            Debug = B001 /* \M214.B001 */
615        }
616
617        /*////////////// D. 0->1 (000->010) */
618
619        B001 = B000 /* \B000 */
620        If (PR00)
621        {
622            Debug = B001 /* \M214.B001 */
623        }
624
625        F001 = 0xFFFFFFFFFFFFFFFF
626        Local0 = F001 /* \M214.F001 */
627        If ((Local0 != 0xFFFF))
628        {
629            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFFFF)
630        }
631
632        B002 = B010 /* \B010 */
633        If ((B001 != B002))
634        {
635            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
636        }
637
638        If (PR00)
639        {
640            Debug = B001 /* \M214.B001 */
641        }
642
643        Local0 = SizeOf (B001)
644        If ((Local0 != Arg2))
645        {
646            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
647        }
648
649        Local0 = SizeOf (B002)
650        If ((Local0 != Arg2))
651        {
652            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
653        }
654
655        /*////////////// E. 0->1 (000->010) */
656
657        B001 = B000 /* \B000 */
658        If (PR00)
659        {
660            Debug = B001 /* \M214.B001 */
661        }
662
663        F001 = 0xFFFFFFFFFFFF7698
664        Local0 = F001 /* \M214.F001 */
665        If ((Local0 != 0x7698))
666        {
667            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x7698)
668        }
669
670        B002 = B0B0 /* \B0B0 */
671        If ((B001 != B002))
672        {
673            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
674        }
675
676        If (PR00)
677        {
678            Debug = B001 /* \M214.B001 */
679        }
680
681        /* Common features */
682
683        Local0 = SizeOf (B001)
684        If ((Local0 != Arg2))
685        {
686            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
687        }
688
689        Local0 = SizeOf (B002)
690        If ((Local0 != Arg2))
691        {
692            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
693        }
694
695        Local0 = ObjectType (F001)
696        If ((Local0 != C016))
697        {
698            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, C016)
699        }
700
701        If (PR00)
702        {
703            Debug = Local0
704        }
705    }
706
707    Method (M215, 0, Serialized)
708    {
709        Debug = "TEST: m215, Create 16-Bit Buffer Field:"
710        /* Size of buffer (in bytes) */
711
712        Name (BSZ0, 0x00)
713        BSZ0 = BS00 /* \BS00 */
714        /* Max steps to check */
715
716        Name (BSZ1, 0x00)
717        /* How many elements to check */
718
719        Name (N000, 0x00)
720        Name (NCUR, 0x00)
721        N000 = (BSZ0 - 0x01)
722        BSZ1 = N000 /* \M215.N000 */
723        While (N000)
724        {
725            If ((NCUR >= BSZ1))
726            {
727                ERR (__METHOD__, Z001, __LINE__, 0x00, 0x00, NCUR, BSZ1)
728                Break
729            }
730
731            B010 = B000 /* \B000 */
732            B0B0 = B000 /* \B000 */
733            B101 = B0FF /* \B0FF */
734            Local0 = NCUR /* \M215.NCUR */
735            B010 [Local0] = 0xFF
736            B0B0 [Local0] = 0x98
737            B101 [Local0] = 0x00
738            Local0++
739            B010 [Local0] = 0xFF
740            B0B0 [Local0] = 0x76
741            B101 [Local0] = 0x00
742            M214 (__METHOD__, NCUR, BSZ0)
743            N000--
744            NCUR++
745        }
746    }
747
748    /* CreateDWordField */
749    /* */
750    /* <test name>, */
751    /* <index of byte>, */
752    /* <byte size of buf> */
753    Method (M216, 3, Serialized)
754    {
755        Name (PR00, 0x00)
756        If (PR00)
757        {
758            Debug = "========:"
759            Debug = Arg1
760            Debug = Arg2
761        }
762
763        Name (B001, Buffer (Arg2){})
764        Name (B002, Buffer (Arg2){})
765        CreateDWordField (B001, Arg1, F001)
766        /*////////////// A. 1->0 (010->000) */
767
768        B001 = B010 /* \B010 */
769        If (PR00)
770        {
771            Debug = B001 /* \M216.B001 */
772        }
773
774        F001 = 0xFFFFFFFF00000000
775        Local0 = F001 /* \M216.F001 */
776        If ((Local0 != 0x00))
777        {
778            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
779        }
780
781        B002 = B000 /* \B000 */
782        If ((B001 != B002))
783        {
784            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
785        }
786
787        If (PR00)
788        {
789            Debug = B001 /* \M216.B001 */
790        }
791
792        /*////////////// B. 1->0 (111->101) */
793
794        B001 = B0FF /* \B0FF */
795        If (PR00)
796        {
797            Debug = B001 /* \M216.B001 */
798        }
799
800        F001 = 0x00
801        Local0 = F001 /* \M216.F001 */
802        If ((Local0 != 0x00))
803        {
804            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
805        }
806
807        B002 = B101 /* \B101 */
808        If ((B001 != B002))
809        {
810            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
811        }
812
813        If (PR00)
814        {
815            Debug = B001 /* \M216.B001 */
816        }
817
818        /*////////////// C. 0->1 (101->111) */
819
820        B001 = B101 /* \B101 */
821        If (PR00)
822        {
823            Debug = B001 /* \M216.B001 */
824        }
825
826        F001 = 0xFFFFFFFF
827        Local0 = F001 /* \M216.F001 */
828        If ((Local0 != 0xFFFFFFFF))
829        {
830            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFFFFFFFF)
831        }
832
833        B002 = B0FF /* \B0FF */
834        If ((B001 != B002))
835        {
836            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
837        }
838
839        If (PR00)
840        {
841            Debug = B001 /* \M216.B001 */
842        }
843
844        /*////////////// D. 0->1 (000->010) */
845
846        B001 = B000 /* \B000 */
847        If (PR00)
848        {
849            Debug = B001 /* \M216.B001 */
850        }
851
852        F001 = 0xFFFFFFFFFFFFFFFF
853        Local0 = F001 /* \M216.F001 */
854        If ((Local0 != 0xFFFFFFFF))
855        {
856            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFFFFFFFF)
857        }
858
859        B002 = B010 /* \B010 */
860        If ((B001 != B002))
861        {
862            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
863        }
864
865        If (PR00)
866        {
867            Debug = B001 /* \M216.B001 */
868        }
869
870        Local0 = SizeOf (B001)
871        If ((Local0 != Arg2))
872        {
873            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
874        }
875
876        Local0 = SizeOf (B002)
877        If ((Local0 != Arg2))
878        {
879            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
880        }
881
882        /*////////////// E. 0->1 (000->010) */
883
884        B001 = B000 /* \B000 */
885        If (PR00)
886        {
887            Debug = B001 /* \M216.B001 */
888        }
889
890        F001 = 0xFFFFFFFF32547698
891        Local0 = F001 /* \M216.F001 */
892        If ((Local0 != 0x32547698))
893        {
894            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x32547698)
895        }
896
897        B002 = B0B0 /* \B0B0 */
898        If ((B001 != B002))
899        {
900            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
901        }
902
903        If (PR00)
904        {
905            Debug = B001 /* \M216.B001 */
906        }
907
908        /* Common features */
909
910        Local0 = SizeOf (B001)
911        If ((Local0 != Arg2))
912        {
913            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
914        }
915
916        Local0 = SizeOf (B002)
917        If ((Local0 != Arg2))
918        {
919            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
920        }
921
922        Local0 = ObjectType (F001)
923        If ((Local0 != C016))
924        {
925            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, C016)
926        }
927
928        If (PR00)
929        {
930            Debug = Local0
931        }
932    }
933
934    Method (M217, 0, Serialized)
935    {
936        Debug = "TEST: m217, Create 32-Bit Buffer Field:"
937        /* Size of buffer (in bytes) */
938
939        Name (BSZ0, 0x00)
940        BSZ0 = BS00 /* \BS00 */
941        /* Max steps to check */
942
943        Name (BSZ1, 0x00)
944        /* How many elements to check */
945
946        Name (N000, 0x00)
947        Name (NCUR, 0x00)
948        N000 = (BSZ0 - 0x03)
949        BSZ1 = N000 /* \M217.N000 */
950        While (N000)
951        {
952            If ((NCUR >= BSZ1))
953            {
954                ERR (__METHOD__, Z001, __LINE__, 0x00, 0x00, NCUR, BSZ1)
955                Break
956            }
957
958            B010 = B000 /* \B000 */
959            B0B0 = B000 /* \B000 */
960            B101 = B0FF /* \B0FF */
961            Local0 = NCUR /* \M217.NCUR */
962            B010 [Local0] = 0xFF
963            B0B0 [Local0] = 0x98
964            B101 [Local0] = 0x00
965            Local0++
966            B010 [Local0] = 0xFF
967            B0B0 [Local0] = 0x76
968            B101 [Local0] = 0x00
969            Local0++
970            B010 [Local0] = 0xFF
971            B0B0 [Local0] = 0x54
972            B101 [Local0] = 0x00
973            Local0++
974            B010 [Local0] = 0xFF
975            B0B0 [Local0] = 0x32
976            B101 [Local0] = 0x00
977            M216 (__METHOD__, NCUR, BSZ0)
978            N000--
979            NCUR++
980        }
981    }
982
983    /* CreateQWordField */
984    /* */
985    /* <test name>, */
986    /* <index of byte>, */
987    /* <byte size of buf> */
988    Method (M218, 3, Serialized)
989    {
990        Name (PR00, 0x00)
991        Name (ERR0, 0x00)
992        ERR0 = ERRS /* \ERRS */
993        Name (BB00, Buffer (0x08){})
994        /*	Name(bb01, Buffer(8) {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}) */
995
996        Name (BB01, Buffer (0x08)
997        {
998             0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00   // ........
999        })
1000        /*	Name(bb02, Buffer(8) {0x98,0x76,0x54,0x32,0x10,0xAB,0xCD,0xEF}) */
1001
1002        Name (BB02, Buffer (0x08)
1003        {
1004             0x98, 0x76, 0x54, 0x32, 0x00, 0x00, 0x00, 0x00   // .vT2....
1005        })
1006        If (PR00)
1007        {
1008            Debug = "========:"
1009            Debug = Arg1
1010            Debug = Arg2
1011        }
1012
1013        Name (B001, Buffer (Arg2){})
1014        Name (B002, Buffer (Arg2){})
1015        CreateQWordField (B001, Arg1, F001)
1016        /*
1017         * Create Field to the part of b002 which is set to
1018         * zero by storing Integer into f001 in 32-bit mode.
1019         */
1020        CreateDWordField (B002, (Arg1 + 0x04), F321)
1021        /*////////////// A. 1->0 (010->000) */
1022
1023        B001 = B010 /* \B010 */
1024        If (PR00)
1025        {
1026            Debug = "======== 1:"
1027            Debug = B001 /* \M218.B001 */
1028        }
1029
1030        F001 = 0x00
1031        Local0 = F001 /* \M218.F001 */
1032        If ((F64 == 0x01))
1033        {
1034            If ((Local0 != 0x00))
1035            {
1036                ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
1037            }
1038        }
1039        ElseIf ((Local0 != BB00))
1040        {
1041            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1042        }
1043
1044        B002 = B000 /* \B000 */
1045        If ((B001 != B002))
1046        {
1047            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1048        }
1049
1050        If (PR00)
1051        {
1052            Debug = "======== 2:"
1053            Debug = B001 /* \M218.B001 */
1054        }
1055
1056        /*////////////// B. 1->0 (111->101) */
1057
1058        B001 = B0FF /* \B0FF */
1059        If (PR00)
1060        {
1061            Debug = "======== 3:"
1062            Debug = B001 /* \M218.B001 */
1063        }
1064
1065        F001 = 0x00
1066        Local0 = F001 /* \M218.F001 */
1067        If ((F64 == 0x01))
1068        {
1069            If ((Local0 != 0x00))
1070            {
1071                ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0x00)
1072            }
1073        }
1074        ElseIf ((Local0 != BB00))
1075        {
1076            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1077        }
1078
1079        B002 = B101 /* \B101 */
1080        If ((B001 != B002))
1081        {
1082            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1083        }
1084
1085        If (PR00)
1086        {
1087            Debug = "======== 4:"
1088            Debug = B001 /* \M218.B001 */
1089        }
1090
1091        /*////////////// C. 0->1 (101->111) */
1092
1093        B001 = B101 /* \B101 */
1094        If (PR00)
1095        {
1096            Debug = "======== 5:"
1097            Debug = B001 /* \M218.B001 */
1098        }
1099
1100        F001 = 0xFFFFFFFFFFFFFFFF
1101        /*	Store(bb01, f001) */
1102
1103        Local0 = F001 /* \M218.F001 */
1104        If ((F64 == 0x01))
1105        {
1106            If ((Local0 != 0xFFFFFFFFFFFFFFFF))
1107            {
1108                ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFFFFFFFFFFFFFFFF)
1109            }
1110        }
1111        ElseIf ((Local0 != BB01))
1112        {
1113            If (PR00)
1114            {
1115                Debug = "=========================:"
1116                Debug = Local0
1117                Debug = BB01 /* \M218.BB01 */
1118                Debug = "=========================."
1119            }
1120
1121            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1122        }
1123
1124        B002 = B0FF /* \B0FF */
1125        If ((F64 == 0x00))
1126        {
1127            /* 32-bit mode update of b002 */
1128
1129            F321 = 0x00
1130        }
1131
1132        If ((B001 != B002))
1133        {
1134            If (PR00)
1135            {
1136                Debug = "=========================:"
1137                Debug = B001 /* \M218.B001 */
1138                Debug = B002 /* \M218.B002 */
1139                Debug = "=========================."
1140            }
1141
1142            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1143        }
1144
1145        If (PR00)
1146        {
1147            Debug = "======== 6:"
1148            Debug = B001 /* \M218.B001 */
1149        }
1150
1151        /*////////////// D. 0->1 (000->010) */
1152
1153        B001 = B000 /* \B000 */
1154        If (PR00)
1155        {
1156            Debug = "======== 7:"
1157            Debug = F001 /* \M218.F001 */
1158            Debug = B001 /* \M218.B001 */
1159            Debug = BB01 /* \M218.BB01 */
1160        }
1161
1162        F001 = 0xFFFFFFFFFFFFFFFF
1163        /*	Store(bb01, f001) */
1164        /*	Store(0xefcdab1032547698, f001) */
1165        /*	Store(0x8888888888888888, f001) */
1166        /*	Store(0x7777777777777777, f001) */
1167        /*	Store(0x0f0f0f0f0f0f0f0f, f001) */
1168        /*	Store(0xf0f0f0f0f0f0f0f0, f001) */
1169        /*	Store(0x7fffffffffffffff, f001) */
1170        If (PR00)
1171        {
1172            Debug = "======== 8:"
1173            Debug = Local0
1174            Debug = F001 /* \M218.F001 */
1175            Debug = B001 /* \M218.B001 */
1176            Debug = BB01 /* \M218.BB01 */
1177        }
1178
1179        Local0 = F001 /* \M218.F001 */
1180        If ((F64 == 0x01))
1181        {
1182            If ((Local0 != 0xFFFFFFFFFFFFFFFF))
1183            {
1184                ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xFFFFFFFFFFFFFFFF)
1185            }
1186        }
1187        ElseIf ((Local0 != BB01))
1188        {
1189            If (PR00)
1190            {
1191                Debug = "=========================:"
1192                Debug = Local0
1193                Debug = BB01 /* \M218.BB01 */
1194                Debug = "=========================."
1195            }
1196
1197            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1198        }
1199
1200        B002 = B010 /* \B010 */
1201        If ((F64 == 0x00))
1202        {
1203            /* 32-bit mode update of b002 */
1204
1205            F321 = 0x00
1206        }
1207
1208        If ((B001 != B002))
1209        {
1210            If (PR00)
1211            {
1212                Debug = "=========================:"
1213                Debug = B001 /* \M218.B001 */
1214                Debug = B002 /* \M218.B002 */
1215                Debug = "=========================."
1216            }
1217
1218            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1219        }
1220
1221        If (PR00)
1222        {
1223            Debug = "======== 9:"
1224            Debug = B001 /* \M218.B001 */
1225        }
1226
1227        Local0 = SizeOf (B001)
1228        If ((Local0 != Arg2))
1229        {
1230            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
1231        }
1232
1233        Local0 = SizeOf (B002)
1234        If ((Local0 != Arg2))
1235        {
1236            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
1237        }
1238
1239        /*////////////// E. 0->1 (000->010) */
1240
1241        B001 = B000 /* \B000 */
1242        If (PR00)
1243        {
1244            Debug = "======== 10:"
1245            Debug = F001 /* \M218.F001 */
1246            Debug = B001 /* \M218.B001 */
1247            Debug = BB02 /* \M218.BB02 */
1248        }
1249
1250        F001 = 0xEFCDAB1032547698
1251        /*	Store(0xffffffffffffffff, f001) */
1252
1253        Local0 = F001 /* \M218.F001 */
1254        If (PR00)
1255        {
1256            Debug = "======== 11:"
1257            Debug = Local0
1258            Debug = F001 /* \M218.F001 */
1259            Debug = B001 /* \M218.B001 */
1260            Debug = BB02 /* \M218.BB02 */
1261        }
1262
1263        If ((F64 == 0x01))
1264        {
1265            If ((Local0 != 0xEFCDAB1032547698))
1266            {
1267                ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, 0xEFCDAB1032547698)
1268            }
1269        }
1270        ElseIf ((Local0 != BB02))
1271        {
1272            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1273        }
1274
1275        B002 = B0B0 /* \B0B0 */
1276        If ((F64 == 0x00))
1277        {
1278            /* 32-bit mode update of b002 */
1279
1280            F321 = 0x00
1281        }
1282
1283        If ((B001 != B002))
1284        {
1285            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1286        }
1287
1288        If (PR00)
1289        {
1290            Debug = "======== 12:"
1291            Debug = B001 /* \M218.B001 */
1292            Debug = B002 /* \M218.B002 */
1293        }
1294
1295        /* Common features */
1296
1297        Local0 = SizeOf (B001)
1298        If ((Local0 != Arg2))
1299        {
1300            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
1301        }
1302
1303        Local0 = SizeOf (B002)
1304        If ((Local0 != Arg2))
1305        {
1306            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, Arg2)
1307        }
1308
1309        Local0 = ObjectType (F001)
1310        If ((Local0 != C016))
1311        {
1312            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, C016)
1313        }
1314
1315        If (PR00)
1316        {
1317            Debug = "======== 13:"
1318            Debug = Local0
1319        }
1320
1321        If ((ERRS != ERR0))
1322        {
1323            Local0 = 0x01
1324        }
1325        Else
1326        {
1327            Local0 = 0x00
1328        }
1329
1330        Return (Local0)
1331    }
1332
1333    Method (M219, 0, Serialized)
1334    {
1335        Debug = "TEST: m219, Create 64-Bit Buffer Field:"
1336        /* Size of buffer (in bytes) */
1337
1338        Name (BSZ0, 0x00)
1339        BSZ0 = BS00 /* \BS00 */
1340        /* Max steps to check */
1341
1342        Name (BSZ1, 0x00)
1343        /* How many elements to check */
1344
1345        Name (N000, 0x00)
1346        Name (NCUR, 0x00)
1347        N000 = (BSZ0 - 0x07)
1348        BSZ1 = N000 /* \M219.N000 */
1349        While (N000)
1350        {
1351            If ((NCUR >= BSZ1))
1352            {
1353                ERR (__METHOD__, Z001, __LINE__, 0x00, 0x00, NCUR, BSZ1)
1354                Break
1355            }
1356
1357            B010 = B000 /* \B000 */
1358            B0B0 = B000 /* \B000 */
1359            B101 = B0FF /* \B0FF */
1360            Local0 = NCUR /* \M219.NCUR */
1361            B010 [Local0] = 0xFF
1362            B0B0 [Local0] = 0x98
1363            B101 [Local0] = 0x00
1364            Local0++
1365            B010 [Local0] = 0xFF
1366            B0B0 [Local0] = 0x76
1367            B101 [Local0] = 0x00
1368            Local0++
1369            B010 [Local0] = 0xFF
1370            B0B0 [Local0] = 0x54
1371            B101 [Local0] = 0x00
1372            Local0++
1373            B010 [Local0] = 0xFF
1374            B0B0 [Local0] = 0x32
1375            B101 [Local0] = 0x00
1376            Local0++
1377            B010 [Local0] = 0xFF
1378            B0B0 [Local0] = 0x10
1379            B101 [Local0] = 0x00
1380            Local0++
1381            B010 [Local0] = 0xFF
1382            B0B0 [Local0] = 0xAB
1383            B101 [Local0] = 0x00
1384            Local0++
1385            B010 [Local0] = 0xFF
1386            B0B0 [Local0] = 0xCD
1387            B101 [Local0] = 0x00
1388            Local0++
1389            B010 [Local0] = 0xFF
1390            B0B0 [Local0] = 0xEF
1391            B101 [Local0] = 0x00
1392            If (M218 (__METHOD__, NCUR, BSZ0))
1393            {
1394                Return (0x01)
1395            }
1396
1397            N000--
1398            NCUR++
1399        }
1400
1401        Return (0x00)
1402    }
1403
1404    /* CreateField */
1405    /* */
1406    /* <test name>, */
1407    /* <name of test-package>, */
1408    /* <index of bit>, */
1409    /* <num of bits>, */
1410    /* <byte size of buf> */
1411    /* <the benchmark buffer for Field comparison with> */
1412    Method (M21A, 6, Serialized)
1413    {
1414        Name (PR00, 0x00)
1415        If (PR00)
1416        {
1417            Debug = "========:"
1418            Debug = Arg2
1419            Debug = Arg3
1420        }
1421
1422        Name (B001, Buffer (Arg4){})
1423        Name (B002, Buffer (Arg4){})
1424        /* Flag of Integer */
1425
1426        Name (INT1, 0x00)
1427        CreateField (B001, Arg2, Arg3, F001)
1428
1429        /* Check Type */
1430
1431        Local0 = ObjectType (F001)
1432        If ((Local0 != C016))
1433        {
1434            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, Local0, C016)
1435        }
1436
1437        /* Fill the entire buffer (ground) */
1438
1439        B001 = B0G0 /* \B0G0 */
1440        If (PR00)
1441        {
1442            Debug = B001 /* \M21A.B001 */
1443        }
1444
1445        /* Fill into the field of buffer */
1446
1447        F001 = B0F0 /* \B0F0 */
1448        Local0 = F001 /* \M21A.F001 */
1449        /* Crash for 20041105 [Nov  5 2004] */
1450        /* Store("!!!!!!!!!!!! test is crashing */
1451        /* here when attempting access pr00:", Debug) */
1452        If (PR00)
1453        {
1454            Debug = "============ 0:"
1455            Debug = B0G0 /* \B0G0 */
1456            Debug = B0F0 /* \B0F0 */
1457            Debug = B0B0 /* \B0B0 */
1458            Debug = Local0
1459            Debug = B001 /* \M21A.B001 */
1460            Debug = "============."
1461        }
1462
1463        /* Check the contents of field */
1464
1465        If (Local0 != Arg5)
1466        {
1467            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1468        }
1469
1470        /* Check the contents of Buffer */
1471
1472        B002 = B0B0 /* \B0B0 */
1473        If ((B001 != B002))
1474        {
1475            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1476            If (PR00)
1477            {
1478                Debug = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE:"
1479                Debug = B0G0 /* \B0G0 */
1480                Debug = B0F0 /* \B0F0 */
1481                Debug = B0B0 /* \B0B0 */
1482                Debug = B001 /* \M21A.B001 */
1483                Debug = "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR."
1484            }
1485        }
1486
1487        /* Common features */
1488        /* Add "Common features" here too. */
1489        Return (Zero)
1490    }
1491
1492    /* <test name>, */
1493    /* <name of test-package>, */
1494    /* <index of bit>, */
1495    /* <num of bits>, */
1496    /* <opcode of buffer to fill the ground> */
1497    /* <opcode of buffer to fill the field> */
1498    Method (M21B, 6, Serialized)
1499    {
1500        Name (PR00, 0x00)
1501        Name (INT2, 0x00)
1502        /* For loop 1 */
1503
1504        Name (LPN1, 0x00)
1505        Name (LPC1, 0x00)
1506        /* For loop 2 */
1507
1508        Name (LPN2, 0x00)
1509        Name (LPC2, 0x00)
1510        /* <entire byte size of buffer> */
1511
1512        Name (BSZ0, 0x00)
1513        BSZ0 = BS00 /* \BS00 */
1514        /* byte size of field */
1515
1516        Name (BSF0, 0x00)
1517        /* byte size of buffer affected by field */
1518
1519        Name (BSB0, 0x00)
1520        /* index of the first byte of field in the buffer */
1521
1522        Name (FB00, 0x00)
1523        /* index of the last byte of field in the buffer */
1524
1525        Name (LB00, 0x00)
1526        /* Num of bits have to be non-zero */
1527
1528        If ((Arg3 == 0x00))
1529        {
1530            ERR (Arg0, Z001, __LINE__, 0x00, 0x00, 0x00, 0x00)
1531            Return (Ones)
1532        }
1533
1534        BSB0 = MBS0 (Arg2, Arg3)
1535        /* ========================================= */
1536        /* Prepare the buffer for filling the ground */
1537        /* ========================================= */
1538        Switch (ToInteger (Arg4))
1539        {
1540            Case (0x00)
1541            {
1542                B0G0 = B000 /* \B000 */
1543            }
1544            Case (0x01)
1545            {
1546                B0G0 = B0FF /* \B0FF */
1547            }
1548            Default
1549            {
1550                B0G0 = B256 /* \B256 */
1551            }
1552
1553        }
1554
1555        /* ========================================================== */
1556        /* Prepare the buffer for filling the field (over the ground) */
1557        /* ========================================================== */
1558        Switch (ToInteger (Arg5))
1559        {
1560            Case (0x00)
1561            {
1562                B0F0 = B000 /* \B000 */
1563            }
1564            Case (0x01)
1565            {
1566                B0F0 = B0FF /* \B0FF */
1567            }
1568            Default
1569            {
1570                B0F0 = B256 /* \B256 */
1571            }
1572
1573        }
1574
1575        /* ====================================================== */
1576        /* Prepare the benchmark buffer for Field COMPARISON with */
1577        /* Result in Local6 */
1578        /* ====================================================== */
1579        /* lpN1 - number of bytes minus one */
1580        Local0 = Arg3
1581        Local0--
1582        Divide (Local0, 0x08, Local7, LPN1) /* \M21B.LPN1 */
1583        Divide (Arg3, 0x08, Local7, Local0)
1584        BSF0 = LPN1 /* \M21B.LPN1 */
1585        BSF0++
1586        Local6 = Buffer (BSF0){}
1587        Local0 = DerefOf (B0F0 [LPN1])
1588        If (Local7)
1589        {
1590            Local1 = (0x08 - Local7)
1591            Local2 = (Local0 << Local1)
1592            Local3 = (Local2 & 0xFF)
1593            Local0 = (Local3 >> Local1)
1594        }
1595
1596        Local6 [LPN1] = Local0
1597        LPC1 = 0x00
1598        While (LPN1)
1599        {
1600            Local0 = DerefOf (B0F0 [LPC1])
1601            Local6 [LPC1] = Local0
1602            LPN1--
1603            LPC1++
1604        }
1605
1606        /* ================================================ */
1607        /* Prepare the benchmark buffer for comparison with */
1608        /* ================================================ */
1609        B0B0 = B0G0 /* \B0G0 */
1610        Divide (Arg2, 0x08, Local1, FB00) /* \M21B.FB00 */
1611        Local2 = DerefOf (B0B0 [FB00])
1612        LB00 = BSB0 /* \M21B.BSB0 */
1613        LB00--
1614        Local3 = DerefOf (B0B0 [LB00])
1615        Local0 = SFT1 (Local6, Local1, Arg3, Local2, Local3)
1616        Local2 = FB00 /* \M21B.FB00 */
1617        LPN2 = SizeOf (Local0)
1618        LPC2 = 0x00
1619        While (LPN2)
1620        {
1621            Local1 = DerefOf (Local0 [LPC2])
1622            B0B0 [Local2] = Local1
1623            Local2++
1624            LPN2--
1625            LPC2++
1626        }
1627
1628        M21A (Arg0, Arg1, Arg2, Arg3, BSZ0, Local6)
1629        Return (Zero)
1630    }
1631
1632    Method (M21C, 4, Serialized)
1633    {
1634        /* For loop 0 */
1635
1636        Name (LPN0, 0x00)
1637        Name (LPC0, 0x00)
1638        /* For loop 1 */
1639
1640        Name (LPN1, 0x00)
1641        Name (LPC1, 0x00)
1642        /* For loop 2 */
1643
1644        Name (LPN2, 0x00)
1645        Name (LPC2, 0x00)
1646        /* Index of bit */
1647
1648        Name (IB00, 0x00)
1649        /* Number of bits */
1650
1651        Name (NB00, 0x00)
1652        LPN0 = Arg1
1653        LPC0 = 0x00
1654        While (LPN0)
1655        {
1656            /* Operands */
1657
1658            Local6 = (LPC0 * 0x06)
1659            IB00 = DerefOf (Arg3 [Local6])
1660            Local6++
1661            LPN1 = DerefOf (Arg3 [Local6])
1662            Local6++
1663            Local0 = DerefOf (Arg3 [Local6])
1664            Local6++
1665            Local1 = DerefOf (Arg3 [Local6])
1666            Local6++
1667            Local2 = DerefOf (Arg3 [Local6])
1668            Local6++
1669            Local3 = DerefOf (Arg3 [Local6])
1670            LPC1 = 0x00
1671            While (LPN1)
1672            {
1673                NB00 = Local0
1674                LPN2 = Local1
1675                LPC2 = 0x00
1676                While (LPN2)
1677                {
1678                    M21B (Arg0, Arg2, IB00, NB00, Local2, Local3)
1679                    NB00++
1680                    LPN2--
1681                    LPC2++
1682                }
1683
1684                IB00++
1685                LPN1--
1686                LPC1++
1687            }
1688
1689            LPC0++
1690            LPN0--
1691        }
1692    }
1693
1694    Method (M21D, 0, Serialized)
1695    {
1696        Debug = "TEST: m21d, Create Arbitrary Length Buffer Field:"
1697        /* Layout of Package: */
1698        /* - <first index of bit>, */
1699        /* - <num of indexes of bits>, */
1700        /* - <first num of bits>, */
1701        /* - <num of num of bits>, */
1702        /* - opcode of buffer to fill the ground */
1703        /* - opcode of buffer to fill the field */
1704        /*   Opcodes of buffers: */
1705        /*     0 - all zeros */
1706        /*     1 - all units */
1707        /*     2 - some mix */
1708        Name (P000, Package (0x06)
1709        {
1710            0x00,
1711            0x08,
1712            0x01,
1713            0x50,
1714            0x01,
1715            0x02
1716                /* try for 32-bit, 64-bit: */
1717        /*		1, 1, 0x28, 1, 1, 2, */
1718        /*		1, 1, 0x48, 1, 1, 2, */
1719        /* try for 32-bit, 64-bit: */
1720        /*		4, 1, 0x200, 1, 1, 2, */
1721        /*		6, 1, 0x69, 1, 1, 2, */
1722        /* examines the whole range possible for the size */
1723        /* of the unerlying 256-byte Buffer: */
1724        /*		0, 17, 1, 2032, 1, 2, */
1725        /*		0, 1, 1, 1, 1, 2, */
1726        /*		0, 10, 1, 30, 1, 2, */
1727        /*		1, 1, 1, 90, 1, 2, */
1728        /*		1, 1, 40, 1, 1, 2, */
1729        /*		1, 1, 1, 39, 1, 2, */
1730        /*		1, 1, 1, 40, 1, 2, */
1731        /*		1, 1, 40, 1, 0, 2, */
1732        /*		0, 1, 1, 65, 0, 1, */
1733        })
1734        M21C (__METHOD__, 0x01, "p000", P000)
1735    }
1736
1737    /* Run-method */
1738
1739    Method (CBF0, 0, NotSerialized)
1740    {
1741        SRMT ("m211")
1742        M211 ()
1743        SRMT ("m213")
1744        M213 ()
1745        SRMT ("m215")
1746        M215 ()
1747        SRMT ("m217")
1748        M217 ()
1749        SRMT ("m219")
1750        M219 ()
1751        SRMT ("m21d")
1752        M21D ()
1753    }
1754