aboutsummaryrefslogtreecommitdiff
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)
downloadluajit-f05280e4156df2d13d87b1639157c63ed4e3b393.tar.gz
luajit-f05280e4156df2d13d87b1639157c63ed4e3b393.tar.bz2
luajit-f05280e4156df2d13d87b1639157c63ed4e3b393.zip
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)
2836 case 4: result -= (prefixes & 2); /* fallthrough */ 2836 case 4: result -= (prefixes & 2); /* fallthrough */
2837 case 5: return result + (x & 15); 2837 case 5: return result + (x & 15);
2838 case 6: /* Group 3. */ 2838 case 6: /* Group 3. */
2839 if (p[1] & 0x38) return result + 2; 2839 if (p[1] & 0x38) x = 2;
2840 if ((prefixes & 2) && (x == 0x66)) return result + 4; 2840 else if ((prefixes & 2) && (x == 0x66)) x = 4;
2841 return result + (x & 15); 2841 goto mrm;
2842 case 7: /* VEX c4/c5. */ 2842 case 7: /* VEX c4/c5. */
2843 if (LJ_32 && p[1] < 0xc0) { 2843 if (LJ_32 && p[1] < 0xc0) {
2844 x = 2; 2844 x = 2;