From 15834c39908094df81d428f10f022dea0a0f5558 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 7 Sep 2010 01:15:21 +0200 Subject: [PATCH] PPC: Add unary instructions. --- src/buildvm_ppc.dasc | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 6989c447..960f9b7b 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc @@ -1121,13 +1121,41 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | ins_next_ break; case BC_NOT: - | NYI + | // RA = dst*8, RD = src*8 + | lwzx TMP0, BASE, RD + | subfic TMP1, TMP0, LJ_TTRUE + | adde TMP0, TMP0, TMP1 + | stwx TMP0, BASE, RA + | ins_next break; case BC_UNM: - | NYI + | // RA = dst*8, RD = src*8 + | evlddx TMP0, BASE, RD + | lus TMP1, 0x8000 + | li TMP2, 0 + | checknum TMP0 + | evmergelo TMP1, TMP1, TMP2 + | checkfail ->vmeta_unm + | evxor TMP0, TMP0, TMP1 + | evstddx TMP0, BASE, RA + | ins_next break; case BC_LEN: - | NYI + | // RA = dst*8, RD = src*8 + | evlddx CARG1, BASE, RD + | checkstr CARG1 + | checkfail >2 + | lwz CRET1, STR:CARG1->len + |1: + | efdcfsi TMP0, CRET1 + | evstddx TMP0, BASE, RA + | ins_next + |2: + | checktab CARG1 + | checkfail ->vmeta_len + | bl extern lj_tab_len // (GCtab *t) + | // Returns uint32_t (but less than 2^31). + | b <1 break; /* -- Binary ops -------------------------------------------------------- */