The MC6809 was the most advanced 8-bit microprocessor Motorola produced. It had a new instruction set that was similar to the 6800 but abandoned op-code compatibility for improved performance and high-level language support; the 6809 and 6800 were software compatible in that assemblers could (and generally did) generate code which was equivalent to 6800 opcodes that the 6809 did not directly emulate. In that sense, the 6809 was upward compatible with the 6800. The 6809 had two 16-bit index registers, two 16-bit stack pointers, and many instructions to perform 16-bit operations, including the first 8-bit multiply instruction (generating a 16-bit product) in a microprocessor. Other key points of the 6809 design were full support for both position independent code (object code that can run wherever it is loaded in memory) and reentrant code (object code that can be re-invoked when interrupted or by calling itself recursively), features previously seen only in much larger machines such as IBM 360 mainframes.