Implement POW.

Allows use of the '^' operator, for example:

x = 2
y = 3
print(x ^ y) -- prints 8
This commit is contained in:
Michael Munday 2016-12-29 11:10:18 -05:00
parent 230a4aa424
commit 29223bb979

View File

@ -2059,9 +2059,24 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| j ->vmeta_arith_vvo
break;
case BC_POW:
| stg r0, 0(r0)
| stg r0, 0(r0)
| ins_ABC
| sllg RB, RB, 3(r0)
| sllg RC, RC, 3(r0)
| ld FARG1, 0(RB, BASE)
| ld FARG2, 0(RC, BASE)
| lg TMPR2, 0(RB, BASE)
| checknumtp TMPR2, ->vmeta_arith_vvo
| lg TMPR2, 0(RC, BASE)
| checknumtp TMPR2, ->vmeta_arith_vvo
| lgr RB, BASE // TODO: redundant, BASE is currently callee-saved.
| brasl r14, extern pow // double pow(double x, double y), result in f0.
| llgc RA, PC_RA
| lgr BASE, RB
| sllg RA, RA, 3(r0)
| std f0, 0(RA, BASE)
| ins_next
break;
case BC_CAT:
| stg r0, 0(r0)
| stg r0, 0(r0)