10 #define scGate2Input_h
17 #define MAKE_TIME_BENCHMARKING // uncomment to measure the time with benchmarking macros
18 #include "MacroTimeBenchmarking.h"
19 #define SC_MAKE_TIME_BENCHMARKING // uncomment to measure the time with benchmarking macros
20 #include "MacroScTimeBenchmarking.h"
97 ID_Get(){
return msID;}
98 SC_GRIDPOINT_MASK_TYPE
99 IDMask_Get(
void){
return msMask.ID;}
102 Name_Get(
void){
return string(name());}
107 assert(H<MAX_HTHREADS);
110 AllocateAHThread(
void);
124 Parent_Get(
void) {
return msParent;}
132 return msIGPCB[index];
137 Register_Get(
int R){
return HThreadExec_Get()->Register_Get(R);}
140 direct_read(
int *data,
unsigned int address);
142 direct_write(
int *data,
unsigned int address);
150 read(
int *data,
unsigned int address){
return CLUSTER_BUS_OK;}
152 write(
int *data,
unsigned int address){
return CLUSTER_BUS_OK;}
160 AllocatedBit_Set(
bool V=
true);
162 AllocatedBit_Get(
void) {
return msStatus.Allocated;}
164 PreAllocatedBit_Set(
bool V=
true);
166 PreAllocatedBit_Get(
void){
return msStatus.PreAllocated;}
168 DeniedBit_Set(
bool P=
true);
171 {
return msStatus.Denied;}
173 AvailableBit_Get(
void)
174 {
return msStatus.Available;}
176 MetaBit_Set(
bool P=
true);
178 MetaBit_Get(
void){
return msStatus.Meta;}
180 WaitBit_Set(
bool P=
true);
182 WaitBit_Get(
void){
return msStatus.Wait;}
185 {
return AvailableBit_Get();}
187 IsAllocated(
void) {
return AllocatedBit_Get();}
189 IsPreAllocated(
void) {
return PreAllocatedBit_Get();}
191 IsDenied(
void) {
return DeniedBit_Get();}
193 IsWaiting(
void) {
return msStatus.Wait;}
198 MakeFetch, FetchReady
211 StringOfMemoryAddress_Get(
void)
214 oss <<
"0x" << hex << std::setfill(
'0') << std::setw((FMEMORY_ADDRESS_WIDTH+3)/4) << msMemoryAddress << dec;
222 StringOfStatus_Get(
void)
225 oss <<
"0x" << hex << std::setfill(
'0') << std::setw(4) << mStatus << dec;
233 StringOfClusterAddress_Get(
void);
241 doWriteSignals(
void);
242 SC_GRIDPOINT_MASK_TYPE
243 PreAllocatedMask_Get(
void);
245 PreAllocatedMask_Set(SC_GRIDPOINT_MASK_TYPE Mask);
253 SC_GRIDPOINT_MASK_TYPE
254 ChildrenMask_Get(
void) {
return msMask.Children;}
256 ChildrenMask_Set(SC_GRIDPOINT_MASK_TYPE M) { msMask.Children = M;}
259 HThreadsMask_Get(
void){SC_HTHREAD_MASK_TYPE MyMask =(int16_t)(msMask.AllocatedHThreads).to_ulong();
263 PreAllocatedMaskBit_Set(
scGridPoint* C,
bool V=
true);
267 IsMorphingInstructionFetched(
scHThread* H){
return true;}
269 uint32_t readDataMem(uint32_t addr,
int size);
271 HandleSuspending(
void);
278 HThread_Get(SC_HTHREAD_ID_TYPE H)
279 { assert((H>=0) && (H<MAX_HTHREADS));
280 return mHThreads[H];}
285 HThreadExec_Get(
void) {
286 return mHThreadExec;}
288 HThreadFetch_Get(
void) {
289 return mHThreadFetch;}
291 HThreadExec_Set(
scHThread* H){mHThreadExec = H; }
293 HThreadFetch_Set(
scHThread* H){mHThreadFetch = H; }
298 CooperationMode_Get(
void) {
return msCooperationMode;}
302 PrologString_Get(
void);
304 MemoryAddress_Set(SC_ADDRESS_TYPE MA) { msMemoryAddress = MA;}
306 QTOffset_Get(SC_HTHREAD_ID_TYPE H)
307 { assert((H>=0)&(H<MAX_HTHREADS));
return mHThreads[H]->QTOffset_Get();}
309 StringOfQT_Get(SC_HTHREAD_ID_TYPE H)
310 { assert((H>=0)&(H<MAX_HTHREADS));
return mHThreads[H]->StringOfQT_Get();}
320 CreateRegisterMessageTo(
scGridPoint* To, SC_GRIDPOINT_MASK_TYPE Mask);
331 CreateQtCreateMessageTo(
scGridPoint* To, SC_ADDRESS_TYPE PC, SC_GRIDPOINT_MASK_TYPE Mask, SC_GRIDPOINT_MASK_TYPE BackMask);
335 CreateSpecialMessageTo(
scGridPoint* To, int16_t Key, int8_t RegNo, int32_t R);
337 Status_Set(uint16_t S) {mStatus = S;}
339 Status_Get(
void) {
return mStatus;}
341 ConnectToClusterBus(scClusterBus* ClusterBus);
343 CreateMemoryReadMessage(
unsigned int Address,
int Length);
345 CreateMemoryWriteMessage(
unsigned int Address,
int Length);
347 FlagWordLength_Get(
void) {
return 0;}
349 ConditionCode_Get(
void) {
return 0;}
351 ConditionCode_Set(int32_t C){}
352 SC_GRIDPOINT_MASK_TYPE
353 doWaitMask_Get(SC_ADDRESS_TYPE Offset);
355 doFindHostToProcess(SC_ADDRESS_TYPE Offs, SC_GRIDPOINT_MASK_TYPE Mask);
357 doCanTerminate( SC_GRIDPOINT_MASK_TYPE Address);
415 void NotifyThreadOnMemoryArrival()
416 { mHThreadFetch->EVENT_HTHREAD.MemoryContentArrived.notify();}
420 HThreadAllocatedBit_Set(SC_HTHREAD_ID_TYPE H,
bool B)
421 { assert(H < MAX_HTHREADS); msMask.AllocatedHThreads[H] = B;}
423 HThreadAllocatedBit_Get(SC_HTHREAD_ID_TYPE H)
424 { assert(H < MAX_HTHREADS);
return msMask.AllocatedHThreads[H];}
431 int OperatingBits_Get(
void){
return mGridPointOperatingStateBit.to_ulong();}
432 bool IsObserved(
void)
433 {
return mObservedHThreads;}
435 ObservedHThreadBit_Set(SC_HTHREAD_MASK_TYPE M,
bool B);
440 InstanceCount_Get(
void) {
return mInstanceCount % 50;}
453 AvailableBit_Set(
void);
455 SleepingBit_Set(
void);
464 mHThreadFetch, *mHThreadExec;
499 mHThreads[MAX_HTHREADS];
505 mGridPointOperatingStateBit;
507 chrono::steady_clock::time_point
509 std::chrono::duration< int64_t, nano>
510 m_part_time, m_sum_time;
514 #endif // scGate2Input_h