Not at all. Did you try to create new multicore, processor expert -less project? Project wizard creates working code. There are some differences between it and yours. First diff is that demo project converts pointer first to far (global) pointer, before assigning it to XGISPxx:
XGISP31= (unsigned int)(void*__far)(XGATE_STACK_L + 1);
This is important step, because XGATE addresses are similar to global memory addresses, except that GPAGE part of address is ignored. Without conversion CPU12X friendly pointer will be not understood by XGATE.
Another problem is that you are taking least address of stack memory. You should take address, which is above your stack space. So you should change it to
XGISP31=(word)((void * __far)&stackPoint31) +sizeof(stackPoint31);
There is no need to have two separate segment records for different stacks, the only requirements are that segment should be XGATE - accessible, and that word alignment is applied to all objects allocated there.
If you restrict your XGATE threads priorities either to 1-3 or to 4-7, you may allocate and initialize only one XGATE stack. Other stack won't be used.
Another option, which is compatible with older S12XD, which didn't have XGISPxx registers, is to make compiler initializing XGATE SP. XGATE compiler has option for this in Code Generation tab. You may set Initialize Stack option to XGATE address of top of stack.