Eins vorweg: von m68 hab ich keinen Plan :-)
Das inline asm muss in einem Stück sein, ansonsten kann gcc was
wegoptimieren oder dem tmp1 im ersten asm ein anderes Register zuordnen
als dem tmp1 im 5ten asm (Falls "p" eine Registerklasse ist).
Wenn das irgendeine Wirkung hat, die über das Setzten von tmp1
hinausgeht, genügt "asm" nicht. Es muss dann "asm volatile" sein.
Dann: Wenn das in blankem C/C++ geht, texte es einfach mal aus und
schau, was gcc draus macht. Vielleicht ist es je schon das, was du
willst.
Für weitere Anmerkungen wär hilfreich zu wissen, welche Klasse von
Operanden zB ldy/sty braucht und was für Dinger tmp1 und tmp2 sind.
Momentan ist das nicht ersichtlich, weil "p" keine Standard-Constraint
ist, sondern maschinenspezifisch.
Johann