/[smarc]/smarc/src/vmachine/cache.cc
ViewVC logotype

Diff of /smarc/src/vmachine/cache.cc

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

revision 1.2 by misto, Mon Dec 30 19:31:32 2002 UTC revision 1.3 by misto, Thu Jan 2 17:43:54 2003 UTC
# Line 47  void cache::process( mode m = rd, size s Line 47  void cache::process( mode m = rd, size s
47                  if ( s == word )                  if ( s == word )
48                          value = w;                          value = w;
49                  else if ( s == half || s == uhalf ) {                  else if ( s == half || s == uhalf ) {
50                          value = w.b(offset, 15 + offset );                          value = w.b(31 - offset - 15, 31 - offset );
51    
52                          if (s == half && value.b(15))                          if (s == half && value.b(15) == 1)
53                                  value.bset(16,31);                                  value.bset(16,31);
54                                                                    
55                  } else if ( s == byte || s == ubyte ) {                  } else if ( s == byte || s == ubyte ) {
56                          value = w.b(offset, 7 + offset );                          value = w.b(31 - offset - 7, 31 - offset );
57    
58                          if (s == byte && value.b(7))                          if (s == byte && value.b(7) == 1)
59                                  value.bset(8,31);                                  value.bset(8,31);
60                  } else                  } else
61                          throw ex<vmachine>("cache::process: "                          throw ex<vmachine>("cache::process: "
# Line 70  void cache::process( mode m = rd, size s Line 70  void cache::process( mode m = rd, size s
70                  if ( s == word )                  if ( s == word )
71                          mem[ caddr ] = value;                          mem[ caddr ] = value;
72                  else if ( s == half )                  else if ( s == half )
73                          mem[ caddr ] = (mem[caddr] & ~(0xffffUL<<offset) )                          mem[ caddr ] = (mem[caddr] & ~(0xffffUL<<(16-offset)) )
74                                          | (value.b(0,15)<<offset);                                          | (value.b(0,15)<<(16-offset));
75                  else if ( s == byte )                  else if ( s == byte )
76                          mem[ caddr ] = (mem[caddr] & ~(0xffUL<<offset) )                          mem[ caddr ] = (mem[caddr] & ~(0xffUL<<(24-offset)) )
77                                          | (value.b(0,8)<<offset);                                          | (value.b(0,8)<<(24-offset));
78                  else                  else
79                          throw ex<vmachine>("cache::process: "                          throw ex<vmachine>("cache::process: "
80                                  "Unknown cache input size mode.");                                  "Unknown cache input size mode.");
# Line 83  void cache::process( mode m = rd, size s Line 83  void cache::process( mode m = rd, size s
83                                  "Unknown cache I/O mode.");                                  "Unknown cache I/O mode.");
84  }  }
85    
86  vector<unsigned long> cache::get(  unsigned long num )  vector<unsigned long> cache::get( unsigned long num )
87  {  {
88            if (num == 0)
89                    num = mem_size;
90          if (num > mem_size )          if (num > mem_size )
91                  throw ex<vmachine>("cache::get: Number too large. "                  throw ex<vmachine>("cache::get: Number too large. "
92                          "Vmachine support only 256Kb of memory");                          "Vmachine support only 256Kb of memory");

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

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