diff options
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-riscv.c | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/riscv/auipc-parsing.l | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/riscv/auipc-parsing.s | 3 |
4 files changed, 16 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 7de5247..d460265 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2019-05-30 Jim Wilson <jimw@sifive.com> + + * config/tc-riscv.c (riscv_ip) <'u'>: Move O_constant check inside if + statement. Delete O_symbol and O_constant check after if statement. + * testsuite/gas/riscv/auipc-parsing.s: Test lui with missing %hi. + * testsuite/gas/riscv/auipc-parsing.l: Update. + 2019-05-28 H.J. Lu <hongjiu.lu@intel.com> PR gas/24625 diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 99b007f..f0c1f4c 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1952,9 +1952,11 @@ branch: case 'u': /* Upper 20 bits. */ p = percent_op_utype; - if (!my_getSmallExpression (imm_expr, imm_reloc, s, p) - && imm_expr->X_op == O_constant) + if (!my_getSmallExpression (imm_expr, imm_reloc, s, p)) { + if (imm_expr->X_op != O_constant) + break; + if (imm_expr->X_add_number < 0 || imm_expr->X_add_number >= (signed)RISCV_BIGIMM_REACH) as_bad (_("lui expression not in range 0..1048575")); @@ -1962,9 +1964,6 @@ branch: *imm_reloc = BFD_RELOC_RISCV_HI20; imm_expr->X_add_number <<= RISCV_IMM_BITS; } - /* The 'u' format specifier must be a symbol or a constant. */ - if (imm_expr->X_op != O_symbol && imm_expr->X_op != O_constant) - break; s = expr_end; continue; diff --git a/gas/testsuite/gas/riscv/auipc-parsing.l b/gas/testsuite/gas/riscv/auipc-parsing.l index df41e0e..54eedcb 100644 --- a/gas/testsuite/gas/riscv/auipc-parsing.l +++ b/gas/testsuite/gas/riscv/auipc-parsing.l @@ -1,3 +1,5 @@ .*: Assembler messages: .*: Error: illegal operands `auipc x8,x9' .*: Error: illegal operands `lui x10,x11' +.*: Error: illegal operands `auipc x12,symbol' +.*: Error: illegal operands `lui x13,symbol' diff --git a/gas/testsuite/gas/riscv/auipc-parsing.s b/gas/testsuite/gas/riscv/auipc-parsing.s index f580869..7af4df9 100644 --- a/gas/testsuite/gas/riscv/auipc-parsing.s +++ b/gas/testsuite/gas/riscv/auipc-parsing.s @@ -1,3 +1,6 @@ # Don't accept a register for 'u' operands. auipc x8,x9 lui x10,x11 +# Don't accept a symbol without %hi() for 'u' operands. + auipc x12,symbol + lui x13,symbol |