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)
}
GETTABUP: Read a value from table in up-value into a register (globals).

@args A B C

R(A) := UpValue[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)
}