aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-15 17:28:24 +0200
committerMike Pall <mike>2010-09-15 17:28:24 +0200
commit3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc (patch)
tree837e186df7cbe157c610b3a4c717dd5205147590
parent028a65a597ef764d0ceb8a1dc17f0da5476d7eae (diff)
downloadluajit-3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc.tar.gz
luajit-3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc.tar.bz2
luajit-3f32f4ac99c9ec9f8d58c021a7b623ee1d2467bc.zip
PPC: Add BC_TSETM.
-rw-r--r--src/buildvm_ppc.dasc42
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 ----------------------------------------- */