public int compareMetadata(ExecutableRecord o) {
		int res = 0;
		if (!executableName.equals(o.executableName)) {
			res |= METADATA_NAME;
		}
		if (!architecture.equals(o.architecture)) {
			res |= METADATA_ARCH;
		}
		if ((flags & LIBRARY) != (o.flags & LIBRARY)) {
			res |= METADATA_LIBR;
		}
		if ((flags & LIBRARY)!=0)
		{
			return res;		// If we are comparing libraries, remaining fields aren't compared
		}
		if (!compilerName.equals(o.compilerName)) {
			res |= METADATA_COMP;
		}
		if (!date.equals(o.date)) {
			res |= METADATA_DATE;
		}
		if (repository == null) {
			if (o.repository != null) {
				res |= METADATA_REPO;
			}
		}
		else {
			if (o.repository == null) {
				res |= METADATA_REPO;
			}
			else if (!repository.equals(o.repository)) {
				res |= METADATA_REPO;
			}
		}
		if (path == null) {
			if (o.path != null) {
				res |= METADATA_PATH;
			}
		}
		else {
			if (o.path == null) {
				res |= METADATA_PATH;
			}
			else if (!path.equals(o.path)) {
				res |= METADATA_PATH;
			}
		}
		return res;
	}
Compare just the metadata portion (names and versions) of two ExecutableRecords
We do NOT compare categories as these may not have been read into the object yet
@param o is ExecutableRecord to compare with this
@return bit vector with a 1 bit for every field that differs
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java