Part Number: MSP430FR5969
Tool/software:
I was trying something out when I noticed something odd. First, the GCC utility msp430-elf-objdump showed a 20 bit immediate value as 16 bits.
441c: 80 18 70 12 pushx.a #-21846 ;#0xaaaa
4420: aa aa
The extension word (0x1880) clearly has bit 7 set so the value should be 0x1aaaa.
Worse, when I execute this instruction on a FR5969, the upper word on the stack is zero instead of one. If I load the immediate value into a register before pushing the register I get the expected 20 bit value.
I double checked the documentation and it does say you can use a 20 bit immediate value with pushx. The assembler accepts it without so much as a warning. But the disassembler and CPU ignore the bits in the extension word.

