ASL+
the latest iASL compiler (ver20141107) implements an extension support for symbolic (C-style) operations for math and logical expressions, so ASL code can be more humanity. ASL with these language extensions is called ASL+.
ASL+ compatible with legacy AML interpreters, no need new AML opcodes, compiler transforms expressions into legacy ASL/AML equivalents at compile time.
ASL+ Syntax Legacy ASL Equivalent // Math operators Z = X + Y Add (X, Y, Z) Z = X - Y Subtract (X, Y, Z) Z = X * Y Multiply (X, Y, Z) Z = X / Y Divide (X, Y, , Z) Z = X % Y Mod (X, Y, Z) Z = X << Y ShiftLeft (X, Y, Z) Z = X >> Y ShiftRight (X, Y, Z) Z = X & Y And (X, Y, Z) Z = X | Y Or (X, Y, Z) Z = X ^ Y Xor (X, Y, Z) Z = ~X Not (X, Z) X++ Increment (X) X-- Decrement (X) // Logical operators (X == Y) LEqual (X, Y) (X != Y) LNotEqual (X, Y) (X < Y) LLess (X, Y) (X > Y) LGreater (X, Y) (X <= Y) LLessEqual (X, Y) (X >= Y) LGreaterEqual (X, Y) (X && Y) LAnd (X, Y) (X || Y) LOr (X, Y) (!X) LNot (X) // Compound assignment operations X = Y Store (Y, X) X += Y Add (X, Y, X) X -= Y Subtract (X, Y, X) X *= Y Multiply (X, Y, X) X /= Y Divide (X, Y, , X) X %= Y Mod (X, Y, X) X <<= Y ShiftLeft (X, Y, X) X >>= Y ShiftRight (X, Y, X) X &= Y And (X, Y, X) X |= Y Or (X, Y, X) X ^= Y Xor (X, Y, X)
Verify and Test
Let’s test this with coreboot acpi code:
*1. copy “coreboot\src\arch\x86\acpi\debug.asl” to a test folder
*2. create a test.asl in the same folder, content as below
DefinitionBlock (
"DSDT.AML",
"DSDT",
0x01,
"XXXXXX",
"XXXXXXXX",
0x00010001
)
{
#include "debug.asl"
}
*3. modify line 122
add(Local0, 0x37, Local0)
to
Local0 += 0x37
*4. compile with iASL ver20141107 and iASL ver20130927, check out the differences.
D:\test>iasl test.asl Intel ACPI Component Architecture ASL+ Optimizing Compiler version 20141107-32 [Nov 7 2014] Copyright (c) 2000 - 2014 Intel Corporation debug.asl 166: ethod(DBGO, 1) Remark 2120 - ^ Control Method should be made Serialized (due to cr eation of named objects within) ASL Input: test.asl - 13 lines, 1571 bytes, 59 keywords AML Output: DSDT.aml - 443 bytes, 16 named objects, 43 executable opcodes Compilation complete. 0 Errors, 0 Warnings, 1 Remarks, 10 Optimizations D:\test>iasl20130927 test.asl Intel ACPI Component Architecture ASL Optimizing Compiler version 20130927-32 [Sep 27 2013] Copyright (c) 2000 - 2013 Intel Corporation Compiler aborting due to parser-detected syntax error(s) debug.asl 123: Local0 += 0x37 Error 6126 - ^ syntax error, unexpected PARSEOP_LOCAL0 debug.asl 123: Local0 += 0x37 Error 6126 - ^ Invalid character (0x2B), expecting ASL keywor d or name debug.asl 123: Local0 += 0x37 Error 6126 - ^ Invalid character (0x3D), expecting ASL keywo rd or name ASL Input: test.asl - 12 lines, 1561 bytes, 57 keywords Compilation complete. 3 Errors, 0 Warnings, 0 Remarks, 0 Optimizations