Skip to content

Commit

Permalink
ppc/svp64: support setvl instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
ghostmansd authored and amodra committed Aug 11, 2022
1 parent 59f0827 commit 5eafd6d
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 0 deletions.
2 changes: 2 additions & 0 deletions gas/testsuite/gas/ppc/ppc.exp
Original file line number Diff line number Diff line change
Expand Up @@ -154,3 +154,5 @@ run_dump_test "rop-checks"
run_dump_test "dcbt"
run_dump_test "pr27676"
run_dump_test "raw"

run_dump_test "setvl"
15 changes: 15 additions & 0 deletions gas/testsuite/gas/ppc/setvl.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#as: -mlibresoc
#objdump: -dr -Mlibresoc

.*: file format .*


Disassembly of section \.text:
0+ <\.text>:
.*: (37 00 00 58|58 00 00 37) setvl. r0,r0,1,0,0,0
.*: (36 00 00 58|58 00 00 36) setvl r0,r0,1,0,0,0
.*: (36 00 e0 5b|5b e0 00 36) setvl r31,r0,1,0,0,0
.*: (36 00 1f 58|58 1f 00 36) setvl r0,r31,1,0,0,0
.*: (36 7e 00 58|58 00 7e 36) setvl r0,r0,64,0,0,0
.*: (76 00 00 58|58 00 00 76) setvl r0,r0,1,1,0,0
.*: (b6 00 00 58|58 00 00 b6) setvl r0,r0,1,0,1,0
7 changes: 7 additions & 0 deletions gas/testsuite/gas/ppc/setvl.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
setvl. 0,0,1,0,0,0
setvl 0,0,1,0,0,0
setvl 31,0,1,0,0,0
setvl 0,31,1,0,0,0
setvl 0,0,64,0,0,0
setvl 0,0,1,1,0,0
setvl 0,0,1,0,1,0
22 changes: 22 additions & 0 deletions opcodes/ppc-opc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3825,6 +3825,18 @@ const struct powerpc_operand powerpc_operands[] =

#define HH DDD + 1
{ 0x3, 13, NULL, NULL, 0 },

#define SVi HH + 1
{ 0x3f, 9, NULL, NULL, PPC_OPERAND_NONZERO },

#define vf SVi + 1
{ 0x1, 6, NULL, NULL, 0 },

#define vs vf + 1
{ 0x1, 7, NULL, NULL, 0 },

#define ms vs + 1
{ 0x1, 8, NULL, NULL, 0 },
};

const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
Expand Down Expand Up @@ -4700,6 +4712,13 @@ const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
#define APU_RT_MASK (APU_MASK | RT_MASK)
#define APU_RA_MASK (APU_MASK | RA_MASK)

/* An SVL form instruction. */
#define SVL(op, xop, rc) \
(OP (op) \
| ((((uint64_t)(xop)) & 0x1f) << 1) \
| (((uint64_t)(rc)) & 1))
#define SVL_MASK SVL (0x3f, 0x1f, 1)

/* The BO encodings used in extended conditional branch mnemonics. */
#define BODNZF (0x0)
#define BODNZFP (0x1)
Expand Down Expand Up @@ -6769,6 +6788,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"rlmi", M(22,0), M_MASK, M601, PPCVLE, {RA, RS, RB, MBE, ME}},
{"rlmi.", M(22,1), M_MASK, M601, PPCVLE, {RA, RS, RB, MBE, ME}},

{"setvl", SVL(22,27,0), SVL_MASK, SVP64, PPCVLE, {RT, RA, SVi, vf, vs, ms}},
{"setvl.", SVL(22,27,1), SVL_MASK, SVP64, PPCVLE, {RT, RA, SVi, vf, vs, ms}},

{"rotlw", MME(23,31,0), MMBME_MASK, PPCCOM, PPCVLE|EXT, {RA, RS, RB}},
{"rlwnm", M(23,0), M_MASK, PPCCOM, PPCVLE, {RA, RS, RB, MBE, ME}},
{"rlnm", M(23,0), M_MASK, PWRCOM, PPCVLE, {RA, RS, RB, MBE, ME}},
Expand Down

0 comments on commit 5eafd6d

Please sign in to comment.