}
INSTR(AutoLoopEnd) { GWDEBUG_EXE
- m_uint* idx = (m_uint*)MEM(instr->m_val);
- ++*idx;
const M_Object o = *(M_Object*)REG(-SZ_INT);
- if(*idx >= m_vector_size(ARRAY(o))) {
+ if(++*(m_uint*)MEM(instr->m_val) >= m_vector_size(ARRAY(o))) {
shred->pc = instr->m_val2;
POP_REG(shred, SZ_INT);
}
#ifdef OPTIMIZE
INSTR(PutArgsInMem) { GWDEBUG_EXE
POP_REG(shred, instr->m_val)
- memcpy(shred->mem, shred->reg, instr->m_val);
+ for(m_uint i = 0; i < instr->m_val; i += SZ_INT)
+ *(m_uint*)(shred->mem + i) = *(m_uint*)(shred->reg + i);
}
#endif
memcpy(arg->d, shred->reg - SZ_INT, instr->m_val);
const Vector kinds = (Vector)instr->m_val2;
arg->s = vector_size(kinds);
- arg->k = (m_uint*)xcalloc(arg->s, SZ_INT);
+ arg->k = (m_uint*)xmalloc(arg->s * SZ_INT);
memcpy(arg->k, kinds->ptr + OFFSET, arg->s * SZ_INT);
*(struct Vararg_**)REG(-SZ_INT) = arg;
}
INSTR(VarargMember) { GWDEBUG_EXE
const struct Vararg_* arg = *(struct Vararg_**)MEM(instr->m_val);
- memcpy(REG(0), (arg->d + arg->o), instr->m_val2);
+ for(m_uint i = 0; i < instr->m_val2; i += SZ_INT)
+ *(m_uint*)REG(0) = *(m_uint*)(arg->d + arg->o);
PUSH_REG(shred, instr->m_val2);
}