ARMv8-M has a set of extensions for this kind of branch. There is a set of prepare-to-branch instructions as well as counted loop instructions. In order to support a variable-length delay slot, they don't have very many options. In order to handle interrupts, you still need an ordinary branch instruction from the launch point as well. So if you take an interrupt in the middle of the sequence, the ordinary branch instruction still gets executed.
prepare-to-branch <jump-target> <launchpoint-label> ... launch-label: branch <jump-target>
The utility is pretty limited, but it can help for strictly in-order machines.