OpenCores
URL https://opencores.org/ocsvn/1664/1664/trunk

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_asm_opera_parametre_funsiona__m.c] - Rev 2

Compare with Previous | Blame | View Log

#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__m(struct cpu_1664 *cpu, struct lista *lista)
{
 
 const n1 sinia_m[] = {cpu_1664_asm_table_sinia_m};
 
 struct lista *m;
 nN lista_cuantia=lista->contador/sizeof(P);
 nN indise_m;
 n1 bitio_ajusta=0;
 n1 bitio_estende=0;
 n1 bitio_ordina=0;
 n1 bitio_orienta=0;
 nN estende;
 nN Ar=-1;
 
 if(lista_cuantia==0)
 {
  cadena__f((P)scrive_stdout, "eror ylr -\n");
  cpu->asm_eror=1;
  return 0;
 }
 else
 {
 
  if((((struct lista **)(lista->datos))[lista_cuantia-1])->datos[0]!='[')
  {
   estende=cpu_1664_asm_n8_valua__lista(cpu,((struct lista **)(lista->datos))[lista_cuantia-1]);
   indise_m=lista_cuantia-2;
  }
  else
  {
   estende=sizeof(cpu_1664_sinia_t);
   indise_m=lista_cuantia-1;
  }
 
  m=((struct lista **)(lista->datos))[indise_m];
  nN i=1;
  nN j;
  while(m->datos[i]!=']')
  {
 
   switch(m->datos[i])
   {
    default:
     if(bitio_ajusta==0) bitio_ordina=1;
     for(j=0; sinia_m[m->datos[i+j]]==1; j++) { }
     Ar=(cpu_1664_asm_n8_valua__cadena(cpu, m->datos+i, j));
     i+=j;
     break;
 
    case '+':
     bitio_ajusta=1;
     bitio_orienta=1;
     i++;
     break;
 
    case '-':
     bitio_ajusta=1;
     i++;
     break;
 
    case ',':
    case 0x09:
    case ' ':
     i++;
     break; 
   }
  }
 
  if(bitio_ajusta==0)
  {
   bitio_orienta=0;
   bitio_ordina=0;
  }
 
  switch(estende)
  {
   default:
    bitio_estende=4;
    break; 
 
   case 8:
    bitio_estende=3;
    break;
 
   case 4:
    bitio_estende=2;
    break;
 
   case 2:
    bitio_estende=1;
    break;
 
   case 1:
    bitio_estende=0;
    break;
  }
 
  if((Ar>=(1<<cpu_1664_opera_ldm_sinia))||(bitio_estende>3))
  {
   cadena__f((P)scrive_stdout, "eror ylr [%x] %x\n",Ar,1<<bitio_estende);
   cpu->asm_eror=1;
   return 0;
  }
  else
  {
   n1 bait= Ar|(bitio_estende<<cpu_1664_opera_ldm_bitio_estende0)|\
        (bitio_ajusta<<cpu_1664_opera_ldm_bitio_ajusta)|\
        (bitio_ordina<<cpu_1664_opera_ldm_bitio_ordina)|\
        (bitio_orienta<<cpu_1664_opera_ldm_bitio_orienta);
 
   return bait; 
  }
 }
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.