From 6914869aa73d6cd12121ed6b3e58e1564ef5575d Mon Sep 17 00:00:00 2001 From: Andrew Bennett Date: Fri, 13 Mar 2015 22:42:55 +0000 Subject: [PATCH] MIPS: Fix constraint issues with the R6 beqc and bnec instructions opcodes/ * mips-opc.c (decode_mips_operand): Fix constraint issues with u and y operands. gas/testsuite/ * gas/mips/mips.exp: Added branch constraints testcase. * gas/mips/r6-branch-constraints.s: New test. * gas/mips/r6-branch-constraints.l: New test. --- gas/testsuite/ChangeLog | 6 +++++ gas/testsuite/gas/mips/mips.exp | 2 ++ .../gas/mips/r6-branch-constraints.l | 25 +++++++++++++++++++ .../gas/mips/r6-branch-constraints.s | 25 +++++++++++++++++++ opcodes/ChangeLog | 5 ++++ opcodes/mips-opc.c | 4 +-- 6 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 gas/testsuite/gas/mips/r6-branch-constraints.l create mode 100644 gas/testsuite/gas/mips/r6-branch-constraints.s diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 1fd7362d16f..0054afda6a9 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-03-13 Andrew Bennett + + * gas/mips/mips.exp: Added branch constraints testcase. + * gas/mips/r6-branch-constraints.s: New test. + * gas/mips/r6-branch-constraints.l: New test. + 2015-03-13 Andrew Bennett * gas/mips/r6.s: Add evp and dvp instructions. diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 34414e1e469..11c9b05be6b 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -1454,4 +1454,6 @@ if { [istarget mips*-*-vxworks*] } { } run_list_test_arches "r6-removed" "-32" [mips_arch_list_matching mips32r6] run_list_test_arches "r6-64-removed" [mips_arch_list_matching mips64r6] + + run_list_test_arches "r6-branch-constraints" [mips_arch_list_matching mips32r6] } diff --git a/gas/testsuite/gas/mips/r6-branch-constraints.l b/gas/testsuite/gas/mips/r6-branch-constraints.l new file mode 100644 index 00000000000..819a09a8a06 --- /dev/null +++ b/gas/testsuite/gas/mips/r6-branch-constraints.l @@ -0,0 +1,25 @@ +.*: Assembler messages: +.*:2: Error: invalid operands `blezc \$0,.' +.*:3: Error: the source register must not be \$0 `bgezc \$0,.' +.*:4: Error: invalid operands `bgtzc \$0,.' +.*:5: Error: the source register must not be \$0 `bltzc \$0,.' +.*:6: Error: invalid operands `beqzc \$0,.' +.*:7: Error: invalid operands `bnezc \$0,.' +.*:8: Error: invalid operands `bgec \$0,\$2,.' +.*:9: Error: invalid operands `bgec \$2,\$0,.' +.*:10: Error: invalid operands `bgec \$2,\$2,.' +.*:11: Error: invalid operands `bgeuc \$0,\$2,.' +.*:12: Error: invalid operands `bgeuc \$2,\$0,.' +.*:13: Error: invalid operands `bgeuc \$2,\$2,.' +.*:14: Error: invalid operands `bltc \$0,\$2,.' +.*:15: Error: invalid operands `bltc \$2,\$0,.' +.*:16: Error: invalid operands `bltc \$2,\$2,.' +.*:17: Error: invalid operands `bltuc \$0,\$2,.' +.*:18: Error: invalid operands `bltuc \$2,\$0,.' +.*:19: Error: invalid operands `bltuc \$2,\$2,.' +.*:20: Error: invalid operands `beqc \$0,\$2,.' +.*:21: Error: invalid operands `beqc \$2,\$0,.' +.*:22: Error: invalid operands `beqc \$2,\$2,.' +.*:23: Error: invalid operands `bnec \$0,\$2,.' +.*:24: Error: invalid operands `bnec \$2,\$0,.' +.*:25: Error: invalid operands `bnec \$2,\$2,.' diff --git a/gas/testsuite/gas/mips/r6-branch-constraints.s b/gas/testsuite/gas/mips/r6-branch-constraints.s new file mode 100644 index 00000000000..62ca893b2c4 --- /dev/null +++ b/gas/testsuite/gas/mips/r6-branch-constraints.s @@ -0,0 +1,25 @@ + .text + blezc $0,. + bgezc $0,. + bgtzc $0,. + bltzc $0,. + beqzc $0,. + bnezc $0,. + bgec $0,$2,. + bgec $2,$0,. + bgec $2,$2,. + bgeuc $0,$2,. + bgeuc $2,$0,. + bgeuc $2,$2,. + bltc $0,$2,. + bltc $2,$0,. + bltc $2,$2,. + bltuc $0,$2,. + bltuc $2,$0,. + bltuc $2,$2,. + beqc $0,$2,. + beqc $2,$0,. + beqc $2,$2,. + bnec $0,$2,. + bnec $2,$0,. + bnec $2,$2,. diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 7608570116e..17a5367c74d 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2015-03-13 Andrew Bennett + + * mips-opc.c (decode_mips_operand): Fix constraint issues + with u and y operands. + 2015-03-13 Andrew Bennett * mips-opc.c (mips_builtin_opcodes): Add evp and dvp instructions. diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c index f43f9f5bbf3..a0b0e26988f 100644 --- a/opcodes/mips-opc.c +++ b/opcodes/mips-opc.c @@ -48,11 +48,11 @@ decode_mips_operand (const char *p) case 'd': SPECIAL (0, 0, REPEAT_DEST_REG); case 's': SPECIAL (5, 21, NON_ZERO_REG); case 't': SPECIAL (5, 16, NON_ZERO_REG); - case 'u': PREV_CHECK (5, 16, TRUE, FALSE, FALSE, TRUE); + case 'u': PREV_CHECK (5, 16, TRUE, FALSE, FALSE, FALSE); case 'v': PREV_CHECK (5, 16, TRUE, TRUE, FALSE, FALSE); case 'w': PREV_CHECK (5, 16, FALSE, TRUE, TRUE, TRUE); case 'x': PREV_CHECK (5, 21, TRUE, FALSE, FALSE, TRUE); - case 'y': PREV_CHECK (5, 21, FALSE, TRUE, TRUE, FALSE); + case 'y': PREV_CHECK (5, 21, FALSE, TRUE, FALSE, FALSE); case 'A': PCREL (19, 0, TRUE, 2, 2, FALSE, FALSE); case 'B': PCREL (18, 0, TRUE, 3, 3, FALSE, FALSE); } -- 2.30.2