private GoRegisterInfo readRegInfoElement(Element regInfoElem, Language lang)
			throws IOException {
		GoVerSet validGoVersions =
			GoVerSet.parse(XmlUtilities.requireStringAttr(regInfoElem, "versions"));

		Element intRegsElem = regInfoElem.getChild("int_registers");
		Element floatRegsElem = regInfoElem.getChild("float_registers");
		Element stackElem = regInfoElem.getChild("stack");
		Element goRoutineElem = regInfoElem.getChild("current_goroutine");
		Element zeroRegElem = regInfoElem.getChild("zero_register");
		Element duffZeroElem = regInfoElem.getChild("duffzero");
		Element closureContextElem = regInfoElem.getChild("closurecontext");
		if (intRegsElem == null || floatRegsElem == null || stackElem == null ||
			goRoutineElem == null || zeroRegElem == null || duffZeroElem == null ||
			closureContextElem == null) {
			throw new IOException("Bad format");
		}

		List<Register> intRegs = parseRegListStr(intRegsElem.getAttributeValue("list"), lang);
		List<Register> floatRegs = parseRegListStr(floatRegsElem.getAttributeValue("list"), lang);

		int stackInitialOffset =
			XmlUtilities.parseBoundedIntAttr(stackElem, "initialoffset", 0, Integer.MAX_VALUE);
		int maxAlign =
			XmlUtilities.parseBoundedIntAttr(stackElem, "maxalign", 1, Integer.MAX_VALUE);

		Register currentGoRoutineReg =
			parseRegStr(goRoutineElem.getAttributeValue("register"), lang);
		Register zeroReg = parseRegStr(zeroRegElem.getAttributeValue("register"), lang);
		boolean zeroRegIsBuiltin =
			XmlUtilities.parseOptionalBooleanAttr(zeroRegElem, "builtin", false);
		
		Register duffzeroDest = parseRegStr(duffZeroElem.getAttributeValue("dest"), lang);
		Register duffzeroZero = parseRegStr(duffZeroElem.getAttributeValue("zero_arg"), lang);
		RegType duffzeroZeroType = parseRegTypeStr(duffZeroElem.getAttributeValue("zero_type"));

		Register closureContextReg =
			parseRegStr(closureContextElem.getAttributeValue("register"), lang);

		GoRegisterInfo registerInfo = new GoRegisterInfo(intRegs, floatRegs, stackInitialOffset,
			maxAlign, currentGoRoutineReg, zeroReg, zeroRegIsBuiltin, duffzeroDest, duffzeroZero,
			duffzeroZeroType, closureContextReg, validGoVersions);
		return registerInfo;
	}
Returns a {@link GoRegisterInfo} instance for the specified {@link Language}.
<p>
If the language didn't define golang register info, a generic/empty instance will be
returned that forces all parameters to be stack allocated.

@param lang {@link Language}
@param goVer {@link GoVer}
@return {@link GoRegisterInfo}, never null
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/GoRegisterInfoManager.java