linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bob Copeland <me@bobcopeland.com>
To: Dmitry Tarnyagin <abi.dmitryt@gmail.com>
Cc: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>,
	linux-wireless@vger.kernel.org
Subject: Re: [PATCH 09/21] cw1200: txrx.*, implementation of datapath.
Date: Tue, 8 May 2012 08:54:52 -0400	[thread overview]
Message-ID: <20120508125452.GA15792@localhost> (raw)
In-Reply-To: <CAMG6FYgQLexa=VAqrLmMxscef=bDyqPo6mThYAeZGqB6p5Zo_g@mail.gmail.com>

On Tue, May 08, 2012 at 09:09:24AM +0200, Dmitry Tarnyagin wrote:
> Yes, correct, you mentioned all the 3 problems with the minstrel.
> "Buggy" is not the best word here, minstrel just behaves in this way,
> and the behavior is specified. It can be changed (at least last two),
> but carefully and with respect to other minstrel clients.

OK, thanks.  I (and others) had also noticed these issues a while ago;
I guess we should take a look at fixing it in the core.

> As I remember compiler changes divide to a shift only for
> unsigned divisions, isn't it? Or do modern gcc-s changes it for signed
> divs as well?

It's easy enough to check.  I can't speak for ARM, but on gcc 4.6.0
for x86, I get the following:

signed x / 2 compiles to (%eax = dividend):

    mov    %eax,%edx             ; put x into edx
    shr    $0x1f,%edx            ; edx >>= 31, so sign of x is LSB of edx
    add    %edx,%eax             ; eax += 1 (round up) if eax is signed
    sar    %eax                  ; arithmetic (sign-preserving) shift right eax

This sequence corrects for, say, -3 / 2 == -1 vs -3 >> 1 == -2.

unsigned x / 2 compiles to:

    shr    %eax                  ; same as x >> 1

Gcc has some neat tricks -- even something like "x * 22/7" gets turned
into a pair of multiplies.

> Well, it's datapath. This code is executed for every SDU in data traffic,
> with frequency ~3kHz on target throughput. For me it's a good reason
> to explicitly eliminate divisions :)

Fair enough :)

-- 
Bob Copeland %% www.bobcopeland.com

  reply	other threads:[~2012-05-08 12:55 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <d53e019b1a0bcd29c2c367fbe5665413f2d33938-submit>
2012-03-02  1:41 ` [PATCH 00/21] cw1200: mac80211-based driver for ST-Ericsson CW1200 device Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 01/21] cw1200: cw1200.h, private driver data Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 02/21] cw1200: cw1200_plat.h, definition of the driver'ss platform data Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 03/21] cw1200: sbus.h, common device interface abstraction Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 04/21] cw1200: cw1200_sdio.c, implementation of SDIO wrapper for the driver Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 05/21] cw1200: hwio.*, device reg/mem map and low-level i/o primitives Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 06/21] cw1200: fwio.*, firmware downloading code for the cw1200 driver Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 07/21] cw1200: queue.*, implementation of TX queues of " Dmitry Tarnyagin
2012-03-02  8:33     ` Johannes Berg
2012-03-02 15:32       ` Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 08/21] cw1200: wsm.*, implementation of device high-level interface Dmitry Tarnyagin
2012-03-02  8:34     ` Johannes Berg
2012-03-02  8:41       ` Joe Perches
2012-03-02  1:41   ` [PATCH 09/21] cw1200: txrx.*, implementation of datapath Dmitry Tarnyagin
2012-05-07 12:53     ` Bob Copeland
2012-05-08  7:09       ` Dmitry Tarnyagin
2012-05-08 12:54         ` Bob Copeland [this message]
2012-03-02  1:41   ` [PATCH 10/21] cw1200: ht.h, small helper header with HT definitions Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 11/21] cw1200: bh.*, device serving thread Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 12/21] cw1200: sta.*, mac80211 STA callbacks Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 13/21] cw1200: ap.*, mac80211 AP callbacks Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 14/21] cw1200: scan.*, mac80211 hw_scan callback Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 15/21] cw1200: debug.*, implementation of the driver's debugfs Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 16/21] cw1200: itp.*, internal device test and calibration code Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 17/21] cw1200: pm.*, power management code Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 18/21] cw1200: main.c, core initialization code Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 19/21] cw1200: TODO list Dmitry Tarnyagin
2012-03-02  8:51     ` Johannes Berg
2012-03-02  1:41   ` [PATCH 20/21] cw1200: Credits Dmitry Tarnyagin
2012-03-02  1:41   ` [PATCH 21/21] cw1200: Kconfig + Makefile for the driver Dmitry Tarnyagin
2012-03-02  8:50     ` Johannes Berg
2012-03-02 15:45       ` Dmitry Tarnyagin

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=20120508125452.GA15792@localhost \
    --to=me@bobcopeland.com \
    --cc=abi.dmitryt@gmail.com \
    --cc=dmitry.tarnyagin@stericsson.com \
    --cc=linux-wireless@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).