Created
December 22, 2013 07:16
-
-
Save jboone/8079391 to your computer and use it in GitHub Desktop.
Fast third-order CIC for s8:s8 (complex) data.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ldrd t1, t2, [buf], #8 /* 3: t1 = Q3:I3:Q2:I2 */ | |
/* t2 = Q5:I5:Q4:I4 */ | |
/* What if I did this using ROL/ROR and SEL? */ | |
/* Q3:I3:Q2:I2,Q5:I5:Q4:I4 -> */ | |
smuad t3, i, taps /* 1: t3 = I1 * 3 + I0 * 1 */ | |
smuad t4, q, taps /* 1: t4 = Q1 * 3 + Q0 * 1 */ | |
sxtb16 i, t1, ror #0 /* 1: i = I3:I2 */ | |
sxtb16 q, t1, ror #8 /* 1: q = Q3:Q2 */ | |
smladx t1, i, taps, t3 /* 1: t1 += I3 * 1 + I2 * 3 */ | |
smladx t4, q, taps, t4 /* 1: t4 += Q3 * 1 + Q2 * 3 */ | |
bfi t1, t4, #16, #16 /* 1: t1 = D2_Q0:D2_I0 */ | |
smuad t3, i, taps /* 1: t3 = I3 * 3 + I2 * 1 */ | |
smuad t4, q, taps /* 1: t4 = Q3 * 3 + Q2 * 1 */ | |
sxtb16 i, t2, ror #0 /* 1: i = I5:I4 */ | |
sxtb16 q, t2, ror #8 /* 1: q = Q5:Q4 */ | |
smladx t3, i, taps, t3 /* 1: t3 += I5 * 1 + I4 * 3 */ | |
smladx t4, q, taps, t4 /* 1: t4 += Q5 * 1 + Q4 * 3 */ | |
bfi t3, t4, #16, #16 /* 1: t3 = D2_Q1:D2_I1 */ | |
strd t1, t3, [buf, #-8] /* 3: D2_Q0:D2_I0, D2_Q1:D2_I1 */ | |
ldrd t1, t2, [buf], #8 /* 3: t1 = Q3:I3:Q2:I2 */ | |
/* t2 = Q5:I5:Q4:I4 */ | |
smuad t3, i, taps /* 1: t3 = I1 * 3 + I0 * 1 */ | |
smuad t4, q, taps /* 1: t4 = Q1 * 3 + Q0 * 1 */ | |
sxtb16 i, t1, ror #0 /* 1: i = I3:I2 */ | |
sxtb16 q, t1, ror #8 /* 1: q = Q3:Q2 */ | |
smladx t1, i, taps, t3 /* 1: t1 += I3 * 1 + I2 * 3 */ | |
smladx t4, q, taps, t4 /* 1: t4 += Q3 * 1 + Q2 * 3 */ | |
bfi t1, t4, #16, #16 /* 1: t1 = D2_Q0:D2_I0 */ | |
smuad t3, i, taps /* 1: t3 = I3 * 3 + I2 * 1 */ | |
smuad t4, q, taps /* 1: t4 = Q3 * 3 + Q2 * 1 */ | |
sxtb16 i, t2, ror #0 /* 1: i = I5:I4 */ | |
sxtb16 q, t2, ror #8 /* 1: q = Q5:Q4 */ | |
smladx t3, i, taps, t3 /* 1: t3 += I5 * 1 + I4 * 3 */ | |
smladx t4, q, taps, t4 /* 1: t4 += Q5 * 1 + Q4 * 3 */ | |
bfi t3, t4, #16, #16 /* 1: t3 = D2_Q1:D2_I1 */ | |
strd t1, t3, [buf, #-8] /* 3: D2_Q0:D2_I0, D2_Q1:D2_I1 */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment