aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-06 15:20:58 +0200
committerMike Pall <mike>2010-09-06 15:20:58 +0200
commit341820987bcd901d46a7ae4bd6f316eac30f1aa4 (patch)
tree511adc9cc2fad96f3c3051c0e0ec33fc77d1fc43 /src
parent711e55bdf8b2481750b33cdbd9bc154830b6e4e8 (diff)
downloadluajit-341820987bcd901d46a7ae4bd6f316eac30f1aa4.tar.gz
luajit-341820987bcd901d46a7ae4bd6f316eac30f1aa4.tar.bz2
luajit-341820987bcd901d46a7ae4bd6f316eac30f1aa4.zip
PPC: Add table constructors.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc37
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: