func (vm *v53) pow(instr vm.Instr) {
	var (
		rb = vm.rk(instr.B())
		rc = vm.rk(instr.C())
		ra = vm.thread().arith(OpPow, rb, rc)
	)
	vm.thread().frame().set(instr.A(), ra)
}
POW: Exponentation operator.

@args A B C

R(A) := RK(B) ^ RK(C)
package lua
import "github.com/Azure/golua/lua/vm"
func (vm *v53) move(instr vm.Instr) {
	rb := vm.thread().frame().get(instr.B())
	vm.thread().frame().set(instr.A(), rb)
}
func (vm *v53) loadk(instr vm.Instr) {
	kst := vm.constant(instr.BX())
	vm.thread().frame().set(instr.A(), kst)
}
func (vm *v53) loadkx(instr vm.Instr) {
	extra := vm.thread().frame().step(1).AX()
	ra := vm.constant(extra)
	vm.thread().frame().set(instr.A(), ra)
}
func (vm *v53) loadbool(instr vm.Instr) {
	vm.thread().frame().set(instr.A(), Bool(instr.B() == 1))
	if instr.C() != 0 {
		vm.thread().frame().step(1)
	}
}
func (vm *v53) loadnil(instr vm.Instr) {
	var (
		a = instr.A()
		b = instr.B()
	)
	for i := a; i <= a+b; i++ {
		vm.thread().frame().set(i, Nil(1))
	}
}
func (vm *v53) getupval(instr vm.Instr) {
	var (
		a = instr.A()
		b = instr.B()
	)
	up := vm.thread().frame().getUp(b)
	vm.thread().frame().set(a, up.get())
}
func (vm *v53) setupval(instr vm.Instr) {
	var (
		a = instr.A()
		b = instr.B()
	)
	ra := vm.thread().frame().get(a)
	vm.thread().frame().setUp(b, ra)
}
func (vm *v53) gettable(instr vm.Instr) {
	var (
		a = instr.A()
		b = instr.B()
		c = instr.C()
	)
	t := vm.thread().frame().get(b)
	k := vm.rk(c)
	v := vm.thread().gettable(t, k, false)
	vm.thread().frame().set(a, v)
}
func (vm *v53) settable(instr vm.Instr) {
	obj := vm.thread().frame().get(instr.A())
	key := vm.rk(instr.B())
	val := vm.rk(instr.C())
	vm.thread().settable(obj, key, val, false)
}
func (vm *v53) gettabup(instr vm.Instr) {
	up := vm.thread().frame().getUp(instr.B()).get()
	rc := vm.rk(instr.C())
	ra := vm.thread().gettable(up, rc, false)
	vm.thread().frame().set(instr.A(), ra)
}
func (vm *v53) settabup(instr vm.Instr) {
	up := vm.thread().frame().getUp(instr.A()).get()
	rb := vm.rk(instr.B())
	rc := vm.rk(instr.C())
	vm.thread().settable(up, rb, rc, false)
}
func (vm *v53) newtable(instr vm.Instr) {
	var (
		a = instr.A()
		b = instr.B()
		c = instr.C()
	)
	t := newTable(vm.thread(), fb2i(b), fb2i(c))
	vm.thread().frame().set(a, t)
}
func (vm *v53) self(instr vm.Instr) {
	var (
		obj = vm.thread().frame().get(instr.B())
		key = vm.rk(instr.C())
		fn  = vm.thread().gettable(obj, key, false)
	)
	vm.thread().frame().set(instr.A(), fn)
	vm.thread().frame().set(instr.A()+1, obj)
}
func (vm *v53) add(instr vm.Instr) {
	var (
		rb = vm.rk(instr.B())
		rc = vm.rk(instr.C())
		ra = vm.thread().arith(OpAdd, rb, rc)
	)
	vm.thread().frame().set(instr.A(), ra)
}
func (vm *v53) sub(instr vm.Instr) {
	var (
		rb = vm.rk(instr.B())
		rc = vm.rk(instr.C())
		ra = vm.thread().arith(OpSub, rb, rc)
	)
	vm.thread().frame().set(instr.A(), ra)
}
func (vm *v53) mul(instr vm.Instr) {
	var (
		rb = vm.rk(instr.B())
		rc = vm.rk(instr.C())
		ra = vm.thread().arith(OpMul, rb, rc)
	)
	vm.thread().frame().set(instr.A(), ra)
}
func (vm *v53) mod(instr vm.Instr) {
	var (
		rb = vm.rk(instr.B())
		rc = vm.rk(instr.C())
		ra = vm.thread().arith(OpMod, rb, rc)
	)
	vm.thread().frame().set(instr.A(), ra)
}