@@ -26,3 +26,72 @@ DefinitionBlock ("", "SSDT", 2, "RSACPI", "DerefOf", 0x00000002) {
2626 let handler = NullHandler { } ;
2727 test_infra:: run_aml_test ( AML , handler) ;
2828}
29+
30+ #[ test]
31+ fn test_deref_of_direct_buffer_field ( ) {
32+ const AML : & str = r#"
33+ DefinitionBlock ("", "SSDT", 2, "RSACPI", "DerefOf", 0x00000002) {
34+ Name (ADAT, Buffer (0x01) { 0xaa })
35+ CreateByteField (ADAT, 0x00, BF00)
36+
37+ Method(MAIN, 0, NotSerialized) {
38+ Return (DerefOf(BF00) - 0xaa)
39+ }
40+ }
41+ "# ;
42+
43+ let handler = NullHandler { } ;
44+ test_infra:: run_aml_test ( AML , handler) ;
45+ }
46+
47+ #[ test]
48+ fn test_deref_of_local_buffer_field_after_store ( ) {
49+ const AML : & str = r#"
50+ DefinitionBlock ("", "SSDT", 2, "RSACPI", "DerefOf", 0x00000002) {
51+ Method(MAIN, 0, NotSerialized) {
52+ Local0 = Buffer (0x01) { 0x00 }
53+ CreateByteField (Local0, 0x00, BF00)
54+ BF00 = 0xaa
55+ Return (DerefOf(BF00) - 0xaa)
56+ }
57+ }
58+ "# ;
59+
60+ let handler = NullHandler { } ;
61+ test_infra:: run_aml_test ( AML , handler) ;
62+ }
63+
64+ #[ test]
65+ fn test_deref_of_named_buffer_field_stores_value ( ) {
66+ const AML : & str = r#"
67+ DefinitionBlock ("", "SSDT", 2, "RSACPI", "DerefOf", 0x00000002) {
68+ Name (ADAT, Buffer (0x01) { 0xaa })
69+ CreateByteField (ADAT, 0x00, BF00)
70+
71+ Method(MAIN, 0, NotSerialized) {
72+ Local0 = DerefOf(BF00)
73+ Return (Local0 - 0xaa)
74+ }
75+ }
76+ "# ;
77+
78+ let handler = NullHandler { } ;
79+ test_infra:: run_aml_test ( AML , handler) ;
80+ }
81+
82+ #[ test]
83+ fn test_deref_of_named_string_path ( ) {
84+ const AML : & str = r#"
85+ DefinitionBlock ("", "SSDT", 2, "RSACPI", "DerefOf", 0x00000002) {
86+ Name (TGT, 0xaa)
87+ Name (STR, "\\TGT")
88+
89+ Method(MAIN, 0, NotSerialized) {
90+ Return (DerefOf(STR) - 0xaa)
91+ }
92+ }
93+ "# ;
94+
95+ let handler = NullHandler { } ;
96+ test_infra:: run_aml_test ( AML , handler) ;
97+ }
0 commit comments