Skip to content

Commit

Permalink
MIPS: assume at as source/dest of MSA copy/insert instructions
Browse files Browse the repository at this point in the history
Assuming at ($1) as the source or destination register of copy or
insert instructions:

  - Simplifies the macros providing those instructions for toolchains
    without MSA support.

  - Avoids an unnecessary move instruction when at is used as the source
    or destination register anyway.

  - Is sufficient for the uses to be introduced in the kernel by a
    subsequent patch.

Note that due to a patch ordering snafu on my part this also fixes the
currently broken build with MSA support enabled. The build has been
broken since commit c901775 "MIPS: init upper 64b of vector
registers when MSA is first used", which this patch should have
preceeded.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/9161/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Paul Burton authored and Ralf Baechle committed Mar 27, 2015
1 parent 631afc6 commit f23ce38
Showing 1 changed file with 12 additions and 16 deletions.
28 changes: 12 additions & 16 deletions arch/mips/include/asm/asmmacro.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,35 +227,35 @@
.set pop
.endm

.macro copy_u_w rd, ws, n
.macro copy_u_w ws, n
.set push
.set mips32r2
.set msa
copy_u.w \rd, $w\ws[\n]
copy_u.w $1, $w\ws[\n]
.set pop
.endm

.macro copy_u_d rd, ws, n
.macro copy_u_d ws, n
.set push
.set mips64r2
.set msa
copy_u.d \rd, $w\ws[\n]
copy_u.d $1, $w\ws[\n]
.set pop
.endm

.macro insert_w wd, n, rs
.macro insert_w wd, n
.set push
.set mips32r2
.set msa
insert.w $w\wd[\n], \rs
insert.w $w\wd[\n], $1
.set pop
.endm

.macro insert_d wd, n, rs
.macro insert_d wd, n
.set push
.set mips64r2
.set msa
insert.d $w\wd[\n], \rs
insert.d $w\wd[\n], $1
.set pop
.endm
#else
Expand Down Expand Up @@ -320,40 +320,36 @@
.set pop
.endm

.macro copy_u_w rd, ws, n
.macro copy_u_w ws, n
.set push
.set noat
SET_HARDFLOAT
.insn
.word COPY_UW_MSA_INSN | (\n << 16) | (\ws << 11)
move \rd, $1
.set pop
.endm

.macro copy_u_d rd, ws, n
.macro copy_u_d ws, n
.set push
.set noat
SET_HARDFLOAT
.insn
.word COPY_UD_MSA_INSN | (\n << 16) | (\ws << 11)
move \rd, $1
.set pop
.endm

.macro insert_w wd, n, rs
.macro insert_w wd, n
.set push
.set noat
SET_HARDFLOAT
move $1, \rs
.word INSERT_W_MSA_INSN | (\n << 16) | (\wd << 6)
.set pop
.endm

.macro insert_d wd, n, rs
.macro insert_d wd, n
.set push
.set noat
SET_HARDFLOAT
move $1, \rs
.word INSERT_D_MSA_INSN | (\n << 16) | (\wd << 6)
.set pop
.endm
Expand Down

0 comments on commit f23ce38

Please sign in to comment.