private int depthZeroHash() {
		int encoding = 0;										// Initialize
		if (op != null) {
			if (op.getOpcode() == PcodeOp.PTRSUB) {				// Replace PTRSUBs with INT_ADDs
				encoding = PcodeOp.INT_ADD;
			}
			else {
				encoding = op.getOpcode();
			}
			encoding |= 0xc0000000;								// Bits indicating a PcodeOp specifically
		}
		else {
			VarnodeAST node = vn;
			//For Varnodes, the encoding needs to know whether the node is global or local and what
			// size is allocated to it.
			int ramCode = (graph.ramCaring ? 1 : 0) * (node.isPersistent() ? 1 : 0);
			int constCode = (node.isConstant() ? 1 : 0);
			int size = node.getSize();
			if (graph.sizeCollapse && size > 4) {		// If sizeCollapse is on, treat sizes larger then 4 bytes
				size = 4;						// the same as a size of 4
			}
			int sizeCode = ((size << 4) >> 4);	// Make top 4 bits are clear

			encoding |= (ramCode << 29);
			encoding |= (constCode << 28);
			encoding |= sizeCode;
			encoding |= (1 << 31);
			if (graph.constCaring && graph.isConstantNonPointer(node)) {
				// Only hash an exact constant value if it doesn't look like a pointer
				return Pinning.hashTwo(encoding, (int) node.getOffset());
			}
		}
		return Pinning.hashTwo(encoding, 0);	// Hash the collected info
	}
Compute a hash of the meta-data associated with the node, not including edges.
This is effectively a 0-gram of the node, collecting data about the node itself but
nothing about its neighbors.  The hash for PcodeOp nodes, is just the opcode.  For
Varnodes, the hash collects info about the size and the type of Varnode (local, global, constant).
@return the hash
Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataVertex.java