Function of rxAlign parameter in the PCD_ReadRegister function in MFRC522 Librar

Hi every body,
I’m trying to port MFRC522 arduino libary(from github) to the ARM MCU’s.
my problem is in PCD_ReadRegister function:

 * Reads a number of bytes from the specified register in the MFRC522 chip.
 * The interface is described in the datasheet section 8.1.2.
 */
void MFRC522::PCD_ReadRegister( byte reg, ///< The register to read from. One of the PCD_Register enums.
 byte count, ///< The number of bytes to read
 byte *values, ///< Byte array to store the values in.
 byte rxAlign ///< Only bit positions rxAlign..7 in values[0] are updated.
 )

I can’t undrestand what’s function of rxAlign ?

/**
 * Reads a number of bytes from the specified register in the MFRC522 chip.
 * The interface is described in the datasheet section 8.1.2.
 */
void MFRC522::PCD_ReadRegister( byte reg, ///< The register to read from. One of the PCD_Register enums.
 byte count, ///< The number of bytes to read
 byte *values, ///< Byte array to store the values in.
 byte rxAlign ///< Only bit positions rxAlign..7 in values[0] are updated.
 ) {
 
 if (count == 0) {
 return;
 }
 //Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register."));
 byte address = 0x80 | (reg & 0x7E); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3.
 byte index = 0; // Index in values array.
 SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
 digitalWrite(_chipSelectPin, LOW); // Select slave
 count--; // One read is performed outside of the loop
 SPI.transfer(address); // Tell MFRC522 which address we want to read
 while (index < count) {
 if (index == 0 && rxAlign) { // Only update bit positions rxAlign..7 in values[0]
 // Create bit mask for bit positions rxAlign..7
 byte mask = 0;
 for (byte i = rxAlign; i <= 7; i++) {
 mask |= (1 << i);
 }
 // Read value and tell that we want to read the same address again.
 byte value = SPI.transfer(address);
 // Apply mask to both current value of values[0] and the new data in value.
 values[0] = (values[index] & ~mask) | (value & mask);
 }
 else { // Normal case
 values[index] = SPI.transfer(address); // Read value and tell that we want to read the same address again.
 }
 index++;
 }
 values[index] = SPI.transfer(0); // Read the final byte. Send 0 to stop reading.
 digitalWrite(_chipSelectPin, HIGH); // Release slave again
 SPI.endTransaction(); // Stop using the SPI bus
 
} // End PCD_ReadRegister()

Is this something you have solved and if so do you have solution you can share?