linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Siarhei Siamashka <siarhei.siamashka@gmail.com>
To: "Frédéric Dalleau" <frederic.dalleau@linux.intel.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH v3 06/10] sbc: Add mmx primitive for 1b 8s analyse
Date: Sun, 28 Oct 2012 02:06:21 +0300	[thread overview]
Message-ID: <20121028020621.3653ac8e@i7> (raw)
In-Reply-To: <1351272036-4875-7-git-send-email-frederic.dalleau@linux.intel.com>

On Fri, 26 Oct 2012 19:20:32 +0200
Frédéric Dalleau  <frederic.dalleau@linux.intel.com> wrote:

> ---
>  sbc/sbc_primitives_mmx.c |   18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)

In the previous patches you are changing the behaviour of C
implementation to support mSBC configuration. By still allowing
assembly optimized implementations to override C functions, mSBC
does not work correctly for the architectures which support these
optimizations.

With this particular patch you are fixing MMX. The other
implementations (ARM NEON) are still broken.

It would be better if we could shape out this patch series so that
the code is always correct after every commit, preferably as:
1. SBC still works and uses assembly optimizations after
   every commit
2. mSBC works correctly after the commit where SBC_MSBC feature
   is advertised in the public header "sbc.h"
3. mSBC gets assembly optimizations enabled. Unsupported architectures
   use C implementation.

> diff --git a/sbc/sbc_primitives_mmx.c b/sbc/sbc_primitives_mmx.c
> index cbacb4e..17065e5 100644
> --- a/sbc/sbc_primitives_mmx.c
> +++ b/sbc/sbc_primitives_mmx.c
> @@ -276,6 +276,19 @@ static inline void sbc_analyze_4b_8s_mmx(struct sbc_encoder_state *state,
>  	__asm__ volatile ("emms\n");
>  }
>  
> +static inline void sbc_analyze_1b_8s_mmx(struct sbc_encoder_state *state,
> +		int16_t *x, int32_t *out, int out_stride)
> +{
> +	if (state->odd)
> +		sbc_analyze_eight_mmx(x, out, analysis_consts_fixed8_simd_odd);
> +	else
> +		sbc_analyze_eight_mmx(x, out, analysis_consts_fixed8_simd_even);
> +
> +	state->odd = !state->odd;
> +
> +	__asm__ volatile ("emms\n");
> +}
> +
>  static void sbc_calc_scalefactors_mmx(
>  	int32_t sb_sample_f[16][2][8],
>  	uint32_t scale_factor[2][8],
> @@ -366,7 +379,10 @@ void sbc_init_primitives_mmx(struct sbc_encoder_state *state)
>  {
>  	if (check_mmx_support()) {
>  		state->sbc_analyze_4b_4s = sbc_analyze_4b_4s_mmx;
> -		state->sbc_analyze_4b_8s = sbc_analyze_4b_8s_mmx;
> +		if (state->increment == 1)
> +			state->sbc_analyze_4b_8s = sbc_analyze_1b_8s_mmx;

Overriding the function with "_4b_" (4 blocks) in its name with "_1b_"
variant (1 block) looks wrong and is just asking for troubles.

Maybe we need a new function pointer? If not, then the function might
need to be at least renamed.

> +		else
> +			state->sbc_analyze_4b_8s = sbc_analyze_4b_8s_mmx;
>  		state->sbc_calc_scalefactors = sbc_calc_scalefactors_mmx;
>  		state->implementation_info = "MMX";
>  	}

-- 
Best regards,
Siarhei Siamashka

  reply	other threads:[~2012-10-27 23:06 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-26 17:20 [PATCH v3 00/10] mSBC tests Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 01/10] sbc: Add encoder_state to process input functions Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 02/10] sbc: Add encoder_state to analysis functions Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 03/10] sbc: Break 4 blocks processing to variable steps Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 04/10] sbc: Add msbc flag and generic C primitive Frédéric Dalleau
2012-10-27 22:19   ` Siarhei Siamashka
2012-10-29  6:47     ` Dalleau, Frederic
2012-10-30  0:12       ` Siarhei Siamashka
2012-10-26 17:20 ` [PATCH v3 05/10] sbc: Add support for mSBC frame header Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 06/10] sbc: Add mmx primitive for 1b 8s analyse Frédéric Dalleau
2012-10-27 23:06   ` Siarhei Siamashka [this message]
2012-10-27 23:29     ` Siarhei Siamashka
2012-10-29  7:42       ` Dalleau, Frederic
2012-10-30  1:46         ` Siarhei Siamashka
2012-10-30  5:26           ` Dalleau, Frederic
2012-10-26 17:20 ` [PATCH v3 07/10] sbc: Update sbcdec for msbc Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 08/10] sbc: Update sbcenc " Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 09/10] sbc: Update sbcinfo " Frédéric Dalleau
2012-10-26 17:20 ` [PATCH v3 10/10] sbc: Update copyrights Frédéric Dalleau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121028020621.3653ac8e@i7 \
    --to=siarhei.siamashka@gmail.com \
    --cc=frederic.dalleau@linux.intel.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).