/[smarc]/smarc/src/spasm/spasm.y
ViewVC logotype

Diff of /smarc/src/spasm/spasm.y

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12 by batonik, Fri Jan 3 15:51:09 2003 UTC revision 1.13 by batonik, Sat Jan 4 11:20:27 2003 UTC
# Line 11  Line 11 
11  %type <lcalk> rejestr  %type <lcalk> rejestr
12  %type <lcalk> rozkazy_3arg  %type <lcalk> rozkazy_3arg
13  %type <lcalk> argumenty  %type <lcalk> argumenty
 %type <lcalk> lo_op  
 %type <lcalk> hi_op  
14  %type <lcalk> b_cond  %type <lcalk> b_cond
15  %type <lcalk> mem_load  %type <lcalk> mem_load
16  %type <lcalk> mem_store  %type <lcalk> mem_store
# Line 259  liczba:                LICZBA Line 257  liczba:                LICZBA
257    
258                                  etyk = (eStala)?eStala:eDane;                                  etyk = (eStala)?eStala:eDane;
259    
260                                    // to przydałoby się całkiem inaczej rozwiązać, ale
261                                    // nie mam czasu :/
262                                    if (!etyk)
263                                            etyk = ZnajdzEtykieteRozkazu($1);
264    
265                                  if (!etyk)                                  if (!etyk)
266                                  {                                  {
267                                          yyerror(E_NOCONST);                                          yyerror(E_NOCONST);
# Line 267  liczba:                LICZBA Line 270  liczba:                LICZBA
270                                  else                                  else
271                                          $$ = etyk->adres;                                          $$ = etyk->adres;
272                          }                          }
273                    | LO NAWIASL liczba NAWIASP
274                            {
275                                    $$ = OP_LO($3);
276                            }
277                    | HI NAWIASL liczba NAWIASP
278                            {
279                                    $$ = OP_HI($3);
280                            }
281  ;  ;
282    
283  wyr2:           dyrektywa  wyr2:           dyrektywa
# Line 556  dwa_arg:       PR_MOV rejestr PRZECINEK rejest Line 564  dwa_arg:       PR_MOV rejestr PRZECINEK rejest
564                                  DodajRozkaz(ZrobRozkaz(TYP_REGREG, F_ALU, 0, OPC_SUBCC,                                  DodajRozkaz(ZrobRozkaz(TYP_REGREG, F_ALU, 0, OPC_SUBCC,
565                                          $4, $2, 0), TAK, NULL);                                          $4, $2, 0), TAK, NULL);
566                          }                          }
567                  | R_SETHI sethi PRZECINEK rejestr                  | R_SETHI liczba PRZECINEK rejestr
568                            {
569                                    if ($2 > 0x3FFFFF)
570                                    {
571                                            yyerror(E_OVERFLOW);
572                                            YYABORT;
573                                    }
574                                    DodajRozkaz(ZrobSetHi($4,$2), TAK, NULL);
575                            }
576                    | PR_SET liczba PRZECINEK rejestr
577                          {                          {
578  //                              DodajRozkaz(ZrobSethi($4,$2), );                                  DodajRozkaz( ZrobSetHi($4, OP_HI($2)), TAK, NULL);
579                                    DodajRozkaz( ZrobRozkaz(TYP_REGIMM, F_ALU, $4, OPC_OR,
580                                            $4, 0, OP_LO($2)), TAK, NULL);
581                          }                          }
582                  | mem_instr                  | mem_instr
583                  | R_JMPL adres_wew PRZECINEK rejestr                  | R_JMPL adres_wew PRZECINEK rejestr
# Line 571  dwa_arg:       PR_MOV rejestr PRZECINEK rejest Line 590  dwa_arg:       PR_MOV rejestr PRZECINEK rejest
590                          }                          }
591  ;  ;
592    
 sethi:  
 ;  
   
593  mem_instr:      mem_load adres PRZECINEK rejestr  mem_instr:      mem_load adres PRZECINEK rejestr
594                          {                          {
595                                  ulint rozkaz = $2 | ROZKAZ_OPC($1) | ROZKAZ_DST($4);                                  ulint rozkaz = $2 | ROZKAZ_OPC($1) | ROZKAZ_DST($4);
# Line 653  trzy_arg:      rozkazy_3arg argumenty Line 669  trzy_arg:      rozkazy_3arg argumenty
669                          {                          {
670                                  ulint slowoRozkazowe = $2 | ROZKAZ_OPC($1);                                  ulint slowoRozkazowe = $2 | ROZKAZ_OPC($1);
671    
672                                  //sprawdzenie, czy nie było %lo() z etykietą, której                                  DodajRozkaz(slowoRozkazowe, TAK, NULL);
                                 // jeszcze nie było  
 //                              if (etykLink)  
 //                                      DodajRozkaz(slowoRozkazowe, NIE, etykLink);  
 //                              else  
                                         DodajRozkaz(slowoRozkazowe, TAK, NULL);  
                                 etykLink = NULL;  
673                          }                          }
674  ;  ;
675    
# Line 712  drugi_arg:     rejestr Line 722  drugi_arg:     rejestr
722                                  else                                  else
723                                          $$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($1);                                          $$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($1);
724                          }                          }
                 | lo_op  
                         {  
                                 $$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($1);  
                         }  
 ;  
   
 lo_op:          LO NAWIASL CIAG_ALNUM NAWIASP  
                         {  
 /*                              etykLink = ZnajdzEtykieteStalej($3);  
   
                                 if (!etykLink)  
                                 {  
                                         etykLink = ZnajdzEtykieteDanych($3);  
                                         if (!etykLink)  
 */  
                         }  
                 | LO NAWIASL liczba NAWIASP  
                         {  
                                 $$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM(OP_LO($3));  
                         }  
725  ;  ;
726    
 hi_op:          HI NAWIASL CIAG_ALNUM NAWIASP  
                         {  
                         }  
                 | HI NAWIASL liczba NAWIASP  
                         {  
                                 $$ = OP_HI($3);  
                         }  
 ;  

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26