Deleted Added
full compact
feeder_rate.c (194805) feeder_rate.c (195378)
1/*-
2 * Copyright (c) 2005-2009 Ariff Abdullah <ariff@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 45 unchanged lines hidden (view full) ---

54#endif
55#include <dev/sound/pcm/sound.h>
56#include <dev/sound/pcm/pcm.h>
57#include "feeder_if.h"
58
59#define SND_USE_FXDIV
60#include "snd_fxdiv_gen.h"
61
1/*-
2 * Copyright (c) 2005-2009 Ariff Abdullah <ariff@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 45 unchanged lines hidden (view full) ---

54#endif
55#include <dev/sound/pcm/sound.h>
56#include <dev/sound/pcm/pcm.h>
57#include "feeder_if.h"
58
59#define SND_USE_FXDIV
60#include "snd_fxdiv_gen.h"
61
62SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pcm/feeder_rate.c 194805 2009-06-24 02:01:16Z ariff $");
62SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pcm/feeder_rate.c 195378 2009-07-05 18:15:06Z ariff $");
63#endif
64
65#include "feeder_rate_gen.h"
66
67#if !defined(_KERNEL) && defined(SND_DIAGNOSTIC)
68#undef Z_DIAGNOSTIC
69#define Z_DIAGNOSTIC 1
70#elif defined(_KERNEL)

--- 451 unchanged lines hidden (view full) ---

522 * shifted to a full 32 bit, scaled and restored during write for
523 * maximum dynamic range (only for downsampling).
524 */
525#define _Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, adv) \
526 c += z >> Z_SHIFT; \
527 z &= Z_MASK; \
528 coeff = Z_COEFF_INTERPOLATE(z, z_coeff[c], z_dcoeff[c]); \
529 x = _PCM_READ_##SIGN##BIT##_##ENDIAN(p); \
63#endif
64
65#include "feeder_rate_gen.h"
66
67#if !defined(_KERNEL) && defined(SND_DIAGNOSTIC)
68#undef Z_DIAGNOSTIC
69#define Z_DIAGNOSTIC 1
70#elif defined(_KERNEL)

--- 451 unchanged lines hidden (view full) ---

522 * shifted to a full 32 bit, scaled and restored during write for
523 * maximum dynamic range (only for downsampling).
524 */
525#define _Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, adv) \
526 c += z >> Z_SHIFT; \
527 z &= Z_MASK; \
528 coeff = Z_COEFF_INTERPOLATE(z, z_coeff[c], z_dcoeff[c]); \
529 x = _PCM_READ_##SIGN##BIT##_##ENDIAN(p); \
530 v += (intpcm64_t)x * coeff; \
530 v += Z_NORM_##BIT((intpcm64_t)x * coeff); \
531 z += info->z_dy; \
532 p adv##= info->channels * PCM_##BIT##_BPS
533
534/*
535 * XXX GCC4 optimization is such a !@#$%, need manual unrolling.
536 */
537#if defined(__GNUC__) && __GNUC__ >= 4
538#define Z_SINC_ACCUMULATE(...) do { \

--- 38 unchanged lines hidden (view full) ---

577 c = 0; \
578 p = info->z_delay + (center * info->channels * \
579 PCM_##BIT##_BPS) + ch; \
580 for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
581 Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, -); \
582 if (info->z_scale != Z_ONE) \
583 v = Z_SCALE_##BIT(v, info->z_scale); \
584 else \
531 z += info->z_dy; \
532 p adv##= info->channels * PCM_##BIT##_BPS
533
534/*
535 * XXX GCC4 optimization is such a !@#$%, need manual unrolling.
536 */
537#if defined(__GNUC__) && __GNUC__ >= 4
538#define Z_SINC_ACCUMULATE(...) do { \

--- 38 unchanged lines hidden (view full) ---

577 c = 0; \
578 p = info->z_delay + (center * info->channels * \
579 PCM_##BIT##_BPS) + ch; \
580 for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
581 Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, -); \
582 if (info->z_scale != Z_ONE) \
583 v = Z_SCALE_##BIT(v, info->z_scale); \
584 else \
585 v >>= Z_COEFF_SHIFT; \
585 v >>= Z_COEFF_SHIFT - Z_GUARD_BIT_##BIT; \
586 Z_CLIP_CHECK(v, BIT); \
587 _PCM_WRITE_##SIGN##BIT##_##ENDIAN(dst, Z_CLAMP(v, BIT)); \
588 } while (ch != 0); \
589}
590
591#define Z_DECLARE_SINC_POLYPHASE(SIGN, BIT, ENDIAN) \
592static void \
593z_feed_sinc_polyphase_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \

--- 11 unchanged lines hidden (view full) ---

605 dst -= PCM_##BIT##_BPS; \
606 ch -= PCM_##BIT##_BPS; \
607 v = 0; \
608 p = info->z_delay + start + ch; \
609 z_pcoeff = info->z_pcoeff + \
610 ((info->z_alpha * info->z_size) << 1); \
611 for (i = info->z_size; i != 0; i--) { \
612 x = _PCM_READ_##SIGN##BIT##_##ENDIAN(p); \
586 Z_CLIP_CHECK(v, BIT); \
587 _PCM_WRITE_##SIGN##BIT##_##ENDIAN(dst, Z_CLAMP(v, BIT)); \
588 } while (ch != 0); \
589}
590
591#define Z_DECLARE_SINC_POLYPHASE(SIGN, BIT, ENDIAN) \
592static void \
593z_feed_sinc_polyphase_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \

--- 11 unchanged lines hidden (view full) ---

605 dst -= PCM_##BIT##_BPS; \
606 ch -= PCM_##BIT##_BPS; \
607 v = 0; \
608 p = info->z_delay + start + ch; \
609 z_pcoeff = info->z_pcoeff + \
610 ((info->z_alpha * info->z_size) << 1); \
611 for (i = info->z_size; i != 0; i--) { \
612 x = _PCM_READ_##SIGN##BIT##_##ENDIAN(p); \
613 v += (intpcm64_t)x * *z_pcoeff; \
613 v += Z_NORM_##BIT((intpcm64_t)x * *z_pcoeff); \
614 z_pcoeff++; \
615 p += info->channels * PCM_##BIT##_BPS; \
616 x = _PCM_READ_##SIGN##BIT##_##ENDIAN(p); \
614 z_pcoeff++; \
615 p += info->channels * PCM_##BIT##_BPS; \
616 x = _PCM_READ_##SIGN##BIT##_##ENDIAN(p); \
617 v += (intpcm64_t)x * *z_pcoeff; \
617 v += Z_NORM_##BIT((intpcm64_t)x * *z_pcoeff); \
618 z_pcoeff++; \
619 p += info->channels * PCM_##BIT##_BPS; \
620 } \
621 if (info->z_scale != Z_ONE) \
622 v = Z_SCALE_##BIT(v, info->z_scale); \
623 else \
618 z_pcoeff++; \
619 p += info->channels * PCM_##BIT##_BPS; \
620 } \
621 if (info->z_scale != Z_ONE) \
622 v = Z_SCALE_##BIT(v, info->z_scale); \
623 else \
624 v >>= Z_COEFF_SHIFT; \
624 v >>= Z_COEFF_SHIFT - Z_GUARD_BIT_##BIT; \
625 Z_CLIP_CHECK(v, BIT); \
626 _PCM_WRITE_##SIGN##BIT##_##ENDIAN(dst, Z_CLAMP(v, BIT)); \
627 } while (ch != 0); \
628}
629
630#define Z_DECLARE(SIGN, BIT, ENDIAN) \
631 Z_DECLARE_LINEAR(SIGN, BIT, ENDIAN) \
632 Z_DECLARE_SINC(SIGN, BIT, ENDIAN) \

--- 244 unchanged lines hidden (view full) ---

877 zoz = z - (Z_ONE >> 1);
878 zoe1 = z_coeff[1] + z_coeff[0];
879 zoe2 = z_coeff[2] + z_coeff[-1];
880 zoe3 = z_coeff[3] + z_coeff[-2];
881 zoo1 = z_coeff[1] - z_coeff[0];
882 zoo2 = z_coeff[2] - z_coeff[-1];
883 zoo3 = z_coeff[3] - z_coeff[-2];
884
625 Z_CLIP_CHECK(v, BIT); \
626 _PCM_WRITE_##SIGN##BIT##_##ENDIAN(dst, Z_CLAMP(v, BIT)); \
627 } while (ch != 0); \
628}
629
630#define Z_DECLARE(SIGN, BIT, ENDIAN) \
631 Z_DECLARE_LINEAR(SIGN, BIT, ENDIAN) \
632 Z_DECLARE_SINC(SIGN, BIT, ENDIAN) \

--- 244 unchanged lines hidden (view full) ---

877 zoz = z - (Z_ONE >> 1);
878 zoe1 = z_coeff[1] + z_coeff[0];
879 zoe2 = z_coeff[2] + z_coeff[-1];
880 zoe3 = z_coeff[3] + z_coeff[-2];
881 zoo1 = z_coeff[1] - z_coeff[0];
882 zoo2 = z_coeff[2] - z_coeff[-1];
883 zoo3 = z_coeff[3] - z_coeff[-2];
884
885 zoc0 = (((0x1ac2260dLL * zoe1)) >> 30) +
885 zoc0 = ((0x1ac2260dLL * zoe1) >> 30) +
886 ((0x0526cdcaLL * zoe2) >> 30) + ((0x00170c29LL * zoe3) >> 30);
887 zoc1 = ((0x14f8a49aLL * zoo1) >> 30) +
888 ((0x0d6d1109LL * zoo2) >> 30) + ((0x008cd4dcLL * zoo3) >> 30);
889 zoc2 = ((-0x0d3e94a4LL * zoe1) >> 30) +
890 ((0x0bddded4LL * zoe2) >> 30) + ((0x0160b5d0LL * zoe3) >> 30);
891 zoc3 = ((-0x0de10cc4LL * zoo1) >> 30) +
892 ((0x019b2a7dLL * zoo2) >> 30) + ((0x01cfe914LL * zoo3) >> 30);
893 zoc4 = ((0x02aa12d7LL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

906 zoz = z - (Z_ONE >> 1);
907 zoe1 = z_coeff[1] + z_coeff[0];
908 zoe2 = z_coeff[2] + z_coeff[-1];
909 zoe3 = z_coeff[3] + z_coeff[-2];
910 zoo1 = z_coeff[1] - z_coeff[0];
911 zoo2 = z_coeff[2] - z_coeff[-1];
912 zoo3 = z_coeff[3] - z_coeff[-2];
913
886 ((0x0526cdcaLL * zoe2) >> 30) + ((0x00170c29LL * zoe3) >> 30);
887 zoc1 = ((0x14f8a49aLL * zoo1) >> 30) +
888 ((0x0d6d1109LL * zoo2) >> 30) + ((0x008cd4dcLL * zoo3) >> 30);
889 zoc2 = ((-0x0d3e94a4LL * zoe1) >> 30) +
890 ((0x0bddded4LL * zoe2) >> 30) + ((0x0160b5d0LL * zoe3) >> 30);
891 zoc3 = ((-0x0de10cc4LL * zoo1) >> 30) +
892 ((0x019b2a7dLL * zoo2) >> 30) + ((0x01cfe914LL * zoo3) >> 30);
893 zoc4 = ((0x02aa12d7LL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

906 zoz = z - (Z_ONE >> 1);
907 zoe1 = z_coeff[1] + z_coeff[0];
908 zoe2 = z_coeff[2] + z_coeff[-1];
909 zoe3 = z_coeff[3] + z_coeff[-2];
910 zoo1 = z_coeff[1] - z_coeff[0];
911 zoo2 = z_coeff[2] - z_coeff[-1];
912 zoo3 = z_coeff[3] - z_coeff[-2];
913
914 zoc0 = (((0x1ac2260dLL * zoe1)) >> 30) +
914 zoc0 = ((0x1ac2260dLL * zoe1) >> 30) +
915 ((0x0526cdcaLL * zoe2) >> 30) + ((0x00170c29LL * zoe3) >> 30);
916 zoc1 = ((0x14f8a49aLL * zoo1) >> 30) +
917 ((0x0d6d1109LL * zoo2) >> 30) + ((0x008cd4dcLL * zoo3) >> 30);
918 zoc2 = ((-0x0d3e94a4LL * zoe1) >> 30) +
919 ((0x0bddded4LL * zoe2) >> 30) + ((0x0160b5d0LL * zoe3) >> 30);
920 zoc3 = ((-0x0de10cc4LL * zoo1) >> 30) +
921 ((0x019b2a7dLL * zoo2) >> 30) + ((0x01cfe914LL * zoo3) >> 30);
922 zoc4 = ((0x02aa12d7LL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

935 zoz = z - (Z_ONE >> 1);
936 zoe1 = z_coeff[1] + z_coeff[0];
937 zoe2 = z_coeff[2] + z_coeff[-1];
938 zoe3 = z_coeff[3] + z_coeff[-2];
939 zoo1 = z_coeff[1] - z_coeff[0];
940 zoo2 = z_coeff[2] - z_coeff[-1];
941 zoo3 = z_coeff[3] - z_coeff[-2];
942
915 ((0x0526cdcaLL * zoe2) >> 30) + ((0x00170c29LL * zoe3) >> 30);
916 zoc1 = ((0x14f8a49aLL * zoo1) >> 30) +
917 ((0x0d6d1109LL * zoo2) >> 30) + ((0x008cd4dcLL * zoo3) >> 30);
918 zoc2 = ((-0x0d3e94a4LL * zoe1) >> 30) +
919 ((0x0bddded4LL * zoe2) >> 30) + ((0x0160b5d0LL * zoe3) >> 30);
920 zoc3 = ((-0x0de10cc4LL * zoo1) >> 30) +
921 ((0x019b2a7dLL * zoo2) >> 30) + ((0x01cfe914LL * zoo3) >> 30);
922 zoc4 = ((0x02aa12d7LL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

935 zoz = z - (Z_ONE >> 1);
936 zoe1 = z_coeff[1] + z_coeff[0];
937 zoe2 = z_coeff[2] + z_coeff[-1];
938 zoe3 = z_coeff[3] + z_coeff[-2];
939 zoo1 = z_coeff[1] - z_coeff[0];
940 zoo2 = z_coeff[2] - z_coeff[-1];
941 zoo3 = z_coeff[3] - z_coeff[-2];
942
943 zoc0 = (((0x1aa9b47dLL * zoe1)) >> 30) +
943 zoc0 = ((0x1aa9b47dLL * zoe1) >> 30) +
944 ((0x053d9944LL * zoe2) >> 30) + ((0x0018b23fLL * zoe3) >> 30);
945 zoc1 = ((0x14a104d1LL * zoo1) >> 30) +
946 ((0x0d7d2504LL * zoo2) >> 30) + ((0x0094b599LL * zoo3) >> 30);
947 zoc2 = ((-0x0d22530bLL * zoe1) >> 30) +
948 ((0x0bb37a2cLL * zoe2) >> 30) + ((0x016ed8e0LL * zoe3) >> 30);
949 zoc3 = ((-0x0d744b1cLL * zoo1) >> 30) +
950 ((0x01649591LL * zoo2) >> 30) + ((0x01dae93aLL * zoo3) >> 30);
951 zoc4 = ((0x02a7ee1bLL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

964 zoz = z - (Z_ONE >> 1);
965 zoe1 = z_coeff[1] + z_coeff[0];
966 zoe2 = z_coeff[2] + z_coeff[-1];
967 zoe3 = z_coeff[3] + z_coeff[-2];
968 zoo1 = z_coeff[1] - z_coeff[0];
969 zoo2 = z_coeff[2] - z_coeff[-1];
970 zoo3 = z_coeff[3] - z_coeff[-2];
971
944 ((0x053d9944LL * zoe2) >> 30) + ((0x0018b23fLL * zoe3) >> 30);
945 zoc1 = ((0x14a104d1LL * zoo1) >> 30) +
946 ((0x0d7d2504LL * zoo2) >> 30) + ((0x0094b599LL * zoo3) >> 30);
947 zoc2 = ((-0x0d22530bLL * zoe1) >> 30) +
948 ((0x0bb37a2cLL * zoe2) >> 30) + ((0x016ed8e0LL * zoe3) >> 30);
949 zoc3 = ((-0x0d744b1cLL * zoo1) >> 30) +
950 ((0x01649591LL * zoo2) >> 30) + ((0x01dae93aLL * zoo3) >> 30);
951 zoc4 = ((0x02a7ee1bLL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

964 zoz = z - (Z_ONE >> 1);
965 zoe1 = z_coeff[1] + z_coeff[0];
966 zoe2 = z_coeff[2] + z_coeff[-1];
967 zoe3 = z_coeff[3] + z_coeff[-2];
968 zoo1 = z_coeff[1] - z_coeff[0];
969 zoo2 = z_coeff[2] - z_coeff[-1];
970 zoo3 = z_coeff[3] - z_coeff[-2];
971
972 zoc0 = (((0x1a8eda43LL * zoe1)) >> 30) +
972 zoc0 = ((0x1a8eda43LL * zoe1) >> 30) +
973 ((0x0556ee38LL * zoe2) >> 30) + ((0x001a3784LL * zoe3) >> 30);
974 zoc1 = ((0x143d863eLL * zoo1) >> 30) +
975 ((0x0d910e36LL * zoo2) >> 30) + ((0x009ca889LL * zoo3) >> 30);
976 zoc2 = ((-0x0d026821LL * zoe1) >> 30) +
977 ((0x0b837773LL * zoe2) >> 30) + ((0x017ef0c6LL * zoe3) >> 30);
978 zoc3 = ((-0x0cef1502LL * zoo1) >> 30) +
979 ((0x01207a8eLL * zoo2) >> 30) + ((0x01e936dbLL * zoo3) >> 30);
980 zoc4 = ((0x029fe643LL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

993 zoz = z - (Z_ONE >> 1);
994 zoe1 = z_coeff[1] + z_coeff[0];
995 zoe2 = z_coeff[2] + z_coeff[-1];
996 zoe3 = z_coeff[3] + z_coeff[-2];
997 zoo1 = z_coeff[1] - z_coeff[0];
998 zoo2 = z_coeff[2] - z_coeff[-1];
999 zoo3 = z_coeff[3] - z_coeff[-2];
1000
973 ((0x0556ee38LL * zoe2) >> 30) + ((0x001a3784LL * zoe3) >> 30);
974 zoc1 = ((0x143d863eLL * zoo1) >> 30) +
975 ((0x0d910e36LL * zoo2) >> 30) + ((0x009ca889LL * zoo3) >> 30);
976 zoc2 = ((-0x0d026821LL * zoe1) >> 30) +
977 ((0x0b837773LL * zoe2) >> 30) + ((0x017ef0c6LL * zoe3) >> 30);
978 zoc3 = ((-0x0cef1502LL * zoo1) >> 30) +
979 ((0x01207a8eLL * zoo2) >> 30) + ((0x01e936dbLL * zoo3) >> 30);
980 zoc4 = ((0x029fe643LL * zoe1) >> 30) +

--- 12 unchanged lines hidden (view full) ---

993 zoz = z - (Z_ONE >> 1);
994 zoe1 = z_coeff[1] + z_coeff[0];
995 zoe2 = z_coeff[2] + z_coeff[-1];
996 zoe3 = z_coeff[3] + z_coeff[-2];
997 zoo1 = z_coeff[1] - z_coeff[0];
998 zoo2 = z_coeff[2] - z_coeff[-1];
999 zoo3 = z_coeff[3] - z_coeff[-2];
1000
1001 zoc0 = (((0x19edb6fdLL * zoe1)) >> 30) +
1001 zoc0 = ((0x19edb6fdLL * zoe1) >> 30) +
1002 ((0x05ebd062LL * zoe2) >> 30) + ((0x00267881LL * zoe3) >> 30);
1003 zoc1 = ((0x1223af76LL * zoo1) >> 30) +
1004 ((0x0de3dd6bLL * zoo2) >> 30) + ((0x00d683cdLL * zoo3) >> 30);
1005 zoc2 = ((-0x0c3ee068LL * zoe1) >> 30) +
1006 ((0x0a5c3769LL * zoe2) >> 30) + ((0x01e2aceaLL * zoe3) >> 30);
1007 zoc3 = ((-0x0a8ab614LL * zoo1) >> 30) +
1008 ((-0x0019522eLL * zoo2) >> 30) + ((0x022cefc7LL * zoo3) >> 30);
1009 zoc4 = ((0x0276187dLL * zoe1) >> 30) +

--- 729 unchanged lines hidden ---
1002 ((0x05ebd062LL * zoe2) >> 30) + ((0x00267881LL * zoe3) >> 30);
1003 zoc1 = ((0x1223af76LL * zoo1) >> 30) +
1004 ((0x0de3dd6bLL * zoo2) >> 30) + ((0x00d683cdLL * zoo3) >> 30);
1005 zoc2 = ((-0x0c3ee068LL * zoe1) >> 30) +
1006 ((0x0a5c3769LL * zoe2) >> 30) + ((0x01e2aceaLL * zoe3) >> 30);
1007 zoc3 = ((-0x0a8ab614LL * zoo1) >> 30) +
1008 ((-0x0019522eLL * zoo2) >> 30) + ((0x022cefc7LL * zoo3) >> 30);
1009 zoc4 = ((0x0276187dLL * zoe1) >> 30) +

--- 729 unchanged lines hidden ---