Dear @xiangjun_rong ,
Thank you for your response.
Regarding the disputed use of the '|=' operator, I understand that you claim that the
base->FIFOINTENSET
register also allows to clear bits and thus disable interrupt sources.
The reference manual's description of FIFOINTENSET reads:

It does not explicitly state how the CPU handles writing '0' bits to FIFOINTENSET. It does insinuate that to clear bits the user should use FIFOINTENCLR, though.
Then there's the explanation of each bit in the register, e.g., RXLVL and TXLVL:

The reference manual does not distinguish between reading and writing to this register. The explanation for a "0" bit could apply to reading from the register, only. This is ambiguous.
Thus I tried it by example: I set some bits and then cleared all bits with setting FIFOINTENSET to 0 as follows
base->FIFOINTENSET |= SPI_FIFOINTENSET_TXLVL_MASK | SPI_FIFOINTENSET_RXLVL_MASK;
base->FIFOINTENSET = 0;
RTT_WriteStringf("03 clear %08x\n", base->FIFOINTENSET );
The output is "03 clear 0000000c". Also "peripherals+" view in MCUXpresso IDE shows the value 0x0000000c (when stepping through these instructions using the debugger).
From this observation I conclude that writing 0 bits to FIFOINTENSET does NOT clear bits.
Please comment.
Thanks
Daniel
PS: Regarding "FIFOINTENSET slow?", I now know why writing to FIFOINTENSET is supposedly slow. The transfer is started by the empty TXFIFO interrupt and this interrupt is fired as soon as the FIFOINTENSET is written to.