/[smarc]/smarc/src/despasm/despasm.cc
ViewVC logotype

Diff of /smarc/src/despasm/despasm.cc

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

revision 1.1 by batonik, Thu Jan 2 20:53:20 2003 UTC revision 1.2 by batonik, Thu Jan 2 21:42:58 2003 UTC
# Line 83  string rejestr ( int num, int typ ) Line 83  string rejestr ( int num, int typ )
83  despasm::despasm ( vector<unsigned long> spasm_code, int typ_reg)  despasm::despasm ( vector<unsigned long> spasm_code, int typ_reg)
84  {  {
85          instr_word rozkaz;          instr_word rozkaz;
86          string  linia;          string  linia, regreg, regimm;
87          char    *bufor;          char    *bufor;
88          long    adres;          long    adres;
89    
# Line 97  despasm::despasm ( vector<unsigned long> Line 97  despasm::despasm ( vector<unsigned long>
97                  rozkaz = bit_word(spasm_code[i]);                  rozkaz = bit_word(spasm_code[i]);
98    
99                  memset(bufor, 0, DEASM_BUFOR);                  memset(bufor, 0, DEASM_BUFOR);
100                    linia = "";
101                    regreg = "";
102                    regimm = "";
103    
104                  sprintf(bufor, INSTR_FORMAT, rozkazy[rozkaz.instr]);                  sprintf(bufor, INSTR_FORMAT, rozkazy[rozkaz.instr]);
105                  linia = bufor;                  linia = bufor;
106    
# Line 116  despasm::despasm ( vector<unsigned long> Line 120  despasm::despasm ( vector<unsigned long>
120                                  linia += bufor;                                  linia += bufor;
121                                  break;                                  break;
122                          case (instr_word::primary_reg):                          case (instr_word::primary_reg):
123                                  linia += rejestr(rozkaz.src1, typ_reg) + ", " +                                  regreg += (string) "[ " + rejestr(rozkaz.src1,typ_reg) +
124                                          rejestr(rozkaz.src2, typ_reg) + ", " +                                          (string) " + " + rejestr(rozkaz.src2,typ_reg) + (string) " ]";
125                                          rejestr(rozkaz.dst, typ_reg);  
126                                    if (rozkaz.group == instr_word::load
127                                            || rozkaz.instr == instr_word::swap)
128                                            linia += regreg + ", " + rejestr(rozkaz.dst, typ_reg);
129                                    else if (rozkaz.group == instr_word::store)
130                                            linia += rejestr(rozkaz.dst, typ_reg) + ", " + regreg;
131                                    else
132                                            linia += rejestr(rozkaz.src1, typ_reg) + ", " +
133                                                    rejestr(rozkaz.src2, typ_reg) + ", " +
134                                                    rejestr(rozkaz.dst, typ_reg);
135                                  break;                                  break;
136                          case (instr_word::primary_imm):                          case (instr_word::primary_imm):
137                                  sprintf(bufor, IMM_FORMAT, (int) rozwinZnak(rozkaz.imm13, 13));                                  sprintf(bufor, IMM_FORMAT, (int) rozwinZnak(rozkaz.imm13, 13));
138                                  linia += rejestr(rozkaz.src1, typ_reg) + ", " +                                  regreg = rejestr(rozkaz.src1,typ_reg) + " + " + (string) bufor;
139                                          bufor + ", " + rejestr(rozkaz.dst, typ_reg);                                  regimm += (string) "[ " + regreg + " ]";
140    
141                                    if (rozkaz.group == instr_word::load
142                                            || rozkaz.instr == instr_word::swap)
143                                            linia += regimm + ", " + rejestr(rozkaz.dst, typ_reg);
144                                    else if (rozkaz.group == instr_word::store)
145                                            linia += rejestr(rozkaz.dst, typ_reg) + ", " + regimm;
146                                    else if (rozkaz.instr == instr_word::jmpl)
147                                            linia += regreg + ", " + rejestr(rozkaz.dst, typ_reg);
148                                    else
149                                            linia += rejestr(rozkaz.src1, typ_reg) + ", " +
150                                                    bufor + ", " + rejestr(rozkaz.dst, typ_reg);
151                                  break;                                  break;
152                  }                  }
153    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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