The RXFIFO, TXFIFO, and generic command FIFO are 32-bit wide FIFOs, and all transfers must be a multiple of 4-bytes (i.e., 4, 8, 12, 16, etc.).
For the TXFIFO, a transfer of a non-multiple of 4 bytes results in the subsequent transfer to pop out from the start of the next word, and not from the next byte. This means that trying to transmit any number of bytes in a word drains the entire 4 bytes of that word completely, but the data transfer will only be the bytes requested. For example, when 5 words (20 bytes) are loaded into the TXFIFO and a request is made to transmit 10 bytes, this results in a 10 byte transmission. However, as the number of bytes requested is not word aligned, the TXFIFO pops out the entire 4 bytes of the last word, which drains off 12 bytes instead of 10 bytes. As a result, the remaining number of bytes in the FIFO is 8 bytes (2 words).