diff options
author | Mike Pall <mike> | 2010-09-06 15:20:58 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-06 15:20:58 +0200 |
commit | 341820987bcd901d46a7ae4bd6f316eac30f1aa4 (patch) | |
tree | 511adc9cc2fad96f3c3051c0e0ec33fc77d1fc43 /src | |
parent | 711e55bdf8b2481750b33cdbd9bc154830b6e4e8 (diff) | |
download | luajit-341820987bcd901d46a7ae4bd6f316eac30f1aa4.tar.gz luajit-341820987bcd901d46a7ae4bd6f316eac30f1aa4.tar.bz2 luajit-341820987bcd901d46a7ae4bd6f316eac30f1aa4.zip |
PPC: Add table constructors.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 76d54f42..6989c447 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -1230,10 +1230,41 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
1230 | /* -- Table ops --------------------------------------------------------- */ | 1230 | /* -- Table ops --------------------------------------------------------- */ |
1231 | 1231 | ||
1232 | case BC_TNEW: | 1232 | case BC_TNEW: |
1233 | | NYI | ||
1234 | break; | ||
1235 | case BC_TDUP: | 1233 | case BC_TDUP: |
1236 | | NYI | 1234 | | // RA = dst*8, RD = (hbits|asize)*8 | tab_const*8 (~) |
1235 | | lwz TMP0, DISPATCH_GL(gc.total)(DISPATCH) | ||
1236 | | mr CARG1, L | ||
1237 | | lwz TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) | ||
1238 | | stw BASE, L->base | ||
1239 | | cmplw TMP0, TMP1 | ||
1240 | | stw PC, SAVE_PC | ||
1241 | | bge >5 | ||
1242 | |1: | ||
1243 | if (op == BC_TNEW) { | ||
1244 | | rlwinm CARG2, RD, 29, 21, 31 | ||
1245 | | rlwinm CARG3, RD, 18, 27, 31 | ||
1246 | | cmpwi CARG2, 0x7ff | ||
1247 | | li TMP1, 0x801 | ||
1248 | | iseleq CARG2, TMP1, CARG2 | ||
1249 | | bl extern lj_tab_new // (lua_State *L, int32_t asize, uint32_t hbits) | ||
1250 | | // Returns Table *. | ||
1251 | } else { | ||
1252 | | srwi TMP1, RD, 1 | ||
1253 | | subfic TMP1, TMP1, -4 | ||
1254 | | lwzx CARG2, KBASE, TMP1 // KBASE-4-tab_const*4 | ||
1255 | | bl extern lj_tab_dup // (lua_State *L, Table *kt) | ||
1256 | | // Returns Table *. | ||
1257 | } | ||
1258 | | lwz BASE, L->base | ||
1259 | | evmergelo TAB:CRET1, TISTAB, TAB:CRET1 | ||
1260 | | evstddx TAB:CRET1, BASE, RA | ||
1261 | | ins_next | ||
1262 | |5: | ||
1263 | | mr SAVE0, RD | ||
1264 | | bl extern lj_gc_step_fixtop // (lua_State *L) | ||
1265 | | mr RD, SAVE0 | ||
1266 | | mr CARG1, L | ||
1267 | | b <1 | ||
1237 | break; | 1268 | break; |
1238 | 1269 | ||
1239 | case BC_GGET: | 1270 | case BC_GGET: |