From ac0fa94bc7aeefc9b98ced1ebe9b0e78534fb1f0 Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Mon, 5 Mar 2012 14:10:49 +0000 Subject: [PATCH] Added adat --- module_usb_audio_adat/README | 2 + module_usb_audio_adat/module_description | 0 module_usb_audio_adat/src/adatreceiver.h | 27 + module_usb_audio_adat/src/adatreceiver.xc | 947 ++++++++++++++++++++++ 4 files changed, 976 insertions(+) create mode 100644 module_usb_audio_adat/README create mode 100644 module_usb_audio_adat/module_description create mode 100644 module_usb_audio_adat/src/adatreceiver.h create mode 100644 module_usb_audio_adat/src/adatreceiver.xc diff --git a/module_usb_audio_adat/README b/module_usb_audio_adat/README new file mode 100644 index 00000000..0035e6b2 --- /dev/null +++ b/module_usb_audio_adat/README @@ -0,0 +1,2 @@ +MODULE_ADAT_RX_V3 + diff --git a/module_usb_audio_adat/module_description b/module_usb_audio_adat/module_description new file mode 100644 index 00000000..e69de29b diff --git a/module_usb_audio_adat/src/adatreceiver.h b/module_usb_audio_adat/src/adatreceiver.h new file mode 100644 index 00000000..55936aae --- /dev/null +++ b/module_usb_audio_adat/src/adatreceiver.h @@ -0,0 +1,27 @@ + +/** ADAT Receive Thread (48kHz sample rate). + * + * \param p ADAT port - should be 1-bit and clocked at 100MHz + * \param oChan channel on which decoded samples are output + * + * The function will return if it cannot lock onto a 44,100/48,000 Hz + * signal. Normally the 48000 function is called in a while(1) loop. If + * both 44,100 and 48,000 need to be supported, they should be called in + * sequence in a while(1) loop. Note that the functions are large, and + * that 44,100 should not be called if it does not need to be supported. + **/ +void adatReceiver48000(buffered in port:32 p, chanend oChan); + +/** ADAT Receive Thread (44.1kHz sample rate). + * + * \param p ADAT port - should be 1-bit and clocked at 100MHz + * \param oChan channel on which decoded samples are output + * + * The function will return if it cannot lock onto a 44,100/48,000 Hz + * signal. Normally the 48000 function is called in a while(1) loop. If + * both 44,100 and 48,000 need to be supported, they should be called in + * sequence in a while(1) loop. Note that the functions are large, and + * that 44,100 should not be called if it does not need to be supported. + **/ + +void adatReceiver44100(buffered in port:32 p, chanend oChan); diff --git a/module_usb_audio_adat/src/adatreceiver.xc b/module_usb_audio_adat/src/adatreceiver.xc new file mode 100644 index 00000000..6c372f83 --- /dev/null +++ b/module_usb_audio_adat/src/adatreceiver.xc @@ -0,0 +1,947 @@ +// GENERATED CODE - DO NOT EDIT +// Comments are in the generator +#include +#include +#pragma unsafe arrays +void adatReceiver48000(buffered in port:32 p, chanend oChan) { + const unsigned int mask = 0x80808080; + unsigned compressed; + unsigned nibble, word = 1, fourBits, data; + int old, violation; + unsigned int lookupCrcF[16] = {8, 9, 12, 13, 7, 6, 3, 2, 10, 11, 14, 15, 5, 4, 1, 0}; + unsigned int lookupNRTZ[32] = {0, 8, 12, 4, 6, 14, 10, 2, 3, 11, 15, 7, 5, 13, 9, 1, + 1, 9, 13, 5, 7, 15, 11, 3, 2, 10, 14, 6, 4, 12, 8, 0}; + for(int i = 0; i < 32; i++) { lookupNRTZ[i] <<= 4; } + do { + old = word; p :> word; + } while (word != old || (word != 0 && word+1 != 0)); + while(1) { + violation = word; + p when pinsneq(violation) :> int _; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + outuint(oChan, nibble << 4 | 1); + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = nibble << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = old | compressed << 1; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = nibble << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = nibble << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = compressed; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = nibble << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = nibble << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = nibble << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = nibble << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = nibble << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + if (word != 0 && word+1 != 0) return; + } +} + +// GENERATED CODE - DO NOT EDIT +// Comments are in the generator +#include +#include +#pragma unsafe arrays +void adatReceiver44100(buffered in port:32 p, chanend oChan) { + const unsigned int mask = 0x80402010; + unsigned compressed; + unsigned nibble, word = 1, fourBits, data; + int old, violation; + unsigned int lookupCrcF[16] = {8, 12, 10, 14, 9, 13, 11, 15, 7, 3, 5, 1, 6, 2, 4, 0}; + unsigned int lookupNRTZ[32] = {0, 8, 12, 4, 6, 14, 10, 2, 3, 11, 15, 7, 5, 13, 9, 1, + 1, 9, 13, 5, 7, 15, 11, 3, 2, 10, 14, 6, 4, 12, 8, 0}; + for(int i = 0; i < 32; i++) { lookupNRTZ[i] <<= 4; } + do { + old = word; p :> word; + } while (word != old || (word != 0 && word+1 != 0)); + while(1) { + violation = word; + p when pinsneq(violation) :> int _; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + outuint(oChan, nibble << 4 | 1); + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = nibble << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = compressed; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = nibble << 4; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = compressed; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = old | compressed << 1; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = nibble << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = compressed; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = nibble << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = old | compressed << 1; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = nibble << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = compressed; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = nibble << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = old | compressed << 1; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = nibble << 4; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 7) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 1) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = compressed; + p :> word; + fourBits = (word << 3) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = nibble << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + old = old | compressed << 1; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 6) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 3)) & 31]; + old = compressed >> 2; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 4) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 1)) & 31]; + old = compressed >> 4; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 0) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + old = compressed; + p :> word; + fourBits = (word << 5) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + compressed = compressed >> 1; + nibble = lookupNRTZ[(old | (compressed << 4)) & 31]; + old = compressed >> 1; + data = (data | nibble) << 4; + p :> word; + fourBits = (word << 2) & mask; + crc32(fourBits, 0xf, 0xf); + compressed = lookupCrcF[fourBits]; + nibble = lookupNRTZ[(old | (compressed << 2)) & 31]; + old = compressed >> 3; + data = (data | nibble) << 4; + outuint(oChan, data); + p :> word; + if (word != 0 && word+1 != 0) return; + } +} +