You said xgate not working when you write more interrupts. It sounds like you forgot to clear interrupt flag in some XGATE interrupt handler/handlers. It also could be a usage of bitfields to clear interrupt flags. It could be, like I said previously, something like
flags_register |= flag_bitmask; // wrong
or
flags_register = flags_register | flag_bitmask; // wrong
It also could be a bad interrupt routing, a bug in XGATE vector table etc etc. It would be much easier to help if you would show us your code that doesn't work.
Regarding simultaneous accesses to shared resources from CPU12X and XGATE. Shared resource could be for example PIT flags register PITTF, PIT interrupt enable register PITINTE or any other thing, both cores can access simultaneously. Read accesses to shared resources shouldn't be problematic. But write accesses can be dangerous. For example you want to clear from S12X port PTT pin 5 and at the same time XGATE is going to toggle PTT6. Will XGATE a) read PTT register before S12X will read PTT, b) after S12X read but dindn't yet write PTT back, c) maybe after S12X cleared PTT5? Cases a and c are quite safe, but b is undefined and dangerous. You should use XGATE semaphores to prevent case b.
I'm attaching my example, where S12X uses PIT3 interrupt to toggle PTT5. And XGATE uses PIT2 to toggle PTT6. Try to remove somephore locking/unlocking code and see how it affects a quality of meander on PTT5 and PTT6.
BTW i'm sort of fixing myself, you don't need semaphores to clear PIT flags from both cores. It's because when you want to clear PIT0, you don't have to preserve the state of all other flags PIT1-PIT4 by reading them and saving them back, you just have to write one to PIT0 and zeros to PIT1-PIT4.