diff options
author | Mike Pall <mike> | 2011-04-04 01:49:24 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-04-04 01:49:24 +0200 |
commit | 0e7009ddc82c7c1e87041997de87143e6c9e46f6 (patch) | |
tree | 1b60bb0de6e95eb4c6ed87c040563973817f42d2 /src | |
parent | 81fa9e34cd5df0a4367f24a717cf6c428be56667 (diff) | |
download | luajit-0e7009ddc82c7c1e87041997de87143e6c9e46f6.tar.gz luajit-0e7009ddc82c7c1e87041997de87143e6c9e46f6.tar.bz2 luajit-0e7009ddc82c7c1e87041997de87143e6c9e46f6.zip |
ARM: Add table constructors.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_arm.dasc | 36 |
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: |