Skip to content

Commit

Permalink
RS6000, add xxswapd support
Browse files Browse the repository at this point in the history
gcc/ChangeLog:

2019-09-23  Carl Love  <cel@us.ibm.com>

	* config/rs6000/vsx.md (xxswapd_v4si, xxswapd_v8hi, xxswapd_v16qi):
	New define_insn.
	(vsx_xxpermdi4_le_<mode> for VSX_W, vsx_xxpermdi8_le_V8HI,
	vsx_xxpermdi16_le_V16QI): Removed define_insn.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@276065 138bc75d-0d04-0410-961f-82ee72b054a4
Rate limit · GitHub

Access has been restricted

You have triggered a rate limit.

Please wait a few minutes before you try again;
in some cases this may take up to an hour.

carll committed Sep 23, 2019
1 parent d7c0398 commit e0d1a94
Showing 2 changed files with 41 additions and 28 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2019-09-23 Carl Love <cel@us.ibm.com>

* config/rs6000/vsx.md (xxswapd_v4si, xxswapd_v8hi, xxswapd_v16qi):
New define_insn.
(vsx_xxpermdi4_le_<mode> for VSX_W, vsx_xxpermdi8_le_V8HI,
vsx_xxpermdi16_le_V16QI): Removed define_insn.

2019-09-13 Sam Tebbs <sam.tebbs@arm.com>

* MAINTAINERS (Sam Tebbs): Update email address.
62 changes: 34 additions & 28 deletions gcc/config/rs6000/vsx.md
Original file line number Diff line number Diff line change
@@ -2941,41 +2941,47 @@
"xxpermdi %x0,%x1,%x1,2"
[(set_attr "type" "vecperm")])

(define_insn "*vsx_xxpermdi4_le_<mode>"
[(set (match_operand:VSX_W 0 "vsx_register_operand" "=wa")
(vec_select:VSX_W
(match_operand:VSX_W 1 "vsx_register_operand" "wa")
(parallel [(const_int 2) (const_int 3)
(const_int 0) (const_int 1)])))]
"!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
(define_insn "xxswapd_v16qi"
[(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
(vec_select:V16QI
(match_operand:V16QI 1 "vsx_register_operand" "wa")
(parallel [(const_int 8) (const_int 9)
(const_int 10) (const_int 11)
(const_int 12) (const_int 13)
(const_int 14) (const_int 15)
(const_int 0) (const_int 1)
(const_int 2) (const_int 3)
(const_int 4) (const_int 5)
(const_int 6) (const_int 7)])))]
"TARGET_VSX"
;; AIX does not support the extended mnemonic xxswapd. Use the basic
;; mnemonic xxpermdi instead.
"xxpermdi %x0,%x1,%x1,2"
[(set_attr "type" "vecperm")])

(define_insn "*vsx_xxpermdi8_le_V8HI"
(define_insn "xxswapd_v8hi"
[(set (match_operand:V8HI 0 "vsx_register_operand" "=wa")
(vec_select:V8HI
(match_operand:V8HI 1 "vsx_register_operand" "wa")
(parallel [(const_int 4) (const_int 5)
(const_int 6) (const_int 7)
(const_int 0) (const_int 1)
(const_int 2) (const_int 3)])))]
"!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V8HImode)"
(vec_select:V8HI
(match_operand:V8HI 1 "vsx_register_operand" "wa")
(parallel [(const_int 4) (const_int 5)
(const_int 6) (const_int 7)
(const_int 0) (const_int 1)
(const_int 2) (const_int 3)])))]
"TARGET_VSX"
;; AIX does not support the extended mnemonic xxswapd. Use the basic
;; mnemonic xxpermdi instead.
"xxpermdi %x0,%x1,%x1,2"
[(set_attr "type" "vecperm")])

(define_insn "*vsx_xxpermdi16_le_V16QI"
[(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
(vec_select:V16QI
(match_operand:V16QI 1 "vsx_register_operand" "wa")
(parallel [(const_int 8) (const_int 9)
(const_int 10) (const_int 11)
(const_int 12) (const_int 13)
(const_int 14) (const_int 15)
(const_int 0) (const_int 1)
(const_int 2) (const_int 3)
(const_int 4) (const_int 5)
(const_int 6) (const_int 7)])))]
"!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (V16QImode)"
(define_insn "xxswapd_<mode>"
[(set (match_operand:VSX_W 0 "vsx_register_operand" "=wa")
(vec_select:VSX_W
(match_operand:VSX_W 1 "vsx_register_operand" "wa")
(parallel [(const_int 2) (const_int 3)
(const_int 0) (const_int 1)])))]
"TARGET_VSX"
;; AIX does not support extended mnemonic xxswapd. Use the basic
;; mnemonic xxpermdi instead.
"xxpermdi %x0,%x1,%x1,2"
[(set_attr "type" "vecperm")])

0 comments on commit e0d1a94

Please sign in to comment.