diff --git a/tools/amldecode/aml/opcode.c b/tools/amldecode/aml/opcode.c index 54c6e1b..7132d91 100644 --- a/tools/amldecode/aml/opcode.c +++ b/tools/amldecode/aml/opcode.c @@ -22,32 +22,42 @@ static int32_t read_pkg_length(struct aml_parser *parser) } int32_t len = 0; - int32_t tmp = 0; + int32_t p1 = 0, p2 = 0, p3 = 0; int nbytes = (p0 & 0xC0) >> 6; switch (nbytes) { case 3: - tmp = aml_parser_advance(parser); - if (tmp == PARSE_EOF) { + p1 = aml_parser_advance(parser); + p2 = aml_parser_advance(parser); + p3 = aml_parser_advance(parser); + if (p3 == PARSE_EOF) { return PARSE_EOF; } - len |= tmp << 20; + len = p0 & 0x0F; + len |= p1 << 4; + len |= p2 << 12; + len |= p3 << 20; + break; case 2: - tmp = aml_parser_advance(parser); - if (tmp == PARSE_EOF) { + p1 = aml_parser_advance(parser); + p2 = aml_parser_advance(parser); + if (p2 == PARSE_EOF) { return PARSE_EOF; } - len |= tmp << 12; + len = p0 & 0x0F; + len |= p1 << 4; + len |= p2 << 12; + break; case 1: - len |= p0 & 0x0F; - tmp = aml_parser_advance(parser); - if (tmp == PARSE_EOF) { + p1 = aml_parser_advance(parser); + if (p1 == PARSE_EOF) { return PARSE_EOF; } - len |= tmp << 4; + len = p0 & 0x0F; + len |= p1 << 4; break; case 0: len = p0 & 0x3F;