summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2016-05-06 12:08:00 +0200
committerMike Pall <mike>2016-05-06 12:08:00 +0200
commitf05280e4156df2d13d87b1639157c63ed4e3b393 (patch)
treec98a3a1db22aa7d2eecccf7dd576a2be6ac4cb38
parent7b26e9c998095ef9fbc4540908df6c30a693baa0 (diff)
downloadluajit2-f05280e4156df2d13d87b1639157c63ed4e3b393.tar.gz
x86/x64: Fix instruction length decoder.
Thanks to Peter Cawley.
-rw-r--r--src/lj_asm_x86.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index 86a5b0a8..02918e23 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -2836,9 +2836,9 @@ static uint32_t asm_x86_inslen(const uint8_t* p)
case 4: result -= (prefixes & 2); /* fallthrough */
case 5: return result + (x & 15);
case 6: /* Group 3. */
- if (p[1] & 0x38) return result + 2;
- if ((prefixes & 2) && (x == 0x66)) return result + 4;
- return result + (x & 15);
+ if (p[1] & 0x38) x = 2;
+ else if ((prefixes & 2) && (x == 0x66)) x = 4;
+ goto mrm;
case 7: /* VEX c4/c5. */
if (LJ_32 && p[1] < 0xc0) {
x = 2;