diff options
Diffstat (limited to 'src')
| -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 ----------------------------------------- */ |
