aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2013-05-23 22:17:45 +0200
committerMike Pall <mike>2013-05-23 22:17:45 +0200
commit7ef2b55fc0e8d1058b0bdac89e3f4c46db41f553 (patch)
treef62d904f23e950745e61ef9417dfd5f056b5f38a
parent890754ee27d564335865a0ba731e69c6a6191655 (diff)
downloadluajit-7ef2b55fc0e8d1058b0bdac89e3f4c46db41f553.tar.gz
luajit-7ef2b55fc0e8d1058b0bdac89e3f4c46db41f553.tar.bz2
luajit-7ef2b55fc0e8d1058b0bdac89e3f4c46db41f553.zip
FFI: Fix unroll limit for ffi.fill().
-rw-r--r--src/lj_crecord.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index e3973fc1..8577de2c 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -125,11 +125,6 @@ static IRType crec_ct2irt(CTState *cts, CType *ct)
125#define CREC_COPY_MAXLEN 128 125#define CREC_COPY_MAXLEN 128
126 126
127#define CREC_FILL_MAXUNROLL 16 127#define CREC_FILL_MAXUNROLL 16
128#if LJ_TARGET_UNALIGNED
129#define CREC_FILL_MAXLEN (CTSIZE_PTR * CREC_FILL_MAXUNROLL)
130#else
131#define CREC_FILL_MAXLEN CREC_FILL_MAXUNROLL
132#endif
133 128
134/* Number of windowed registers used for optimized memory copy. */ 129/* Number of windowed registers used for optimized memory copy. */
135#if LJ_TARGET_X86 130#if LJ_TARGET_X86
@@ -320,9 +315,9 @@ static void crec_fill(jit_State *J, TRef trdst, TRef trlen, TRef trfill,
320 MSize mlp; 315 MSize mlp;
321 CTSize len = (CTSize)IR(tref_ref(trlen))->i; 316 CTSize len = (CTSize)IR(tref_ref(trlen))->i;
322 if (len == 0) return; /* Shortcut. */ 317 if (len == 0) return; /* Shortcut. */
323 if (len > CREC_FILL_MAXLEN) goto fallback;
324 if (LJ_TARGET_UNALIGNED || step >= CTSIZE_PTR) 318 if (LJ_TARGET_UNALIGNED || step >= CTSIZE_PTR)
325 step = CTSIZE_PTR; 319 step = CTSIZE_PTR;
320 if (step * CREC_FILL_MAXUNROLL < len) goto fallback;
326 mlp = crec_fill_unroll(ml, len, step); 321 mlp = crec_fill_unroll(ml, len, step);
327 if (!mlp) goto fallback; 322 if (!mlp) goto fallback;
328 if (tref_isk(trfill) || ml[0].tp != IRT_U8) 323 if (tref_isk(trfill) || ml[0].tp != IRT_U8)