From: fennecdjay Date: Mon, 4 Mar 2019 18:46:38 +0000 (+0100) Subject: :art: Few improvments X-Git-Tag: nightly~2755 X-Git-Url: http://10.11.0.4:5575/?a=commitdiff_plain;h=9a5b0f897361abc009c948a8fc1b7b93c71102d7;p=gwion.git :art: Few improvments --- diff --git a/src/lib/instr.c b/src/lib/instr.c index e3718421..71b679ed 100644 --- a/src/lib/instr.c +++ b/src/lib/instr.c @@ -66,10 +66,8 @@ INSTR(AutoLoopStart) { GWDEBUG_EXE } 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); } @@ -78,7 +76,8 @@ INSTR(AutoLoopEnd) { GWDEBUG_EXE #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 diff --git a/src/lib/vararg.c b/src/lib/vararg.c index cdce3526..2128999c 100644 --- a/src/lib/vararg.c +++ b/src/lib/vararg.c @@ -37,7 +37,7 @@ INSTR(VarargIni) { GWDEBUG_EXE 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; } @@ -54,7 +54,8 @@ INSTR(VarargEnd) { GWDEBUG_EXE 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); }