Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / cpus / vonk / ss / lib / cpu / src / SS_Io.cc
CommitLineData
920dae64
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: SS_Io.cc
4// Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
5// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
6//
7// The above named program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public
9// License version 2 as published by the Free Software Foundation.
10//
11// The above named program is distributed in the hope that it will be
12// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// General Public License for more details.
15//
16// You should have received a copy of the GNU General Public
17// License along with this work; if not, write to the Free Software
18// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19//
20// ========== Copyright Header End ============================================
21
22#ifdef COMPILE_FOR_SAM
23
24// The code is actially in ss/api/sam/src/SS_SamIo.cc
25
26#else
27
28#include "SS_Io.h"
29#include <stdio.h>
30
31SS_Io SS_Io::io;
32
33
34#ifndef MEMORY_MSYNC
35
36SS_Io::SS_Io()/*{{{*/
37 :
38 SS_AddressMap()
39{}
40/* }}}*/
41SS_Io::~SS_Io()/*{{{*/
42{}
43/*}}}*/
44void SS_Io::st8( uint_t sid, uint64_t addr, uint8_t data )/*{{{*/
45{
46 uint64_t _data = data;
47 cpu(sid,SS_Access::STORE,addr,1,&_data);
48}
49/*}}}*/
50void SS_Io::st16( uint_t sid, uint64_t addr, uint16_t data )/*{{{*/
51{
52 uint64_t _data = data;
53 cpu(sid,SS_Access::STORE,addr,2,&_data);
54}
55/*}}}*/
56void SS_Io::st32( uint_t sid, uint64_t addr, uint32_t data )/*{{{*/
57{
58 uint64_t _data = data;
59 cpu(sid,SS_Access::STORE,addr,4,&_data);
60}
61/*}}}*/
62void SS_Io::st64( uint_t sid, uint64_t addr, uint64_t data )/*{{{*/
63{
64 cpu(sid,SS_Access::STORE,addr,8,&data);
65}
66/*}}}*/
67void SS_Io::st128( uint_t sid, uint64_t addr, uint64_t data[2] )/*{{{*/
68{
69 cpu(sid,SS_Access::STORE,addr,16,data);
70}
71/*}}}*/
72void SS_Io::st512( uint_t sid, uint64_t addr, uint64_t data[8] )/*{{{*/
73{
74 cpu(sid,SS_Access::STORE,addr,64,data);
75}
76/*}}}*/
77
78uint8_t SS_Io::ld8u( uint_t sid, uint64_t addr )/*{{{*/
79{
80 uint64_t data;
81 cpu(sid,SS_Access::LOAD,addr,1,&data);
82 return data;
83}
84/*}}}*/
85int8_t SS_Io::ld8s( uint_t sid, uint64_t addr )/*{{{*/
86{
87 uint64_t data;
88 cpu(sid,SS_Access::LOAD,addr,1,&data);
89 return data;
90}
91/*}}}*/
92uint16_t SS_Io::ld16u( uint_t sid, uint64_t addr )/*{{{*/
93{
94 uint64_t data;
95 cpu(sid,SS_Access::LOAD,addr,2,&data);
96 return data;
97}
98/*}}}*/
99int16_t SS_Io::ld16s( uint_t sid, uint64_t addr )/*{{{*/
100{
101 uint64_t data;
102 cpu(sid,SS_Access::LOAD,addr,2,&data);
103 return data;
104}
105/*}}}*/
106uint32_t SS_Io::ld32u( uint_t sid, uint64_t addr )/*{{{*/
107{
108 uint64_t data;
109 cpu(sid,SS_Access::LOAD,addr,4,&data);
110 return data;
111}
112/*}}}*/
113int32_t SS_Io::ld32s( uint_t sid, uint64_t addr )/*{{{*/
114{
115 uint64_t data;
116 cpu(sid,SS_Access::LOAD,addr,4,&data);
117 return data;
118}
119/*}}}*/
120uint64_t SS_Io::ld64( uint_t sid, uint64_t addr )/*{{{*/
121{
122 uint64_t data;
123 cpu(sid,SS_Access::LOAD,addr,8,&data);
124 return data;
125}
126/*}}}*/
127void SS_Io::ld128( uint_t sid, uint64_t addr, uint64_t data[2] )/*{{{*/
128{
129 cpu(sid,SS_Access::LOAD,addr,16,data);
130}
131/*}}}*/
132void SS_Io::ld256( uint_t sid, uint64_t addr, uint64_t data[4] )/*{{{*/
133{
134 cpu(sid,SS_Access::LOAD,addr,32,data);
135}
136/*}}}*/
137void SS_Io::ld512( uint_t sid, uint64_t addr, uint64_t data[8] )/*{{{*/
138{
139 cpu(sid,SS_Access::LOAD,addr,64,data);
140}
141/*}}}*/
142
143void SS_Io::st64partial( uint_t sid, uint64_t addr, uint64_t data, uint64_t mask )/*{{{*/
144{
145 uint64_t _data[2];
146 _data[0] = data;
147 _data[1] = mask;
148 cpu(sid,SS_Access::STP,addr,8,_data);
149}
150/*}}}*/
151void SS_Io::ld128atomic( uint_t sid, uint64_t addr, uint64_t data[2] )/*{{{*/
152{
153 cpu(sid,SS_Access::LOAD,addr,16,data);
154}
155/*}}}*/
156uint8_t SS_Io::ldstub( uint_t sid, uint64_t addr )/*{{{*/
157{
158 uint64_t _data;
159 _data = 0xff;
160 cpu(sid,SS_Access::LDST,addr,1,&_data);
161 return _data;
162}
163/*}}}*/
164uint32_t SS_Io::swap( uint_t sid, uint64_t addr, uint32_t rd )/*{{{*/
165{
166 uint64_t _data;
167 _data = rd;
168 cpu(sid,SS_Access::SWAP,addr,4,&_data);
169 return _data;
170}
171/*}}}*/
172uint64_t SS_Io::casx( uint_t sid, uint64_t addr, uint64_t rd, uint64_t rs2 )/*{{{*/
173{
174 uint64_t _data[2];
175 _data[0] = rd;
176 _data[1] = rs2;
177 cpu(sid,SS_Access::CAS,addr,8,_data);
178 return _data[0];
179}
180/*}}}*/
181uint32_t SS_Io::cas( uint_t sid, uint64_t addr, uint32_t rd, uint32_t rs2 )/*{{{*/
182{
183 uint64_t _data[2];
184 _data[0] = rd;
185 _data[1] = rs2;
186 cpu(sid,SS_Access::CAS,addr,4,_data);
187 return _data[0];
188 return 0;
189}
190/*}}}*/
191
192#else
193
194#include <exception.h>
195
196SS_Io::SS_Io()/*{{{*/
197 :
198 SS_AddressMap(),
199 msync_object(0),
200 msync_pre_access(0),
201 msync_post_access(0),
202 access_io(0),
203 memory(&SS_Memory::memory)
204{
205 access_io_obj = (void*)this;
206}
207/*}}}*/
208SS_Io::~SS_Io()/*{{{*/
209{}
210/*}}}*/
211
212void SS_Io::msync_st( int sid, uint64_t addr, uint_t size, uint64_t data )/*{{{*/
213{
214 mem_xact.setStrand(sid);
215 mem_xact.paddr(addr);
216 mem_xact.size(size);
217 mem_xact.access(MemoryTransaction::WRITE);
218 mem_xact.referenceType(MemoryTransaction::DATA);
219 mem_xact.setData(data);
220
221 try { msync_pre_access(msync_object,mem_xact); } catch (exception &e) {}
222 try { msync_post_access(msync_object,mem_xact); } catch (exception &e) {}
223}
224/*}}}*/
225void SS_Io::msync_st( int sid, uint64_t addr, uint_t size, uint64_t* data )/*{{{*/
226{
227 mem_xact.setStrand(sid);
228 mem_xact.paddr(addr);
229 mem_xact.size(size);
230 mem_xact.access(MemoryTransaction::WRITE);
231 mem_xact.referenceType(MemoryTransaction::DATA);
232
233 for (uint_t i=0; size; i++, size -= 8)
234 mem_xact.setData(i,data[i]);
235
236 try { msync_pre_access(msync_object,mem_xact); } catch (exception &e) {}
237 try { msync_post_access(msync_object,mem_xact); } catch (exception &e) {}
238}
239/*}}}*/
240
241uint64_t SS_Io::msync_ld( int sid, uint64_t addr, uint_t size )/*{{{*/
242{
243 mem_xact.setStrand(sid);
244 mem_xact.paddr(addr);
245 mem_xact.size(size);
246 mem_xact.access(MemoryTransaction::READ);
247 mem_xact.referenceType(MemoryTransaction::DATA);
248
249 // access_io -- returns follow-me or not ..
250 uint64_t data = 0;
251 if(access_io && (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,size,&data,~0) == FOLLOWME){
252 mem_xact.setData(data);
253 mem_xact.access(mem_xact.access() | MemoryTransaction::FOLLOW_ME);
254 }
255
256 try { msync_pre_access(msync_object,mem_xact); } catch (exception &e) {}
257 try { msync_post_access(msync_object,mem_xact); } catch (exception &e) {}
258
259 return mem_xact.getData();
260}
261/*}}}*/
262void SS_Io::msync_ld( int sid, uint64_t addr, uint_t size, uint64_t* data )/*{{{*/
263{
264 mem_xact.setStrand(sid);
265 mem_xact.paddr(addr);
266 mem_xact.size(size);
267 mem_xact.access(MemoryTransaction::READ);
268 mem_xact.referenceType(MemoryTransaction::DATA);
269
270 // access_io -- returns follow-me or not ..
271 if(access_io && ((access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,size,data,~0)) == FOLLOWME){
272 for (uint_t i=0; size; i++, size -= 8)
273 mem_xact.setData(i,data[i]);
274 mem_xact.access(mem_xact.access() | MemoryTransaction::FOLLOW_ME);
275 }
276
277 try { msync_pre_access(msync_object,mem_xact); } catch (exception &e) {}
278 try { msync_post_access(msync_object,mem_xact); } catch (exception &e) {}
279
280 for (uint_t i=0; size; i++, size -= 8)
281 data[i]= mem_xact.getData(i);
282}
283/*}}}*/
284
285void SS_Io::poke8( int sid, uint64_t addr, uint8_t data )/*{{{*/
286{
287 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::WRITE,addr,1,(uint64_t*)&data,~0) == NOT_HANDLED)
288 memory->poke8(addr,data);
289}
290/*}}}*/
291void SS_Io::poke16( int sid, uint64_t addr, uint16_t data )/*{{{*/
292{
293 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::WRITE,addr,2,(uint64_t*)&data,~0) == NOT_HANDLED)
294 memory->poke16(addr,data);
295}
296/*}}}*/
297void SS_Io::poke32( int sid, uint64_t addr, uint32_t data )/*{{{*/
298{
299 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::WRITE,addr,4,(uint64_t*)&data,~0) == NOT_HANDLED)
300 memory->poke32(addr,data);
301}
302/*}}}*/
303void SS_Io::poke64( int sid, uint64_t addr, uint64_t data )/*{{{*/
304{
305 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::WRITE,addr,8,&data,~0) == NOT_HANDLED)
306 memory->poke64(addr,data);
307}
308/*}}}*/
309void SS_Io::poke128( int sid, uint64_t addr, uint64_t data[2] )/*{{{*/
310{
311 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::WRITE,addr,16,data,~0) == NOT_HANDLED)
312 memory->poke128(addr,data);
313}
314/*}}}*/
315void SS_Io::poke512( int sid, uint64_t addr, uint64_t data[8] )/*{{{*/
316{
317 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::WRITE,addr,64,data,~0) == NOT_HANDLED)
318 memory->poke512(addr,data);
319}
320/*}}}*/
321
322uint8_t SS_Io::peek8u( int sid, uint64_t addr )/*{{{*/
323{
324 uint64_t data = 0x0;
325 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,1,&data,~0) == NOT_HANDLED)
326 return memory->peek8u(addr);
327 return (uint8_t)data;
328}
329/*}}}*/
330int8_t SS_Io::peek8s( int sid, uint64_t addr )/*{{{*/
331{
332 uint64_t data = 0x0;
333 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,1,&data,~0) == NOT_HANDLED)
334 return memory->peek8s(addr);
335 return (int8_t)data;
336}
337/*}}}*/
338uint16_t SS_Io::peek16u( int sid, uint64_t addr )/*{{{*/
339{
340 uint64_t data = 0x0;
341 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,2,&data,~0) == NOT_HANDLED)
342 return memory->peek16u(addr);
343 return (uint16_t)data;
344}
345/*}}}*/
346int16_t SS_Io::peek16s( int sid, uint64_t addr )/*{{{*/
347{
348 uint64_t data = 0x0;
349 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,2,&data,~0) == NOT_HANDLED)
350 return memory->peek16s(addr);
351 return (int16_t)data;
352}
353/*}}}*/
354uint32_t SS_Io::peek32u( int sid, uint64_t addr )/*{{{*/
355{
356 uint64_t data = 0x0;
357 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,4,&data,~0) == NOT_HANDLED)
358 return memory->peek32u(addr);
359 return (uint32_t)data;
360}
361/*}}}*/
362int32_t SS_Io::peek32s( int sid, uint64_t addr )/*{{{*/
363{
364 uint64_t data = 0x0;
365 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,4,&data,~0) == NOT_HANDLED)
366 return memory->peek32s(addr);
367 return (int32_t)data;
368}
369/*}}}*/
370uint64_t SS_Io::peek64( int sid, uint64_t addr )/*{{{*/
371{
372 uint64_t data = 0x0;
373 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,8,&data,~0) == NOT_HANDLED)
374 return memory->peek64(addr);
375 return data;
376}
377/*}}}*/
378void SS_Io::peek128( int sid, uint64_t addr ,uint64_t data[2] )/*{{{*/
379{
380 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,16,data,~0) == NOT_HANDLED)
381 memory->peek128(addr,data);
382}
383/*}}}*/
384void SS_Io::peek256( int sid, uint64_t addr ,uint64_t data[4] )/*{{{*/
385{
386 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,32,data,~0) == NOT_HANDLED)
387 memory->peek256(addr,data);
388}
389/*}}}*/
390void SS_Io::peek512( int sid, uint64_t addr ,uint64_t data[8] )/*{{{*/
391{
392 if (access_io == 0 || (access_io)(access_io_obj,sid,MemoryTransaction::INTERNAL|MemoryTransaction::READ,addr,64,data,~0) == NOT_HANDLED)
393 memory->peek512(addr,data);
394}
395/*}}}*/
396
397uint32_t SS_Io::fetch32( uint_t sid, uint64_t addr )/*{{{*/
398{
399 if (msync_object)
400 {
401 mem_xact.setStrand(sid);
402 mem_xact.paddr(addr);
403 mem_xact.size(4);
404 mem_xact.access(MemoryTransaction::READ);
405 mem_xact.referenceType(MemoryTransaction::INSTR);
406
407 try { msync_pre_access(msync_object,mem_xact); } catch ( exception &e ) {}
408 try { msync_post_access(msync_object,mem_xact); } catch ( exception &e ) {}
409 }
410
411 return peek32u(sid,addr);
412}
413/*}}}*/
414void SS_Io::fetch256( uint_t sid, uint64_t addr, uint64_t data[4] )/*{{{*/
415{
416 if (msync_object)
417 {
418 mem_xact.setStrand(sid);
419 mem_xact.paddr(addr);
420 mem_xact.size(32);
421 mem_xact.access(MemoryTransaction::READ);
422 mem_xact.referenceType(MemoryTransaction::INSTR);
423
424 try { msync_pre_access(msync_object,mem_xact); } catch ( exception &e ) {}
425 try { msync_post_access(msync_object,mem_xact); } catch ( exception &e ) {}
426 }
427
428 peek256(sid,addr,data);
429}
430/*}}}*/
431void SS_Io::fetch512( uint_t sid, uint64_t addr, uint64_t data[8] )/*{{{*/
432{
433 if (msync_object)
434 {
435 mem_xact.setStrand(sid);
436 mem_xact.paddr(addr);
437 mem_xact.size(64);
438 mem_xact.access(MemoryTransaction::READ);
439 mem_xact.referenceType(MemoryTransaction::INSTR);
440
441 try { msync_pre_access(msync_object,mem_xact); } catch ( exception &e ) {}
442 try { msync_post_access(msync_object,mem_xact); } catch ( exception &e ) {}
443 }
444
445 peek512(sid,addr,data);
446}
447/*}}}*/
448
449void SS_Io::st8( uint_t sid, uint64_t addr, uint8_t data )/*{{{*/
450{
451 if (msync_object)
452 msync_st(sid,addr,1,data);
453 else
454 poke8(sid,addr,data);
455}
456/*}}}*/
457void SS_Io::st16( uint_t sid, uint64_t addr, uint16_t data )/*{{{*/
458{
459 if (msync_object)
460 msync_st(sid,addr,2,data);
461 else
462 poke16(sid,addr,data);
463}
464/*}}}*/
465void SS_Io::st32( uint_t sid, uint64_t addr, uint32_t data )/*{{{*/
466{
467 if (msync_object)
468 msync_st(sid,addr,4,data);
469 else
470 poke32(sid,addr,data);
471}
472/*}}}*/
473void SS_Io::st64( uint_t sid, uint64_t addr, uint64_t data )/*{{{*/
474{
475 if (msync_object)
476 msync_st(sid,addr,8,data);
477 else
478 poke64(sid,addr,data);
479}
480/*}}}*/
481void SS_Io::st128( uint_t sid, uint64_t addr, uint64_t data[2] )/*{{{*/
482{
483 if (msync_object)
484 msync_st(sid,addr,16,data);
485 else
486 poke128(sid,addr,data);
487}
488/*}}}*/
489void SS_Io::st512( uint_t sid, uint64_t addr, uint64_t data[8] )/*{{{*/
490{
491 if (msync_object)
492 msync_st(sid,addr,64,data);
493 else
494 poke512(sid,addr,data);
495}
496/*}}}*/
497
498uint8_t SS_Io::ld8u ( uint_t sid, uint64_t addr )/*{{{*/
499{
500 if (msync_object)
501 return msync_ld(sid,addr,1);
502 else
503 return peek8u(sid,addr);
504}
505/*}}}*/
506int8_t SS_Io::ld8s( uint_t sid, uint64_t addr )/*{{{*/
507{
508 if (msync_object)
509 return msync_ld(sid,addr,1);
510 else
511 return peek8s(sid,addr);
512}
513/*}}}*/
514uint16_t SS_Io::ld16u( uint_t sid, uint64_t addr )/*{{{*/
515{
516 if (msync_object)
517 return msync_ld(sid,addr,2);
518 else
519 return peek16u(sid,addr);
520}
521/*}}}*/
522int16_t SS_Io::ld16s( uint_t sid, uint64_t addr )/*{{{*/
523{
524 if (msync_object)
525 return msync_ld(sid,addr,2);
526 else
527 return peek16s(sid,addr);
528}
529/*}}}*/
530uint32_t SS_Io::ld32u( uint_t sid, uint64_t addr )/*{{{*/
531{
532 if (msync_object)
533 return msync_ld(sid,addr,4);
534 else
535 return peek32u(sid,addr);
536}
537/*}}}*/
538int32_t SS_Io::ld32s( uint_t sid, uint64_t addr )/*{{{*/
539{
540 if (msync_object)
541 return msync_ld(sid,addr,4);
542 else
543 return peek32s(sid,addr);
544}
545/*}}}*/
546uint64_t SS_Io::ld64( uint_t sid, uint64_t addr )/*{{{*/
547{
548 if (msync_object)
549 return msync_ld(sid,addr,8);
550 else
551 return peek64(sid,addr);
552}
553/*}}}*/
554void SS_Io::ld128( uint_t sid, uint64_t addr, uint64_t data[2] ) /*{{{*/
555{
556 if (msync_object)
557 msync_ld(sid,addr,16,data);
558 else
559 peek128(sid,addr,data);
560}
561/*}}}*/
562void SS_Io::ld256( uint_t sid, uint64_t addr, uint64_t data[4] )/*{{{*/
563{
564 if (msync_object)
565 msync_ld(sid,addr,32,data);
566 else
567 peek256(sid,addr,data);
568}
569/*}}}*/
570void SS_Io::ld512( uint_t sid, uint64_t addr, uint64_t data[8] )/*{{{*/
571{
572 if (msync_object)
573 msync_ld(sid,addr,64,data);
574 else
575 peek512(sid,addr,data);
576}
577/*}}}*/
578
579void SS_Io::st64partial( uint_t sid, uint64_t addr, uint64_t data, uint64_t mask ) /*{{{*/
580{
581 if (msync_object)
582 {
583 uint64_t temp = peek64(sid,addr);
584
585 if (mask < 0x100)
586 {
587 uint64_t data_mask = 0x0;
588 for(int i=0; i < 0x8; i++)
589 if((mask >> i) & 0x1)
590 data_mask |= (0xffULL << (0x8 * i));
591 data = (temp & ~data_mask) | (data & data_mask);
592 }
593 st64(sid,addr,data);
594 }
595 else
596 st64(sid,addr,data);
597}
598/*}}}*/
599
600void SS_Io::ld128atomic( uint_t sid, uint64_t addr, uint64_t data[2] )/*{{{*/
601{
602 fprintf(stderr,"SS_Io::ld128atomic(%d,%llx) not expected, ignoring it\n",sid,addr);
603}
604/*}}}*/
605uint8_t SS_Io::ldstub( uint_t sid, uint64_t addr )/*{{{*/
606{
607 fprintf(stderr,"SS_Io::ldstub(%d,%llx) not expected, ignoring it\n",sid,addr);
608 return 0x0;
609}
610/*}}}*/
611uint32_t SS_Io::swap( uint_t sid, uint64_t addr, uint32_t rd )/*{{{*/
612{
613 fprintf(stderr,"SS_Io::swap(%d,%llx) not expected, ignoring it\n",sid,addr);
614 return 0x0;
615}
616/*}}}*/
617uint64_t SS_Io::casx( uint_t sid, uint64_t addr, uint64_t rd, uint64_t rs2 )/*{{{*/
618{
619 fprintf(stderr,"SS_Io::casx(%d,%llx) not expected, ignoring it\n",sid,addr);
620 return 0x0;
621}
622/*}}}*/
623uint32_t SS_Io::cas( uint_t sid, uint64_t addr, uint32_t rd, uint32_t rs2 )/*{{{*/
624{
625 fprintf(stderr,"SS_Io::cas(%d,%llx) not expected, ignoring it\n",sid,addr);
626 return 0x0;
627}
628/*}}}*/
629
630#endif
631#endif
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647