block
of
x86
code
je L43
more
x86
code
jmp L57
L33:
sparc
code
never
mind
L43:
x86
code
L37:
sparc
never
mind
L57:
x86
code
again
That kind of thing: blocks of code mashed together, but everything is correctly generated to jumps to its own kind.
In regular compiler-generated machine code, we already have "foreign" blocks of stuff in the middle of the instructions, such as string (and other) literals, and computed branch tables. The generated code doesn't accidentally jump into these things. This is kind of the same: all the other architecture stuff is just a literal (that is not referenced). From the x86 POV, the stuff at L33 and L37 above is just data.
In regular compiler-generated machine code, we already have "foreign" blocks of stuff in the middle of the instructions, such as string (and other) literals, and computed branch tables. The generated code doesn't accidentally jump into these things. This is kind of the same: all the other architecture stuff is just a literal (that is not referenced). From the x86 POV, the stuff at L33 and L37 above is just data.