protected Instruction doCreateInstruction(Address address, Instruction protoInstr) {
			try {
				if (overwrite) {
					Instruction exists = doAdjustExisting(address, protoInstr);
					if (exists != null) {
						return exists;
					}
				}

				Instruction prec = doExtendPreceding(address, protoInstr);
				if (prec != null) {
					return prec;
				}

				Instruction created = doCreate(lifespan, address, platform,
					protoInstr.getPrototype(), protoInstr, protoInstr.getLength());
				// copy override settings to replacement instruction
				if (protoInstr.isFallThroughOverridden()) {
					created.setFallThrough(protoInstr.getFallThrough());
				}
				FlowOverride flowOverride = protoInstr.getFlowOverride();
				if (flowOverride != FlowOverride.NONE) {
					created.setFlowOverride(flowOverride);
				}
				return created;
			}
			catch (AddressOverflowException | // End address already checked via protoInstr
					CodeUnitInsertionException | // We've already checked for conflicts
					CancelledException e) { // There's no monitor to cancel
				throw new AssertionError(e);
			}
		}
Store the given instruction in the database

@param address the address of the instruction
@param protoInstr the parsed (usually pseudo) instruction
@return the created instruction
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java