-
- /* or a somewhat idealised simulator */
- if(strcmp((rts_argv[arg]+2),"onzo")==0) {
- RtsFlags.GranFlags.Costs.latency =
- RtsFlags.GranFlags.Costs.fetchtime =
- RtsFlags.GranFlags.Costs.additional_latency =
- RtsFlags.GranFlags.Costs.gunblocktime =
- RtsFlags.GranFlags.Costs.lunblocktime =
- RtsFlags.GranFlags.Costs.threadcreatetime =
- RtsFlags.GranFlags.Costs.threadqueuetime =
- RtsFlags.GranFlags.Costs.threadscheduletime =
- RtsFlags.GranFlags.Costs.threaddescheduletime =
- RtsFlags.GranFlags.Costs.threadcontextswitchtime = 0;
-
- RtsFlags.GranFlags.Costs.mpacktime =
- RtsFlags.GranFlags.Costs.munpacktime = 0;
-
- RtsFlags.GranFlags.Costs.heapalloc_cost = 1;
-
- /* RtsFlags.GranFlags.DoFairSchedule = rtsTrue; */ /* -b-R */
- /* RtsFlags.GranFlags.DoStealThreadsFirst = rtsTrue; */ /* -b-T */
- RtsFlags.GranFlags.DoAsyncFetch = rtsTrue; /* -bZ */
- RtsFlags.GranFlags.DoThreadMigration = rtsTrue; /* -bM */
- RtsFlags.GranFlags.GranSimStats.Full = rtsTrue; /* -bP */
-# if defined(GRAN_CHECK) && defined(GRAN)
- RtsFlags.GranFlags.Debug.event_stats = rtsTrue; /* print event statistics */
-# endif
- return;
- }
-
- /* Communication and task creation cost parameters */
- switch(rts_argv[arg][2]) {
- case '.':
- IgnoreYields = rtsTrue; // HWL HACK
- break;
-
- case ':':
- enable_GranSimLight(); /* set flags for GrAnSim-Light mode */
- break;
-
- case 'l':
- if (rts_argv[arg][3] != '\0')
- {
- RtsFlags.GranFlags.Costs.gunblocktime =
- RtsFlags.GranFlags.Costs.latency = decode(rts_argv[arg]+3);
- RtsFlags.GranFlags.Costs.fetchtime = 2*RtsFlags.GranFlags.Costs.latency;
- }
- else
- RtsFlags.GranFlags.Costs.latency = LATENCY;
- break;
-
- case 'a':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.additional_latency = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.additional_latency = ADDITIONAL_LATENCY;
- break;
-
- case 'm':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.mpacktime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.mpacktime = MSGPACKTIME;
- break;
-
- case 'x':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.mtidytime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.mtidytime = 0;
- break;
-
- case 'r':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.munpacktime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.munpacktime = MSGUNPACKTIME;
- break;
-
- case 'g':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.fetchtime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.fetchtime = FETCHTIME;
- break;
-
- case 'n':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.gunblocktime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.gunblocktime = GLOBALUNBLOCKTIME;
- break;
-
- case 'u':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.lunblocktime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.lunblocktime = LOCALUNBLOCKTIME;
- break;
-
- /* Thread-related metrics */
- case 't':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.threadcreatetime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.threadcreatetime = THREADCREATETIME;
- break;
-
- case 'q':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.threadqueuetime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.threadqueuetime = THREADQUEUETIME;
- break;
-
- case 'c':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.threadscheduletime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.threadscheduletime = THREADSCHEDULETIME;
-
- RtsFlags.GranFlags.Costs.threadcontextswitchtime = RtsFlags.GranFlags.Costs.threadscheduletime
- + RtsFlags.GranFlags.Costs.threaddescheduletime;
- break;
-
- case 'd':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.threaddescheduletime = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.threaddescheduletime = THREADDESCHEDULETIME;
-
- RtsFlags.GranFlags.Costs.threadcontextswitchtime = RtsFlags.GranFlags.Costs.threadscheduletime
- + RtsFlags.GranFlags.Costs.threaddescheduletime;
- break;
-
- /* Instruction Cost Metrics */
- case 'A':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.arith_cost = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.arith_cost = ARITH_COST;
- break;
-
- case 'F':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.float_cost = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.float_cost = FLOAT_COST;
- break;
-
- case 'B':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.branch_cost = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.branch_cost = BRANCH_COST;
- break;
-
- case 'L':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.load_cost = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.load_cost = LOAD_COST;
- break;
-
- case 'S':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.store_cost = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.store_cost = STORE_COST;
- break;
-
- case 'H':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.heapalloc_cost = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.heapalloc_cost = 0;
- break;
-
- case 'y':
- RtsFlags.GranFlags.DoAsyncFetch = rtsTrue;
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.FetchStrategy = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.FetchStrategy = 2;
- if (RtsFlags.GranFlags.FetchStrategy == 0)
- RtsFlags.GranFlags.DoAsyncFetch = rtsFalse;
- break;
-
- case 'K': /* sort overhead (per elem in spark list) */
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.pri_spark_overhead = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.pri_spark_overhead = PRI_SPARK_OVERHEAD;
- debugBelch("Overhead for pri spark: %d (per elem).\n",
- RtsFlags.GranFlags.Costs.pri_spark_overhead);
- break;
-
- case 'O': /* sort overhead (per elem in spark list) */
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.Costs.pri_sched_overhead = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.Costs.pri_sched_overhead = PRI_SCHED_OVERHEAD;
- debugBelch("Overhead for pri sched: %d (per elem).\n",
- RtsFlags.GranFlags.Costs.pri_sched_overhead);
- break;
-
- /* General Parameters */
- case 'p':
- if (rts_argv[arg][3] != '\0')
- {
- RtsFlags.GranFlags.proc = decode(rts_argv[arg]+3);
- if (RtsFlags.GranFlags.proc==0) {
- enable_GranSimLight(); /* set flags for GrAnSim-Light mode */
- } else if (RtsFlags.GranFlags.proc > MAX_PROC ||
- RtsFlags.GranFlags.proc < 1)
- {
- debugBelch("setupRtsFlags: no more than %u processors allowed\n",
- MAX_PROC);
- *error = rtsTrue;
- }
- }
- else
- RtsFlags.GranFlags.proc = MAX_PROC;
- break;
-
- case 'f':
- RtsFlags.GranFlags.Fishing = rtsTrue;
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.maxFishes = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.maxFishes = MAX_FISHES;
- break;
-
- case 'w':
- if (rts_argv[arg][3] != '\0')
- RtsFlags.GranFlags.time_slice = decode(rts_argv[arg]+3);
- else
- RtsFlags.GranFlags.time_slice = GRAN_TIME_SLICE;
- break;
-
- case 'C':
- RtsFlags.GranFlags.DoAlwaysCreateThreads=rtsTrue;
- RtsFlags.GranFlags.DoThreadMigration=rtsTrue;
- break;
-
- case 'G':
- debugBelch("Bulk fetching enabled.\n");
- RtsFlags.GranFlags.DoBulkFetching=rtsTrue;
- break;
-
- case 'M':
- debugBelch("Thread migration enabled.\n");
- RtsFlags.GranFlags.DoThreadMigration=rtsTrue;
- break;
-
- case 'R':
- debugBelch("Fair Scheduling enabled.\n");
- RtsFlags.GranFlags.DoFairSchedule=rtsTrue;
- break;
-
- case 'I':
- debugBelch("Priority Scheduling enabled.\n");
- RtsFlags.GranFlags.DoPriorityScheduling=rtsTrue;
- break;
-
- case 'T':
- RtsFlags.GranFlags.DoStealThreadsFirst=rtsTrue;
- RtsFlags.GranFlags.DoThreadMigration=rtsTrue;
- break;
-
- case 'Z':
- RtsFlags.GranFlags.DoAsyncFetch=rtsTrue;
- break;
-
-/* case 'z': */
-/* RtsFlags.GranFlags.SimplifiedFetch=rtsTrue; */
-/* break; */
-
- case 'N':
- RtsFlags.GranFlags.PreferSparksOfLocalNodes=rtsTrue;
- break;
-
- case 'b':
- RtsFlags.GranFlags.GranSimStats.Binary=rtsTrue;
- break;
-
- case 'P':
- /* format is -bP<c> where <c> is one char describing kind of profile */
- RtsFlags.GranFlags.GranSimStats.Full = rtsTrue;
- switch(rts_argv[arg][3]) {
- case '\0': break; // nothing special, just an ordinary profile
- case '0': RtsFlags.GranFlags.GranSimStats.Suppressed = rtsTrue;
- break;
- case 'b': RtsFlags.GranFlags.GranSimStats.Binary = rtsTrue;
- break;
- case 's': RtsFlags.GranFlags.GranSimStats.Sparks = rtsTrue;
- break;
- case 'h': RtsFlags.GranFlags.GranSimStats.Heap = rtsTrue;
- break;
- case 'n': RtsFlags.GranFlags.GranSimStats.NewLogfile = rtsTrue;
- break;
- case 'g': RtsFlags.GranFlags.GranSimStats.Global = rtsTrue;
- break;
- default: barf("Unknown option -bP%c", rts_argv[arg][3]);
- }
- break;
-
- case 's':
- RtsFlags.GranFlags.GranSimStats.Sparks=rtsTrue;
- break;
-
- case 'h':
- RtsFlags.GranFlags.GranSimStats.Heap=rtsTrue;
- break;
-
- case 'Y': /* syntax: -bY<n>[,<n>] n ... pos int */
- if (rts_argv[arg][3] != '\0') {
- char *arg0, *tmp;
-
- arg0 = rts_argv[arg]+3;
- if ((tmp = strstr(arg0,","))==NULL) {
- RtsFlags.GranFlags.SparkPriority = decode(arg0);
- debugBelch("SparkPriority: %u.\n",RtsFlags.GranFlags.SparkPriority);
- } else {
- *(tmp++) = '\0';
- RtsFlags.GranFlags.SparkPriority = decode(arg0);
- RtsFlags.GranFlags.SparkPriority2 = decode(tmp);
- debugBelch("SparkPriority: %u.\n",
- RtsFlags.GranFlags.SparkPriority);
- debugBelch("SparkPriority2:%u.\n",
- RtsFlags.GranFlags.SparkPriority2);
- if (RtsFlags.GranFlags.SparkPriority2 <
- RtsFlags.GranFlags.SparkPriority) {
- debugBelch("WARNING: 2nd pri < main pri (%u<%u); 2nd pri has no effect\n",
- RtsFlags.GranFlags.SparkPriority2,
- RtsFlags.GranFlags.SparkPriority);
- }
- }
- } else {
- /* plain pri spark is now invoked with -bX
- RtsFlags.GranFlags.DoPrioritySparking = 1;
- debugBelch("PrioritySparking.\n");
- */
- }
- break;
-
- case 'Q':
- if (rts_argv[arg][3] != '\0') {
- RtsFlags.GranFlags.ThunksToPack = decode(rts_argv[arg]+3);
- } else {
- RtsFlags.GranFlags.ThunksToPack = 1;
- }
- debugBelch("Thunks To Pack in one packet: %u.\n",
- RtsFlags.GranFlags.ThunksToPack);
- break;
-
- case 'e':
- RtsFlags.GranFlags.RandomSteal = rtsFalse;
- debugBelch("Deterministic mode (no random stealing)\n");
- break;
-
- /* The following class of options contains eXperimental */
- /* features in connection with exploiting granularity */
- /* information. I.e. if -bY is chosen these options */
- /* tell the RTS what to do with the supplied info --HWL */
-
- case 'W':
- if (rts_argv[arg][3] != '\0') {
- RtsFlags.GranFlags.packBufferSize_internal = decode(rts_argv[arg]+3);
- } else {
- RtsFlags.GranFlags.packBufferSize_internal = GRANSIM_DEFAULT_PACK_BUFFER_SIZE;
- }
- debugBelch("Size of GranSim internal pack buffer: %u.\n",
- RtsFlags.GranFlags.packBufferSize_internal);
- break;
-
- case 'X':
- switch(rts_argv[arg][3]) {
-
- case '\0':
- RtsFlags.GranFlags.DoPrioritySparking = 1;
- debugBelch("Priority Sparking with Normal Priorities.\n");
- RtsFlags.GranFlags.InversePriorities = rtsFalse;
- RtsFlags.GranFlags.RandomPriorities = rtsFalse;
- RtsFlags.GranFlags.IgnorePriorities = rtsFalse;
- break;
-
- case 'I':
- RtsFlags.GranFlags.DoPrioritySparking = 1;
- debugBelch("Priority Sparking with Inverse Priorities.\n");
- RtsFlags.GranFlags.InversePriorities++;
- break;
-
- case 'R':
- RtsFlags.GranFlags.DoPrioritySparking = 1;
- debugBelch("Priority Sparking with Random Priorities.\n");
- RtsFlags.GranFlags.RandomPriorities++;
- break;
-
- case 'N':
- RtsFlags.GranFlags.DoPrioritySparking = 1;
- debugBelch("Priority Sparking with No Priorities.\n");
- RtsFlags.GranFlags.IgnorePriorities++;
- break;
-
- default:
- bad_option( rts_argv[arg] );
- break;
- }
- break;
-
- case '-':
- switch(rts_argv[arg][3]) {
-
- case 'C':
- RtsFlags.GranFlags.DoAlwaysCreateThreads=rtsFalse;
- RtsFlags.GranFlags.DoThreadMigration=rtsFalse;
- break;
-
- case 'G':
- RtsFlags.GranFlags.DoBulkFetching=rtsFalse;
- break;
-
- case 'M':
- RtsFlags.GranFlags.DoThreadMigration=rtsFalse;
- break;
-
- case 'R':
- RtsFlags.GranFlags.DoFairSchedule=rtsFalse;
- break;
-
- case 'T':
- RtsFlags.GranFlags.DoStealThreadsFirst=rtsFalse;
- RtsFlags.GranFlags.DoThreadMigration=rtsFalse;
- break;
-
- case 'Z':
- RtsFlags.GranFlags.DoAsyncFetch=rtsFalse;
- break;
-
- case 'N':
- RtsFlags.GranFlags.PreferSparksOfLocalNodes=rtsFalse;
- break;
-
- case 'P':
- RtsFlags.GranFlags.GranSimStats.Suppressed=rtsTrue;
- break;
-
- case 's':
- RtsFlags.GranFlags.GranSimStats.Sparks=rtsFalse;
- break;
-
- case 'h':
- RtsFlags.GranFlags.GranSimStats.Heap=rtsFalse;
- break;
-
- case 'b':
- RtsFlags.GranFlags.GranSimStats.Binary=rtsFalse;
- break;
-
- case 'X':
- RtsFlags.GranFlags.DoPrioritySparking = rtsFalse;
- break;
-
- case 'Y':
- RtsFlags.GranFlags.DoPrioritySparking = rtsFalse;
- RtsFlags.GranFlags.SparkPriority = rtsFalse;
- break;
-
- case 'I':
- RtsFlags.GranFlags.DoPriorityScheduling = rtsFalse;
- break;
-
- case 'e':
- RtsFlags.GranFlags.RandomSteal = rtsFalse;
- break;
-
- default:
- bad_option( rts_argv[arg] );
- break;
- }
- break;
-
-# if defined(GRAN_CHECK) && defined(GRAN)
- case 'D':
- switch(rts_argv[arg][3]) {
- case 'Q': /* Set pack buffer size (same as 'Q' in GUM) */
- if (rts_argv[arg][4] != '\0') {
- RtsFlags.GranFlags.packBufferSize = decode(rts_argv[arg]+4);
- debugBelch("Pack buffer size: %d\n",
- RtsFlags.GranFlags.packBufferSize);
- } else {
- debugBelch("setupRtsFlags: missing size of PackBuffer (for -Q)\n");
- *error = rtsTrue;
- }
- break;
-
- default:
- if (isdigit(rts_argv[arg][3])) {/* Set all debugging options in one */
- /* hack warning: interpret the flags as a binary number */
- nat n = decode(rts_argv[arg]+3);
- set_GranSim_debug_options(n);
- } else {
- nat i;
- for (i=0; i<=MAX_GRAN_DEBUG_OPTION; i++)
- if (rts_argv[arg][3] == gran_debug_opts_flags[i])
- break;
-
- if (i==MAX_GRAN_DEBUG_OPTION+1) {
- debugBelch("Valid GranSim debug options are:\n");
- help_GranSim_debug_options(MAX_GRAN_DEBUG_MASK);
- bad_option( rts_argv[arg] );
- } else { // flag found; now set it
- set_GranSim_debug_options(GRAN_DEBUG_MASK(i)); // 2^i
- }
- }
- break;
-
-#if 0
- case 'e': /* event trace; also -bD1 */
- debugBelch("DEBUG: event_trace; printing event trace.\n");
- RtsFlags.GranFlags.Debug.event_trace = rtsTrue;
- /* RtsFlags.GranFlags.event_trace=rtsTrue; */
- break;
-
- case 'E': /* event statistics; also -bD2 */
- debugBelch("DEBUG: event_stats; printing event statistics.\n");
- RtsFlags.GranFlags.Debug.event_stats = rtsTrue;
- /* RtsFlags.GranFlags.Debug |= 0x20; print event statistics */
- break;
-
- case 'f': /* thunkStealing; also -bD4 */
- debugBelch("DEBUG: thunkStealing; printing forwarding of FETCHNODES.\n");
- RtsFlags.GranFlags.Debug.thunkStealing = rtsTrue;
- /* RtsFlags.GranFlags.Debug |= 0x2; print fwd messages */
- break;
-
- case 'z': /* blockOnFetch; also -bD8 */
- debugBelch("DEBUG: blockOnFetch; check for blocked on fetch.\n");
- RtsFlags.GranFlags.Debug.blockOnFetch = rtsTrue;
- /* RtsFlags.GranFlags.Debug |= 0x4; debug non-reschedule-on-fetch */
- break;
-
- case 't': /* blockOnFetch_sanity; also -bD16 */
- debugBelch("DEBUG: blockOnFetch_sanity; check for TSO asleep on fetch.\n");
- RtsFlags.GranFlags.Debug.blockOnFetch_sanity = rtsTrue;
- /* RtsFlags.GranFlags.Debug |= 0x10; debug TSO asleep for fetch */
- break;
-
- case 'S': /* priSpark; also -bD32 */
- debugBelch("DEBUG: priSpark; priority sparking.\n");
- RtsFlags.GranFlags.Debug.priSpark = rtsTrue;
- break;
-
- case 's': /* priSched; also -bD64 */
- debugBelch("DEBUG: priSched; priority scheduling.\n");
- RtsFlags.GranFlags.Debug.priSched = rtsTrue;
- break;
-
- case 'F': /* findWork; also -bD128 */
- debugBelch("DEBUG: findWork; searching spark-pools (local & remote), thread queues for work.\n");
- RtsFlags.GranFlags.Debug.findWork = rtsTrue;
- break;
-
- case 'g': /* globalBlock; also -bD256 */
- debugBelch("DEBUG: globalBlock; blocking on remote closures (FETCHMEs etc in GUM).\n");
- RtsFlags.GranFlags.Debug.globalBlock = rtsTrue;
- break;
-
- case 'G': /* pack; also -bD512 */
- debugBelch("DEBUG: pack; routines for (un-)packing graph structures.\n");
- RtsFlags.GranFlags.Debug.pack = rtsTrue;
- break;
-
- case 'P': /* packBuffer; also -bD1024 */
- debugBelch("DEBUG: packBuffer; routines handling pack buffer (GranSim internal!).\n");
- RtsFlags.GranFlags.Debug.packBuffer = rtsTrue;
- break;
-
- case 'o': /* sortedQ; also -bD2048 */
- debugBelch("DEBUG: sortedQ; check whether spark/thread queues are sorted.\n");
- RtsFlags.GranFlags.Debug.sortedQ = rtsTrue;
- break;
-
- case 'r': /* randomSteal; also -bD4096 */
- debugBelch("DEBUG: randomSteal; stealing sparks/threads from random PEs.\n");
- RtsFlags.GranFlags.Debug.randomSteal = rtsTrue;
- break;
-
- case 'q': /* checkSparkQ; also -bD8192 */
- debugBelch("DEBUG: checkSparkQ; check consistency of the spark queues.\n");
- RtsFlags.GranFlags.Debug.checkSparkQ = rtsTrue;
- break;
-
- case ':': /* checkLight; also -bD16384 */
- debugBelch("DEBUG: checkLight; check GranSim-Light setup.\n");
- RtsFlags.GranFlags.Debug.checkLight = rtsTrue;
- break;
-
- case 'b': /* bq; also -bD32768 */
- debugBelch("DEBUG: bq; check blocking queues\n");
- RtsFlags.GranFlags.Debug.bq = rtsTrue;
- break;
-
- case 'd': /* all options turned on */
- debugBelch("DEBUG: all options turned on.\n");
- set_GranSim_debug_options(MAX_GRAN_DEBUG_MASK);
- /* RtsFlags.GranFlags.Debug |= 0x40; */
- break;
-
-/* case '\0': */
-/* RtsFlags.GranFlags.Debug = 1; */
-/* break; */
-#endif
-
- }
- break;
-# endif /* GRAN_CHECK */
- default:
- bad_option( rts_argv[arg] );
- break;
- }
-}
-
-/*
- Interpret n as a binary number masking GranSim debug options and set the
- correxponding option. See gran_debug_opts_strs for explanations of the flags.
-*/
-static void
-set_GranSim_debug_options(nat n) {
- nat i;
-
- for (i=0; i<=MAX_GRAN_DEBUG_OPTION; i++)
- if ((n>>i)&1) {
- errorBelch(gran_debug_opts_strs[i]);
- switch (i) {
- case 0: RtsFlags.GranFlags.Debug.event_trace = rtsTrue; break;
- case 1: RtsFlags.GranFlags.Debug.event_stats = rtsTrue; break;
- case 2: RtsFlags.GranFlags.Debug.bq = rtsTrue; break;
- case 3: RtsFlags.GranFlags.Debug.pack = rtsTrue; break;
- case 4: RtsFlags.GranFlags.Debug.checkSparkQ = rtsTrue; break;
- case 5: RtsFlags.GranFlags.Debug.thunkStealing = rtsTrue; break;
- case 6: RtsFlags.GranFlags.Debug.randomSteal = rtsTrue; break;
- case 7: RtsFlags.GranFlags.Debug.findWork = rtsTrue; break;
- case 8: RtsFlags.GranFlags.Debug.unused = rtsTrue; break;
- case 9: RtsFlags.GranFlags.Debug.pri = rtsTrue; break;
- case 10: RtsFlags.GranFlags.Debug.checkLight = rtsTrue; break;
- case 11: RtsFlags.GranFlags.Debug.sortedQ = rtsTrue; break;
- case 12: RtsFlags.GranFlags.Debug.blockOnFetch = rtsTrue; break;
- case 13: RtsFlags.GranFlags.Debug.packBuffer = rtsTrue; break;
- case 14: RtsFlags.GranFlags.Debug.blockOnFetch_sanity = rtsTrue; break;
- default: barf("set_GranSim_debug_options: only %d debug options expected");
- } /* switch */
- } /* if */
-}
-
-/*
- Print one line explanation for each of the GranSim debug options specified
- in the bitmask n.
-*/
-static void
-help_GranSim_debug_options(nat n) {
- nat i;
-
- for (i=0; i<=MAX_GRAN_DEBUG_OPTION; i++)
- if ((n>>i)&1)
- debugBelch(gran_debug_opts_strs[i]);