diff --git a/src/libFLAC/bitreader.c b/src/libFLAC/bitreader.c
index 813c063..c94c596 100644
--- a/src/libFLAC/bitreader.c
+++ b/src/libFLAC/bitreader.c
@@ -125,6 +125,20 @@ static inline void crc16_update_word_(FLAC__BitReader *br, brword word)
 		case 24: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
 	}
 #elif FLAC__BYTES_PER_WORD == 8
+#if 0 /* OPT: test what's faster */
+	word = SWAP_BE_WORD_TO_HOST(word);
+	word >>= br->crc16_align;
+	switch(br->crc16_align) {
+	case  0: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case  8: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case 16: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case 24: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case 32: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case 40: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case 48: crc = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); word >>= 8;
+	case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)word, crc);
+}
+#else
 	switch(br->crc16_align) {
 		case  0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 56), crc);
 		case  8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 48) & 0xff), crc);
@@ -135,6 +149,7 @@ static inline void crc16_update_word_(FLAC__BitReader *br, brword word)
 		case 48: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
 		case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
 	}
+#endif
 #else
 	for( ; br->crc16_align < FLAC__BITS_PER_WORD; br->crc16_align += 8)
 		crc = FLAC__CRC16_UPDATE((unsigned)((word >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), crc);
