From: Yufeng Zhang Date: Thu, 6 Dec 2012 16:28:15 +0000 (+0000) Subject: gas/ X-Git-Tag: binutils-2_23_2~151 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=630e8905b1fec8b6cdaef1f7cc16b878207bfa1c;p=thirdparty%2Fbinutils-gdb.git gas/ 2012-12-06 Yufeng Zhang * config/tc-aarch64.c (exp_has_bignum_p): Remove. (my_get_expression): Not get rid of bignums. (s_ltorg): Increase the range of 'align'. (programmer_friendly_fixup): Allow bignum expression. gas/testsuite/ 2012-12-06 Yufeng Zhang * gas/aarch64/programmer-friendly.s: Add tests for LDR literal with the auto-generation of literal in pool. * gas/aarch64/programmer-friendly.d: Update. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index f4f834d8522..e76a2e91adc 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2012-12-06 Yufeng Zhang + + * config/tc-aarch64.c (exp_has_bignum_p): Remove. + (my_get_expression): Not get rid of bignums. + (s_ltorg): Increase the range of 'align'. + (programmer_friendly_fixup): Allow bignum expression. + 2012-11-20 H.J. Lu PR gas/14859 diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index a83a62ec5f6..b62bd7a788b 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -484,25 +484,6 @@ skip_past_char (char **str, char c) /* Arithmetic expressions (possibly involving symbols). */ -/* Return TRUE if anything in the expression *SP is a bignum. */ - -static bfd_boolean -exp_has_bignum_p (symbolS * sp) -{ - if (symbol_get_value_expression (sp)->X_op == O_big) - return TRUE; - - if (symbol_get_value_expression (sp)->X_add_symbol) - { - return (exp_has_bignum_p (symbol_get_value_expression (sp)->X_add_symbol) - || (symbol_get_value_expression (sp)->X_op_symbol - && exp_has_bignum_p (symbol_get_value_expression (sp)-> - X_op_symbol))); - } - - return FALSE; -} - static bfd_boolean in_my_get_expression_p = FALSE; /* Third argument to my_get_expression. */ @@ -571,23 +552,6 @@ my_get_expression (expressionS * ep, char **str, int prefix_mode, (void) seg; #endif - /* Get rid of any bignums now, so that we don't generate an error for which - we can't establish a line number later on. Big numbers are never valid - in instructions, which is where this routine is always called. */ - if (ep->X_op == O_big - || (ep->X_add_symbol - && (exp_has_bignum_p (ep->X_add_symbol) - || (ep->X_op_symbol && exp_has_bignum_p (ep->X_op_symbol))))) - { - if (prefix_present_p && error_p ()) - set_fatal_syntax_error (_("invalid constant")); - else - set_first_syntax_error (_("invalid constant")); - *str = input_line_pointer; - input_line_pointer = save_in; - return FALSE; - } - *str = input_line_pointer; input_line_pointer = save_in; return TRUE; @@ -1730,7 +1694,7 @@ s_ltorg (int ignored ATTRIBUTE_UNUSED) char sym_name[20]; int align; - for (align = 2; align < 4; align++) + for (align = 2; align <= 4; align++) { int size = 1 << align; @@ -5228,6 +5192,7 @@ programmer_friendly_fixup (aarch64_instruction *instr) if (op == OP_LDRSW_LIT) size = 4; if (instr->reloc.exp.X_op != O_constant + && instr->reloc.exp.X_op != O_big && instr->reloc.exp.X_op != O_symbol) { record_operand_error (opcode, 1, diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 123619ba095..fffd8dd983c 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-12-06 Yufeng Zhang + + * gas/aarch64/programmer-friendly.s: Add tests for LDR literal with + the auto-generation of literal in pool. + * gas/aarch64/programmer-friendly.d: Update. + 2012-11-27 Roland McGrath * lib/gas-defs.exp (run_dump_test): If as options include diff --git a/gas/testsuite/gas/aarch64/programmer-friendly.d b/gas/testsuite/gas/aarch64/programmer-friendly.d index 90cea5eef81..9e9f2d57bde 100644 --- a/gas/testsuite/gas/aarch64/programmer-friendly.d +++ b/gas/testsuite/gas/aarch64/programmer-friendly.d @@ -6,7 +6,7 @@ Disassembly of section \.text: 0000000000000000 <.*>: 0: 4f03e420 movi v0\.16b, #0x61 - 4: 98000181 ldrsw x1, 34 <\.text\+0x34> + 4: 98000241 ldrsw x1, 4c <\.text\+0x4c> 8: 98000007 ldrsw x7, 0 <\.text> 8: R_AARCH64_LD_PREL_LO19 \.data\+0x4 c: fa42a02a ccmp x1, x2, #0xa, ge @@ -19,4 +19,18 @@ Disassembly of section \.text: 28: ab2083e0 adds x0, sp, w0, sxtb 2c: ab20a7e0 adds x0, sp, w0, sxth #1 30: ab20cbe0 adds x0, sp, w0, sxtw #2 - 34: deadbeef \.word 0xdeadbeef + 34: 9c000160 ldr q0, 60 <\.text\+0x60> + 38: 5c0000c0 ldr d0, 50 <\.text\+0x50> + 3c: 580000a0 ldr x0, 50 <\.text\+0x50> + 40: 1c000060 ldr s0, 4c <\.text\+0x4c> + 44: 18000040 ldr w0, 4c <\.text\+0x4c> + 48: 58000080 ldr x0, 58 <\.text\+0x58> + 4c: deadbeef \.word 0xdeadbeef + 50: .* \.word 0x.* + 54: .* \.word 0x.* + ... + 58: R_AARCH64_ABS64 \.data + 60: .* \.word 0x.* + 64: .* \.word 0x.* + 68: .* \.word 0x.* + 6c: .* \.word 0x.* diff --git a/gas/testsuite/gas/aarch64/programmer-friendly.s b/gas/testsuite/gas/aarch64/programmer-friendly.s index f39ca5da901..9dd93fe9c8d 100644 --- a/gas/testsuite/gas/aarch64/programmer-friendly.s +++ b/gas/testsuite/gas/aarch64/programmer-friendly.s @@ -49,6 +49,17 @@ u16_lable: adds x0, sp, x0, uxtb #4 adds x0, sp, x0, uxth #4 adds x0, sp, x0, uxtw #4 + adds x0, sp, x0, sxtb #0 adds x0, sp, x0, sxth #1 adds x0, sp, x0, sxtw #2 + + // More tests on + // LDR Wt, label | =value + // Find more comment above. + ldr q0, =0xdeadcafebeefbabe0123456789abcedf + ldr d0, =0xfebeefbabe012345 + ldr x0, =0xfebeefbabe012345 + ldr s0, =0xdeadbeef + ldr w0, =0xdeadbeef + ldr x0, =u16_lable