diff options
author | Mike Pall <mike> | 2010-09-15 17:28:24 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-15 17:28:24 +0200 |
commit | 3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc (patch) | |
tree | 837e186df7cbe157c610b3a4c717dd5205147590 | |
parent | 028a65a597ef764d0ceb8a1dc17f0da5476d7eae (diff) | |
download | luajit-3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc.tar.gz luajit-3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc.tar.bz2 luajit-3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc.zip |
PPC: Add BC_TSETM.
-rw-r--r-- | src/buildvm_ppc.dasc | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 3a31d86c..28258e5e 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -2005,7 +2005,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
2005 | break; | 2005 | break; |
2006 | 2006 | ||
2007 | case BC_TSETM: | 2007 | case BC_TSETM: |
2008 | | NYI | 2008 | | // RA = base*8 (table at base-1), RD = num_const*8 (start index) |
2009 | | add RA, BASE, RA | ||
2010 | |1: | ||
2011 | | add TMP3, KBASE, RD | ||
2012 | | lwz TAB:CARG2, -4(RA) // Guaranteed to be a table. | ||
2013 | | addic. TMP0, MULTRES, -8 | ||
2014 | | lwz TMP3, 4(TMP3) // Integer constant is in lo-word. | ||
2015 | | srwi CARG3, TMP0, 3 | ||
2016 | | beq >4 // Nothing to copy? | ||
2017 | | add CARG3, CARG3, TMP3 | ||
2018 | | lwz TMP2, TAB:CARG2->asize | ||
2019 | | slwi TMP1, TMP3, 3 | ||
2020 | | lbz TMP3, TAB:CARG2->marked | ||
2021 | | cmplw CARG3, TMP2 | ||
2022 | | add TMP2, RA, TMP0 | ||
2023 | | lwz TMP0, TAB:CARG2->array | ||
2024 | | bgt >5 | ||
2025 | | add TMP1, TMP1, TMP0 | ||
2026 | | andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table) | ||
2027 | |3: // Copy result slots to table. | ||
2028 | | evldd TMP0, 0(RA) | ||
2029 | | addi RA, RA, 8 | ||
2030 | | cmpw cr1, RA, TMP2 | ||
2031 | | evstdd TMP0, 0(TMP1) | ||
2032 | | addi TMP1, TMP1, 8 | ||
2033 | | blt cr1, <3 | ||
2034 | | bne >7 | ||
2035 | |4: | ||
2036 | | ins_next | ||
2037 | | | ||
2038 | |5: // Need to resize array part. | ||
2039 | | stw BASE, L->base | ||
2040 | | mr CARG1, L | ||
2041 | | stw PC, SAVE_PC | ||
2042 | | bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) | ||
2043 | | // Must not reallocate the stack. | ||
2044 | | b <1 | ||
2045 | | | ||
2046 | |7: // Possible table write barrier for any value. Skip valiswhite check. | ||
2047 | | barrierback TAB:RB, TMP3, TMP0 | ||
2048 | | b <4 | ||
2009 | break; | 2049 | break; |
2010 | 2050 | ||
2011 | /* -- Calls and vararg handling ----------------------------------------- */ | 2051 | /* -- Calls and vararg handling ----------------------------------------- */ |