All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Ellerman <michael@ellerman.id.au>
To: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Michael Ellerman <michaele@au1.ibm.com>,
	linux-kernel@vger.kernel.org,
	Stephane Eranian <eranian@google.com>,
	linuxppc-dev@ozlabs.org, Paul Mackerras <paulus@samba.org>,
	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	Anshuman Khandual <khandual@linux.vnet.ibm.com>
Subject: Re: [PATCH 5/9][v5] powerpc: implement is_instr_load_store().
Date: Thu, 3 Oct 2013 15:35:19 +1000	[thread overview]
Message-ID: <20131003053519.GC17237@concordia> (raw)
In-Reply-To: <1380672911-12812-6-git-send-email-sukadev@linux.vnet.ibm.com>

On Tue, Oct 01, 2013 at 05:15:06PM -0700, Sukadev Bhattiprolu wrote:
> Implement is_instr_load_store() to detect whether a given instruction
> is one of the fixed-point or floating-point load/store instructions.
> This function will be used in a follow-on patch to save memory hierarchy
> information of the load/store.

The search over the array is a bit of a pity, especially as the worst
case penalises you when you haven't hit a load/store.

I think we can do better. If you look at the opcode maps, and in
particular the extended table for opcode 31, you'll see there's a
reasonable amount of structure.

The following is only valid for arch 2.06, ie. it will classify reserved
opcodes as being load/store, but I think that's fine for the moment. If
we need to use it somewhere in future we can update it. But we should
add a big comment saying it's only valid in that case.

Anyway, I think the following logic is all we need for opcode 31:

bool is_load_store(int ext_opcode)
{
        upper = ext_opcode >> 5;
        lower = ext_opcode & 0x1f;

        /* Short circuit as many misses as we can */
        if (lower < 3 || lower > 23)
            return false;

        if (lower == 3)
            if (upper >= 16)
                return true;

            return false;

        if (lower == 6)
            if (upper <= 1)
                return true;
            return false;

        if (lower == 7 || lower == 12)
            return true;

        if (lower >= 20) /* && lower <= 23 (implicit) */
            return true;

        return false;
}


Which is not pretty, but I think it's preferable to the full search over the
array.

cheers

WARNING: multiple messages have this Message-ID (diff)
From: Michael Ellerman <michael@ellerman.id.au>
To: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	Michael Ellerman <michaele@au1.ibm.com>,
	linux-kernel@vger.kernel.org,
	Stephane Eranian <eranian@google.com>,
	linuxppc-dev@ozlabs.org, Paul Mackerras <paulus@samba.org>,
	Anshuman Khandual <khandual@linux.vnet.ibm.com>
Subject: Re: [PATCH 5/9][v5] powerpc: implement is_instr_load_store().
Date: Thu, 3 Oct 2013 15:35:19 +1000	[thread overview]
Message-ID: <20131003053519.GC17237@concordia> (raw)
In-Reply-To: <1380672911-12812-6-git-send-email-sukadev@linux.vnet.ibm.com>

On Tue, Oct 01, 2013 at 05:15:06PM -0700, Sukadev Bhattiprolu wrote:
> Implement is_instr_load_store() to detect whether a given instruction
> is one of the fixed-point or floating-point load/store instructions.
> This function will be used in a follow-on patch to save memory hierarchy
> information of the load/store.

The search over the array is a bit of a pity, especially as the worst
case penalises you when you haven't hit a load/store.

I think we can do better. If you look at the opcode maps, and in
particular the extended table for opcode 31, you'll see there's a
reasonable amount of structure.

The following is only valid for arch 2.06, ie. it will classify reserved
opcodes as being load/store, but I think that's fine for the moment. If
we need to use it somewhere in future we can update it. But we should
add a big comment saying it's only valid in that case.

Anyway, I think the following logic is all we need for opcode 31:

bool is_load_store(int ext_opcode)
{
        upper = ext_opcode >> 5;
        lower = ext_opcode & 0x1f;

        /* Short circuit as many misses as we can */
        if (lower < 3 || lower > 23)
            return false;

        if (lower == 3)
            if (upper >= 16)
                return true;

            return false;

        if (lower == 6)
            if (upper <= 1)
                return true;
            return false;

        if (lower == 7 || lower == 12)
            return true;

        if (lower >= 20) /* && lower <= 23 (implicit) */
            return true;

        return false;
}


Which is not pretty, but I think it's preferable to the full search over the
array.

cheers

  reply	other threads:[~2013-10-03  5:35 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-02  0:15 Sukadev Bhattiprolu
2013-10-02  0:15 ` Sukadev Bhattiprolu
2013-10-02  0:15 ` [PATCH 1/9][v5] powerpc/perf: Rename Power8 macros to start with PME Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-03  4:02   ` Michael Ellerman
2013-10-03  4:02     ` Michael Ellerman
2013-10-02  0:15 ` [PATCH 2/9][v5] powerpc/perf: Export Power8 generic events in sysfs Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-03  4:04   ` Michael Ellerman
2013-10-03  4:04     ` Michael Ellerman
2013-10-03 17:57     ` Sukadev Bhattiprolu
2013-10-03 17:57       ` Sukadev Bhattiprolu
2013-10-08  3:58       ` Michael Ellerman
2013-10-08  3:58         ` Michael Ellerman
2013-10-02  0:15 ` [PATCH 3/9][v5] powerpc/perf: Add Power8 event PM_MRK_GRP_CMPL to sysfs Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-02  0:15 ` [PATCH 4/9][v5] powerpc: Rename branch_opcode() to instr_opcode() Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-02  0:15 ` [PATCH 5/9][v5] powerpc: implement is_instr_load_store() Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-03  5:35   ` Michael Ellerman [this message]
2013-10-03  5:35     ` Michael Ellerman
2013-10-03 19:03     ` Sukadev Bhattiprolu
2013-10-03 19:03       ` Sukadev Bhattiprolu
2013-10-03 19:52       ` Tom Musta
2013-10-03 19:52         ` Tom Musta
2013-10-08  3:28         ` Michael Ellerman
2013-10-08  3:28           ` Michael Ellerman
2013-10-08  4:00       ` Michael Ellerman
2013-10-08  4:00         ` Michael Ellerman
2013-10-08 19:31     ` Sukadev Bhattiprolu
2013-10-08 19:31       ` Sukadev Bhattiprolu
2013-10-09  1:03       ` Michael Ellerman
2013-10-09  1:03         ` Michael Ellerman
2013-10-09  1:27         ` Michael Ellerman
2013-10-02  0:15 ` [PATCH 6/9][v5] powerpc/perf: Define big-endian version of perf_mem_data_src Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-03  5:39   ` Michael Ellerman
2013-10-03  5:39     ` Michael Ellerman
2013-10-03  6:20     ` Sukadev Bhattiprolu
2013-10-03  6:20       ` Sukadev Bhattiprolu
2013-10-03 15:27     ` Sukadev Bhattiprolu
2013-10-03 15:27       ` Sukadev Bhattiprolu
2013-10-05  3:53     ` Sukadev Bhattiprolu
2013-10-05  3:53       ` Sukadev Bhattiprolu
2013-10-02  0:15 ` [PATCH 7/9][v5] powerpc/perf: Export Power8 memory hierarchy info to user space Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-02  0:15 ` [PATCH 8/9][v5] powerpc/perf: Export Power7 " Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu
2013-10-02  0:15 ` [PATCH 9/9][v5] powerpc/perf: Update perf-mem man page for Power Sukadev Bhattiprolu
2013-10-02  0:15   ` Sukadev Bhattiprolu

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=20131003053519.GC17237@concordia \
    --to=michael@ellerman.id.au \
    --cc=acme@ghostprotocols.net \
    --cc=eranian@google.com \
    --cc=khandual@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=michaele@au1.ibm.com \
    --cc=paulus@samba.org \
    --cc=sukadev@linux.vnet.ibm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.