From db2ed2e0b910376fd2bf4c2bc5d626315c4269c6 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 17 Aug 2015 09:05:42 +0930 Subject: [PATCH] Rationalize ARM .align * gas/config/tc-arm.c (s_align): Delete. (md_pseudo_table): Use s_align_ptwo for "align". * gas/config/tc-arm.h (TC_ALIGN_ZERO_IS_DEFAULT): Define. * read.c (s_align): Modify for TC_ALIGN_ZERO_IS_DEFAULT. --- gas/ChangeLog | 7 +++++++ gas/config/tc-arm.c | 49 +-------------------------------------------- gas/config/tc-arm.h | 1 + gas/read.c | 5 +++++ 4 files changed, 14 insertions(+), 48 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index ecf77fb311..4064fc15a3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2015-08-17 Alan Modra + + * gas/config/tc-arm.c (s_align): Delete. + (md_pseudo_table): Use s_align_ptwo for "align". + * gas/config/tc-arm.h (TC_ALIGN_ZERO_IS_DEFAULT): Define. + * read.c (s_align): Modify for TC_ALIGN_ZERO_IS_DEFAULT. + 2015-08-13 Alan Modra * expr.c (operand): Rewrite handling of operands starting with "0f". diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index fabcf8082f..e54b81be3f 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -2969,53 +2969,6 @@ s_syntax (int unused ATTRIBUTE_UNUSED) /* Directives: sectioning and alignment. */ -/* Same as s_align_ptwo but align 0 => align 2. */ - -static void -s_align (int unused ATTRIBUTE_UNUSED) -{ - int temp; - bfd_boolean fill_p; - long temp_fill; - long max_alignment = 15; - - temp = get_absolute_expression (); - if (temp > max_alignment) - as_bad (_("alignment too large: %d assumed"), temp = max_alignment); - else if (temp < 0) - { - as_bad (_("alignment negative. 0 assumed.")); - temp = 0; - } - - if (*input_line_pointer == ',') - { - input_line_pointer++; - temp_fill = get_absolute_expression (); - fill_p = TRUE; - } - else - { - fill_p = FALSE; - temp_fill = 0; - } - - if (!temp) - temp = 2; - - /* Only make a frag if we HAVE to. */ - if (temp && !need_pass_2) - { - if (!fill_p && subseg_text_p (now_seg)) - frag_align_code (temp, 0); - else - frag_align (temp, (int) temp_fill, 0); - } - demand_empty_rest_of_line (); - - record_alignment (now_seg, temp); -} - static void s_bss (int ignore ATTRIBUTE_UNUSED) { @@ -4691,7 +4644,7 @@ const pseudo_typeS md_pseudo_table[] = { "qn", s_qn, 0 }, { "unreq", s_unreq, 0 }, { "bss", s_bss, 0 }, - { "align", s_align, 0 }, + { "align", s_align_ptwo, 2 }, { "arm", s_arm, 0 }, { "thumb", s_thumb, 0 }, { "code", s_code, 0 }, diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h index 22e9027a89..98038beaf1 100644 --- a/gas/config/tc-arm.h +++ b/gas/config/tc-arm.h @@ -245,6 +245,7 @@ arm_min (int am_p1, int am_p2) #define TC_FRAG_TYPE struct arm_frag_type /* NOTE: max_chars is a local variable from frag_var / frag_variant. */ #define TC_FRAG_INIT(fragp) arm_init_frag (fragp, max_chars) +#define TC_ALIGN_ZERO_IS_DEFAULT 1 #define HANDLE_ALIGN(fragp) arm_handle_align (fragp) #define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \ ((!(FRCHAIN)->frch_next && subseg_text_p (SEG)) \ diff --git a/gas/read.c b/gas/read.c index 816c255bf2..000c75b10d 100644 --- a/gas/read.c +++ b/gas/read.c @@ -1471,6 +1471,11 @@ s_align (int arg, int bytes_p) { align = get_absolute_expression (); SKIP_WHITESPACE (); + +#ifdef TC_ALIGN_ZERO_IS_DEFAULT + if (arg > 0 && align == 0) + align = arg; +#endif } if (bytes_p)