aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2016-11-20 23:32:17 +0100
committerMike Pall <mike>2016-11-20 23:32:17 +0100
commit2b77da35bc77e2d34062d9168884095d9145a993 (patch)
tree830808a49e90886a9c9364845f6d2e330590ad46
parent7a0c3a1127229788fa4cfc436e1b3cbee36b7eb4 (diff)
downloadluajit-2b77da35bc77e2d34062d9168884095d9145a993.tar.gz
luajit-2b77da35bc77e2d34062d9168884095d9145a993.tar.bz2
luajit-2b77da35bc77e2d34062d9168884095d9145a993.zip
ARM64: Reject special case in emit_isk13().
-rw-r--r--src/lj_emit_arm64.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lj_emit_arm64.h b/src/lj_emit_arm64.h
index eb8f7fc7..52e75559 100644
--- a/src/lj_emit_arm64.h
+++ b/src/lj_emit_arm64.h
@@ -46,7 +46,9 @@ static uint32_t emit_isk13(uint64_t n, int is64)
46 if (!n) return 0; /* Neither all-zero nor all-ones are allowed. */ 46 if (!n) return 0; /* Neither all-zero nor all-ones are allowed. */
47 do { /* Find the repeat width. */ 47 do { /* Find the repeat width. */
48 if (is64 && (uint32_t)(n^(n>>32))) break; 48 if (is64 && (uint32_t)(n^(n>>32))) break;
49 n = (uint32_t)n; w = 32; if ((n^(n>>16)) & 0xffff) break; 49 n = (uint32_t)n;
50 if (!n) return 0; /* Ditto when passing n=0xffffffff and is64=0. */
51 w = 32; if ((n^(n>>16)) & 0xffff) break;
50 n = n & 0xffff; w = 16; if ((n^(n>>8)) & 0xff) break; 52 n = n & 0xffff; w = 16; if ((n^(n>>8)) & 0xff) break;
51 n = n & 0xff; w = 8; if ((n^(n>>4)) & 0xf) break; 53 n = n & 0xff; w = 8; if ((n^(n>>4)) & 0xf) break;
52 n = n & 0xf; w = 4; if ((n^(n>>2)) & 0x3) break; 54 n = n & 0xf; w = 4; if ((n^(n>>2)) & 0x3) break;