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] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mrdmkg
#include "cpu_1664.h"
2
 
3
n1 cpu_1664_asm_opera_parametre_funsiona__m(struct cpu_1664 *cpu, struct lista *lista)
4
{
5
 
6
 const n1 sinia_m[] = {cpu_1664_asm_table_sinia_m};
7
 
8
 struct lista *m;
9
 nN lista_cuantia=lista->contador/sizeof(P);
10
 nN indise_m;
11
 n1 bitio_ajusta=0;
12
 n1 bitio_estende=0;
13
 n1 bitio_ordina=0;
14
 n1 bitio_orienta=0;
15
 nN estende;
16
 nN Ar=-1;
17
 
18
 if(lista_cuantia==0)
19
 {
20
  cadena__f((P)scrive_stdout, "eror ylr -\n");
21
  cpu->asm_eror=1;
22
  return 0;
23
 }
24
 else
25
 {
26
 
27
  if((((struct lista **)(lista->datos))[lista_cuantia-1])->datos[0]!='[')
28
  {
29
   estende=cpu_1664_asm_n8_valua__lista(cpu,((struct lista **)(lista->datos))[lista_cuantia-1]);
30
   indise_m=lista_cuantia-2;
31
  }
32
  else
33
  {
34
   estende=sizeof(cpu_1664_sinia_t);
35
   indise_m=lista_cuantia-1;
36
  }
37
 
38
  m=((struct lista **)(lista->datos))[indise_m];
39
  nN i=1;
40
  nN j;
41
  while(m->datos[i]!=']')
42
  {
43
 
44
   switch(m->datos[i])
45
   {
46
    default:
47
     if(bitio_ajusta==0) bitio_ordina=1;
48
     for(j=0; sinia_m[m->datos[i+j]]==1; j++) { }
49
     Ar=(cpu_1664_asm_n8_valua__cadena(cpu, m->datos+i, j));
50
     i+=j;
51
     break;
52
 
53
    case '+':
54
     bitio_ajusta=1;
55
     bitio_orienta=1;
56
     i++;
57
     break;
58
 
59
    case '-':
60
     bitio_ajusta=1;
61
     i++;
62
     break;
63
 
64
    case ',':
65
    case 0x09:
66
    case ' ':
67
     i++;
68
     break;
69
   }
70
  }
71
 
72
  if(bitio_ajusta==0)
73
  {
74
   bitio_orienta=0;
75
   bitio_ordina=0;
76
  }
77
 
78
  switch(estende)
79
  {
80
   default:
81
    bitio_estende=4;
82
    break;
83
 
84
   case 8:
85
    bitio_estende=3;
86
    break;
87
 
88
   case 4:
89
    bitio_estende=2;
90
    break;
91
 
92
   case 2:
93
    bitio_estende=1;
94
    break;
95
 
96
   case 1:
97
    bitio_estende=0;
98
    break;
99
  }
100
 
101
  if((Ar>=(1<<cpu_1664_opera_ldm_sinia))||(bitio_estende>3))
102
  {
103
   cadena__f((P)scrive_stdout, "eror ylr [%x] %x\n",Ar,1<<bitio_estende);
104
   cpu->asm_eror=1;
105
   return 0;
106
  }
107
  else
108
  {
109
   n1 bait= Ar|(bitio_estende<<cpu_1664_opera_ldm_bitio_estende0)|\
110
        (bitio_ajusta<<cpu_1664_opera_ldm_bitio_ajusta)|\
111
        (bitio_ordina<<cpu_1664_opera_ldm_bitio_ordina)|\
112
        (bitio_orienta<<cpu_1664_opera_ldm_bitio_orienta);
113
 
114
   return bait;
115
  }
116
 }
117
}

powered by: WebSVN 2.1.0

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