diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index dd99c077..9cdc3643 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc @@ -1272,10 +1272,18 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | ins_arith efddiv break; case BC_MODVN: - | NYI + | ins_arithpre RD, SAVE0 + |->BC_MODVN_Z: + | efddiv CARG2, RD, SAVE0 + | bl ->vm_floor // floor(b/c) + | efdmul TMP0, CRET2, SAVE0 + | efdsub TMP0, RD, TMP0 // b - floor(b/c)*c + | evstddx TMP0, BASE, RA + | ins_next break; case BC_MODNV: case BC_MODVV: - | NYI + | ins_arithpre RD, SAVE0 + | b ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. break; case BC_POW: | evlddx CARG2, BASE, RB