@Override
	default int setValue(TracePlatform platform, long snap, RegisterValue value) {
		if (!value.hasAnyValue()) {
			return 0;
		}
		try (LockHold hold = LockHold.lock(getLock().writeLock())) {
			Register register = value.getRegister();
			AddressRange range = platform.getConventionalRegisterRange(getSpace(), register);
			if (!value.hasValue() || !TraceRegisterUtils.isByteBound(register)) {
				// Don't try to inline to keep range. Base register may have different range
				RegisterValue old = getValue(platform, snap, register.getBaseRegister());
				// Do not use .getRegisterValue, as that will zero unmasked bits
				// Instead, we'll pass the original register to bufferForValue
				value = old.combineValues(value);
			}
			ByteBuffer buf = TraceRegisterUtils.bufferForValue(register, value);
			return putBytes(snap, range.getMinAddress(), buf);
		}
	}
For register mapping conventions

@return the address space
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/InternalTraceMemoryOperations.java