mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
PPC: Add BC_TSETM.
This commit is contained in:
parent
028a65a597
commit
3f32f4ac99
@ -2005,7 +2005,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
||||
break;
|
||||
|
||||
case BC_TSETM:
|
||||
| NYI
|
||||
| // RA = base*8 (table at base-1), RD = num_const*8 (start index)
|
||||
| add RA, BASE, RA
|
||||
|1:
|
||||
| add TMP3, KBASE, RD
|
||||
| lwz TAB:CARG2, -4(RA) // Guaranteed to be a table.
|
||||
| addic. TMP0, MULTRES, -8
|
||||
| lwz TMP3, 4(TMP3) // Integer constant is in lo-word.
|
||||
| srwi CARG3, TMP0, 3
|
||||
| beq >4 // Nothing to copy?
|
||||
| add CARG3, CARG3, TMP3
|
||||
| lwz TMP2, TAB:CARG2->asize
|
||||
| slwi TMP1, TMP3, 3
|
||||
| lbz TMP3, TAB:CARG2->marked
|
||||
| cmplw CARG3, TMP2
|
||||
| add TMP2, RA, TMP0
|
||||
| lwz TMP0, TAB:CARG2->array
|
||||
| bgt >5
|
||||
| add TMP1, TMP1, TMP0
|
||||
| andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table)
|
||||
|3: // Copy result slots to table.
|
||||
| evldd TMP0, 0(RA)
|
||||
| addi RA, RA, 8
|
||||
| cmpw cr1, RA, TMP2
|
||||
| evstdd TMP0, 0(TMP1)
|
||||
| addi TMP1, TMP1, 8
|
||||
| blt cr1, <3
|
||||
| bne >7
|
||||
|4:
|
||||
| ins_next
|
||||
|
|
||||
|5: // Need to resize array part.
|
||||
| stw BASE, L->base
|
||||
| mr CARG1, L
|
||||
| stw PC, SAVE_PC
|
||||
| bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize)
|
||||
| // Must not reallocate the stack.
|
||||
| b <1
|
||||
|
|
||||
|7: // Possible table write barrier for any value. Skip valiswhite check.
|
||||
| barrierback TAB:RB, TMP3, TMP0
|
||||
| b <4
|
||||
break;
|
||||
|
||||
/* -- Calls and vararg handling ----------------------------------------- */
|
||||
|
Loading…
Reference in New Issue
Block a user