Esempio n. 1
0
/**
 * Finds a variable in a specific variable list or returns -1 for no variable found
 */
static unsigned short findVariable(struct variable_node * root,  char * name) {
	while (root != NULL) {
		if (areStringsEqualIgnoreCase(root->name, name)) return root->id;
		root=root->next;
	}
	return 0;
}
Esempio n. 2
0
/**
 * Determines the active cores if the user supplied -c n, can be a single integer, a list, a range or
 * all to select all cores
 */
static void parseCoreActiveInfo(struct interpreterconfiguration* configuration, char * info) {
	int i;
	if (areStringsEqualIgnoreCase(info, "all")) {
		for (i=0;i<16;i++) configuration->intentActive[i]=1;
	} else {
		if (strchr(info, ',') != NULL) {
			char vn[5];
			int s;
			for (i=0;i<16;i++) configuration->intentActive[i]=0;
			while (strchr(info, ',') != NULL) {
				s=strchr(info, ',')-info;
				memcpy(vn, info, s);
				vn[s]='\0';
				configuration->intentActive[atoi(vn)]=1;
				info=strchr(info, ',')+1;
			}
			configuration->intentActive[atoi(info)]=1;
		} else if (strchr(info, ':') != NULL) {
			char vn[5];
			int s;
			s=strchr(info, ':')-info;
			memcpy(vn, info, s);
			vn[s]='\0';
			int from=atoi(vn);
			int to=atoi(strchr(info, ':')+1);
			for (i=0;i<16;i++) {
				if (i >= from && i<= to) {
					configuration->intentActive[i]=1;
				} else {
					configuration->intentActive[i]=0;
				}
			}
		} else {
			for (i=0;i<16;i++) configuration->intentActive[i]=0;
			configuration->intentActive[atoi(info)]=1;
		}
	}
}
Esempio n. 3
0
/**
 * Parses command line arguments
 */
static void parseCommandLineArguments(struct interpreterconfiguration* configuration, int argc, char *argv[]) {
	if (argc == 1) {
		displayHelp();
		exit(0);
	} else {
#ifdef HOST_STANDALONE
		configuration->hostProcs=1;
#else
		configuration->hostProcs=0;
#endif
		configuration->coreProcs=0;
		configuration->loadElf=1;
		configuration->loadSrec=0;
		int i, coreplacement=0;
		for (i=1;i<argc;i++) {
			if (areStringsEqualIgnoreCase(argv[i], "-s")) {
				configuration->displayStats=1;
			} else if (areStringsEqualIgnoreCase(argv[i], "-pp")) {
				configuration->displayPPCode=1;
                        } else if (areStringsEqualIgnoreCase(argv[i], "-srec")) {
				configuration->loadElf=0;
		                configuration->loadSrec=1;
			} else if (areStringsEqualIgnoreCase(argv[i], "-elf")) {
				configuration->loadElf=1;
		                configuration->loadSrec=0;
			} else if (areStringsEqualIgnoreCase(argv[i], "-t")) {
				configuration->displayTiming=1;
			} else if (areStringsEqualIgnoreCase(argv[i], "-datashared")) {
				configuration->forceDataOnShared=1;
			} else if (areStringsEqualIgnoreCase(argv[i], "-codecore")) {
				configuration->forceCodeOnCore=1;
			} else if (areStringsEqualIgnoreCase(argv[i], "-codeshared")) {
				configuration->forceCodeOnShared=1;
			} else if (areStringsEqualIgnoreCase(argv[i], "-o")) {
				if (i+1 ==argc) {
					fprintf(stderr, "When specifying to output compiled bytes then you must provide a filename for this\n");
					exit(0);
				} else {
					configuration->compiledByteFilename=argv[++i];
				}
			} else if (areStringsEqualIgnoreCase(argv[i], "-l")) {
				if (i+1 ==argc) {
					fprintf(stderr, "When specifying to load from a byte file then you must provide a filename for this\n");
					exit(0);
				} else {
					configuration->loadByteFilename=argv[++i];
				}
			} else if (areStringsEqualIgnoreCase(argv[i], "-help")) {
				displayHelp();
				exit(0);
			} else if (areStringsEqualIgnoreCase(argv[i], "-h")) {
				if (i+1 ==argc) {
					fprintf(stderr, "You must provide a number of host processes to use\n");
					exit(0);
				} else {
					if (coreplacement) {
						fprintf(stderr, "Can not specify explicit core placement and have host virtual processes\n");
						exit(0);
					}
					configuration->hostProcs=atoi(argv[++i]);
				}
			} else if (areStringsEqualIgnoreCase(argv[i], "-d")) {
				if (i+1 ==argc) {
					fprintf(stderr, "You must provide a number of device processes to use\n");
					exit(0);
				} else {
					int j, device_procs=atoi(argv[++i]);
					for (j=0;j<16;j++) {
						configuration->intentActive[j]=j<device_procs ? 1 : 0;
					}
				}
			} else if (areStringsEqualIgnoreCase(argv[i], "-c")) {
				if (i+1 ==argc) {
					fprintf(stderr, "When specifying core placement you must provide arguments\n");
					exit(0);
				} else {
					if (configuration->hostProcs > 0) {
						fprintf(stderr, "Can only specify explicit core placement with no host virtual processes\n");
						exit(0);
					}
					coreplacement=1;
					parseCoreActiveInfo(configuration, argv[++i]);
				}
			} else {
				if (configuration->filename != NULL) {
					fprintf(stderr, "Only one filename can be provided, you have suppled '%s' and '%s'\n", configuration->filename, argv[i]);
					exit(0);
				} else {
					configuration->filename=argv[i];
				}
			}
		}
		if (configuration->loadByteFilename == NULL && configuration->filename == NULL) {
			fprintf(stderr, "You must supply a file to run as an argument, see -h for details\n");
			exit(0);
		}
#ifndef HOST_STANDALONE
		for (i=0;i<16;i++) if (configuration->intentActive[i]) configuration->coreProcs++;
#endif
	}
}