public void getPcode(Address addr, PatchEncoder resultEncoder) {
		try {
			Instruction instr = getInstruction(addr);
			if (instr == null) {
				return;
			}
			if (undefinedBody != null) {
				undefinedBody.addRange(instr.getMinAddress(), instr.getMaxAddress());
				cachedFunction.setBody(undefinedBody);
			}
			if (debug != null) {
				debug.getPcode(addr, instr);
				FlowOverride fo = instr.getFlowOverride();
				if (fo != FlowOverride.NONE) {
					debug.addFlowOverride(addr, fo);
				}
			}

			instr.getPrototype()
					.getPcodePacked(resultEncoder, instr.getInstructionContext(),
						new InstructionPcodeOverride(instr));
			return;
		}
		catch (UsrException e) {
			Msg.warn(this,
				"Decompiling " + funcEntry + ", pcode error at " + addr + ": " + e.getMessage());
		}
		catch (Exception e) {
			Msg.error(this,
				"Decompiling " + funcEntry + ", pcode error at " + addr + ": " + e.getMessage(), e);
		}
		// If we reach here, an exception was thrown
		resultEncoder.clear();	// Make sure the result is empty
	}
Generate p-code ops for the instruction at the given address.
Any exceptions are caught, resulting in an empty result. The decompiler interprets these
as a BadDataError, but will continue to process the function.
@param addr is the given address
@param resultEncoder will contain the generated p-code ops
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java