Ejemplo n.º 1
0
static int	get_second_arg(t_champion *champion, unsigned char **arena,
			       char codage)
{
  int		i;
  char		tmp[4];

  tmp[0] = 0;
  tmp[1] = 0;
  if ((IS_REGISTER((codage << 2))) == 1)
    {
      if ((*arena)[champion->pc] <= REG_NUMBER)
	i = champion->reg[(*arena)[champion->pc]];
      champion->pc = (champion->pc + 1) % MEM_SIZE;
    }
  else if ((IS_DIRECT((codage << 2))) == 1)
	{
	  tmp[2] = (*arena)[champion->pc];
	  tmp[3] = (*arena)[(champion->pc + 1) % MEM_SIZE];
	  i = SWAP_ENDIAN(*(int*)tmp);
	  champion->pc = (champion->pc + 2) % MEM_SIZE;
	}
  else if ((IS_INDIRECT((codage << 2))) == 1)
    i = my_ind(champion, arena, codage);
  return (i);
}
Ejemplo n.º 2
0
static int	my_ind(t_champion *champion, unsigned char **arena, char codage)
{
  int		i;
  int		j;
  char		tmp[4];

  j = 4;
  tmp[2] = (*arena)[champion->pc];
  tmp[3] = (*arena)[(champion->pc + 1) % MEM_SIZE];
  tmp[0] = 0;
  tmp[1] = 0;
  i = SWAP_ENDIAN(*(int*)tmp);
  i = i + ((IS_REGISTER(codage << 4)) == 1 ? 3 : 4);
  while (--j >= 0)
    tmp[j] = (*arena)[(champion->pc + (i++ % IDX_MOD)) % MEM_SIZE];
  i = (*(int*)tmp);
  champion->pc = (champion->pc + 2) % MEM_SIZE;
  return (i);
}
Ejemplo n.º 3
0
static int
_reg_parm (sym_link * l, bool reentrant)
{
  if (options.noRegParams)
    {
      return FALSE;
    }
  else
    {
      if (!IS_REGISTER(l) || getSize(l) > 2)
        {
          return FALSE;
        }
      if (_G.regParams == 2)
        {
          return FALSE;
        }
      else
        {
          _G.regParams++;
          return TRUE;
        }
    }
}