summaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-13 01:17:38 +0200
committerMike Pall <mike>2010-09-13 01:17:38 +0200
commit847b9cf2534233198e0229c209ab4c4040f5166e (patch)
tree8e07f98f6624029a26979bade9e6b1a618bb7a89 /src/lj_opt_fold.c
parente32f7d96c1de48e7c425d1e091f9f406d6a6b1d3 (diff)
downloadluajit-847b9cf2534233198e0229c209ab4c4040f5166e.tar.gz
luajit-847b9cf2534233198e0229c209ab4c4040f5166e.tar.bz2
luajit-847b9cf2534233198e0229c209ab4c4040f5166e.zip
Record vararg expressions with varargs defined off-trace.
Add SLOAD variant to access the frame type/size.
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r--src/lj_opt_fold.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index 312c9cf0..90520d8c 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -1318,8 +1318,13 @@ LJFOLDX(lj_opt_fwd_fload)
1318LJFOLD(SLOAD any any) 1318LJFOLD(SLOAD any any)
1319LJFOLDF(fwd_sload) 1319LJFOLDF(fwd_sload)
1320{ 1320{
1321 lua_assert(J->slot[fins->op1] != 0); 1321 if ((fins->op2 & IRSLOAD_FRAME)) {
1322 return J->slot[fins->op1]; 1322 TRef tr = lj_opt_cse(J);
1323 return tref_ref(tr) < J->chain[IR_RETF] ? EMITFOLD : tr;
1324 } else {
1325 lua_assert(J->slot[fins->op1] != 0);
1326 return J->slot[fins->op1];
1327 }
1323} 1328}
1324 1329
1325LJFOLD(XLOAD KPTR any) 1330LJFOLD(XLOAD KPTR any)