aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-04-04 01:49:24 +0200
committerMike Pall <mike>2011-04-04 01:49:24 +0200
commit0e7009ddc82c7c1e87041997de87143e6c9e46f6 (patch)
tree1b60bb0de6e95eb4c6ed87c040563973817f42d2 /src
parent81fa9e34cd5df0a4367f24a717cf6c428be56667 (diff)
downloadluajit-0e7009ddc82c7c1e87041997de87143e6c9e46f6.tar.gz
luajit-0e7009ddc82c7c1e87041997de87143e6c9e46f6.tar.bz2
luajit-0e7009ddc82c7c1e87041997de87143e6c9e46f6.zip
ARM: Add table constructors.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_arm.dasc36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index 8b345f8f..3723eeb9 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -1188,7 +1188,41 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
1188 1188
1189 case BC_TNEW: 1189 case BC_TNEW:
1190 case BC_TDUP: 1190 case BC_TDUP:
1191 | NYI 1191 | // RA = dst*8, RC = (hbits|asize) | tab_const (~)
1192 if (op == BC_TDUP) {
1193 | mvn RC, RC
1194 }
1195 | ldr CARG3, [DISPATCH, #DISPATCH_GL(gc.total)]
1196 | ldr CARG4, [DISPATCH, #DISPATCH_GL(gc.threshold)]
1197 | str BASE, L->base
1198 | str PC, SAVE_PC
1199 | cmp CARG3, CARG4
1200 | bhs >5
1201 |1:
1202 | mov CARG1, L
1203 if (op == BC_TNEW) {
1204 | lsl CARG2, RC, #21
1205 | lsr CARG3, RC, #11
1206 | asr RC, CARG2, #21
1207 | lsr CARG2, CARG2, #21
1208 | cmn RC, #1
1209 | addeq CARG2, CARG2, #2
1210 | bl extern lj_tab_new // (lua_State *L, int32_t asize, uint32_t hbits)
1211 | // Returns GCtab *.
1212 } else {
1213 | ldr CARG2, [KBASE, RC, lsl #2]
1214 | bl extern lj_tab_dup // (lua_State *L, Table *kt)
1215 | // Returns GCtab *.
1216 }
1217 | ldr BASE, L->base
1218 | mvn CARG2, #~LJ_TTAB
1219 | ins_next1
1220 | ins_next2
1221 | strd CARG12, [BASE, RA]
1222 | ins_next3
1223 |5:
1224 | bl extern lj_gc_step_fixtop // (lua_State *L)
1225 | b <1
1192 break; 1226 break;
1193 1227
1194 case BC_GGET: 1228 case BC_GGET: