diff mbox

[AArch64,2/5] Make BIC, other logical instructions, available. (was: Add BIC instruction.)

Message ID 55FFE615.1070900@foss.arm.com
State New
Headers show

Commit Message

Matthew Wahab Sept. 21, 2015, 11:12 a.m. UTC
On 18/09/15 09:05, James Greenhalgh wrote:
> On Thu, Sep 17, 2015 at 05:40:48PM +0100, Matthew Wahab wrote:
>> Hello,
>>
>> ARMv8.1 adds atomic swap and atomic load-operate instructions with
>> optional memory ordering specifiers. This patch adds an expander to
>> generate a BIC instruction that can be explicitly called when
>> implementing the atomic_<op>_fetch pattern to calculate the value to
>> be returned by the operation.
>>
>
> Why not make the "*<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3" pattern
> named (remove the leading *) and call that in your atomic_<op>_fetch
> patterns as:
>
>    and_one_cmpl_<shift><mode>3
>
> I'd rather that than to add a pettern that simply expands to the same
> thing.

I overlooked that pattern when I was trying to find the bic emitter. I've attached an 
updated patch.

Tested as part of the series for aarch64-none-linux-gnu with native bootstrap and
make check. Also tested for aarch64-none-elf with cross-compiled
check-gcc on an ARMv8.1 emulator with +lse enabled by default.

Ok for trunk?
Matthew

2015-09-21  Matthew Wahab  <matthew.wahab@arm.com>

	* config/aarch64/aarch64.md
	(<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3): Make a named
	pattern.

Comments

James Greenhalgh Sept. 21, 2015, 11:25 a.m. UTC | #1
On Mon, Sep 21, 2015 at 12:12:21PM +0100, Matthew Wahab wrote:
> On 18/09/15 09:05, James Greenhalgh wrote:
> > On Thu, Sep 17, 2015 at 05:40:48PM +0100, Matthew Wahab wrote:
> >> Hello,
> >>
> >> ARMv8.1 adds atomic swap and atomic load-operate instructions with
> >> optional memory ordering specifiers. This patch adds an expander to
> >> generate a BIC instruction that can be explicitly called when
> >> implementing the atomic_<op>_fetch pattern to calculate the value to
> >> be returned by the operation.
> >>
> >
> > Why not make the "*<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3" pattern
> > named (remove the leading *) and call that in your atomic_<op>_fetch
> > patterns as:
> >
> >    and_one_cmpl_<shift><mode>3
> >
> > I'd rather that than to add a pettern that simply expands to the same
> > thing.
> 
> I overlooked that pattern when I was trying to find the bic emitter. I've attached an 
> updated patch.
> 
> Tested as part of the series for aarch64-none-linux-gnu with native bootstrap and
> make check. Also tested for aarch64-none-elf with cross-compiled
> check-gcc on an ARMv8.1 emulator with +lse enabled by default.
> 
> Ok for trunk?
> Matthew

OK.

Thanks,
James

> 
> 2015-09-21  Matthew Wahab  <matthew.wahab@arm.com>
> 
> 	* config/aarch64/aarch64.md
> 	(<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3): Make a named
> 	pattern.
> 

> From 0e2ae8739d70e4d1c14fa848f67847b1ecf94f71 Mon Sep 17 00:00:00 2001
> From: Matthew Wahab <matthew.wahab@arm.com>
> Date: Mon, 17 Aug 2015 17:48:27 +0100
> Subject: [PATCH 2/5] Make BIC, other logical instructions, available for use.
> 
> Change-Id: Ibef049bfa1bfe5e168feada3dc358f28383e6410
> ---
>  gcc/config/aarch64/aarch64.md | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
> index 88ba72e..72384ce 100644
> --- a/gcc/config/aarch64/aarch64.md
> +++ b/gcc/config/aarch64/aarch64.md
> @@ -3392,7 +3392,7 @@
>    [(set_attr "type" "logics_reg")]
>  )
>  
> -(define_insn "*<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3"
> +(define_insn "<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3"
>    [(set (match_operand:GPI 0 "register_operand" "=r")
>  	(LOGICAL:GPI (not:GPI
>  		      (SHIFT:GPI
> -- 
> 2.1.4
>
diff mbox

Patch

From 0e2ae8739d70e4d1c14fa848f67847b1ecf94f71 Mon Sep 17 00:00:00 2001
From: Matthew Wahab <matthew.wahab@arm.com>
Date: Mon, 17 Aug 2015 17:48:27 +0100
Subject: [PATCH 2/5] Make BIC, other logical instructions, available for use.

Change-Id: Ibef049bfa1bfe5e168feada3dc358f28383e6410
---
 gcc/config/aarch64/aarch64.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 88ba72e..72384ce 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -3392,7 +3392,7 @@ 
   [(set_attr "type" "logics_reg")]
 )
 
-(define_insn "*<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3"
+(define_insn "<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3"
   [(set (match_operand:GPI 0 "register_operand" "=r")
 	(LOGICAL:GPI (not:GPI
 		      (SHIFT:GPI
-- 
2.1.4