+2013-07-08 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/tc-mips.c (mips_ip): Unconditionally parse an expression
+ for 'A' and assume that the constant has been elided if the result
+ is an O_register.
+
2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
* config/tc-mips.c (gprel16_reloc_p): New function.
continue;
case 'A':
- /* If we expect a base register, check whether there is only
- a single bracketed expression left. If so, it must be the
- base register and the constant must be zero. */
- if (args[1] == '(' && *s == '(' && strchr (s + 1, '(') == 0)
+ my_getSmallExpression (&offset_expr, offset_reloc, s);
+ if (offset_expr.X_op == O_register)
{
+ /* Assume that the offset has been elided and that what
+ we saw was a base register. The match will fail later
+ if that assumption turns out to be wrong. */
offset_expr.X_op = O_constant;
offset_expr.X_add_number = 0;
}
else
{
- my_getSmallExpression (&offset_expr, offset_reloc, s);
normalize_address_expr (&offset_expr);
s = expr_end;
}
+2013-07-08 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gas/mips/la.s, gas/mips/la.d, gas/mips/la-svr4pic.d,
+ gas/mips/la-xgot.d: Add tests for bracketed addresses.
+
2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
* gas/mips/ldstla-32.d: Avoid "lui at,0x0" sequences for
[0-9a-f]+ <[^>]*> addiu at,at,-22131
[ ]*[0-9a-f]+: R_MIPS_LO16 .bss
[0-9a-f]+ <[^>]*> addu a0,a0,at
+[0-9a-f]+ <[^>]*> addu a0,a0,a1
+[0-9a-f]+ <[^>]*> addiu a0,a1,0
+[0-9a-f]+ <[^>]*> lui a0,0x12
+[0-9a-f]+ <[^>]*> ori a0,a0,0x3456
+[0-9a-f]+ <[^>]*> lui a0,0x12
+[0-9a-f]+ <[^>]*> ori a0,a0,0x3456
+[0-9a-f]+ <[^>]*> addu a0,a0,a1
+[0-9a-f]+ <[^>]*> lw a0,0\(gp\)
+[ ]*[0-9a-f]+: R_MIPS_GOT16 big_external_data_label
+[0-9a-f]+ <[^>]*> lw a0,0\(gp\)
+[ ]*[0-9a-f]+: R_MIPS_GOT16 big_external_data_label
+[0-9a-f]+ <[^>]*> nop
[0-9a-f]+ <[^>]*> addu a0,a0,a1
...
[0-9a-f]+ <[^>]*> addiu at,at,-22131
[ ]*[0-9a-f]+: R_MIPS_LO16 .bss
[0-9a-f]+ <[^>]*> addu a0,a0,at
+[0-9a-f]+ <[^>]*> addu a0,a0,a1
+[0-9a-f]+ <[^>]*> addiu a0,a1,0
+[0-9a-f]+ <[^>]*> lui a0,0x12
+[0-9a-f]+ <[^>]*> ori a0,a0,0x3456
+[0-9a-f]+ <[^>]*> lui a0,0x12
+[0-9a-f]+ <[^>]*> ori a0,a0,0x3456
+[0-9a-f]+ <[^>]*> addu a0,a0,a1
+[0-9a-f]+ <[^>]*> lui a0,0x0
+[ ]*[0-9a-f]+: R_MIPS_GOT_HI16 big_external_data_label
+[0-9a-f]+ <[^>]*> addu a0,a0,gp
+[0-9a-f]+ <[^>]*> lw a0,0\(a0\)
+[ ]*[0-9a-f]+: R_MIPS_GOT_LO16 big_external_data_label
+[0-9a-f]+ <[^>]*> lui a0,0x0
+[ ]*[0-9a-f]+: R_MIPS_GOT_HI16 big_external_data_label
+[0-9a-f]+ <[^>]*> addu a0,a0,gp
+[0-9a-f]+ <[^>]*> lw a0,0\(a0\)
+[ ]*[0-9a-f]+: R_MIPS_GOT_LO16 big_external_data_label
+[0-9a-f]+ <[^>]*> nop
[0-9a-f]+ <[^>]*> addu a0,a0,a1
...
[ ]*[0-9a-f]+: [A-Z0-9_]*HI[A-Z0-9_]* .sbss.*
[0-9a-f]+ <[^>]*> addiu a0,a0,[-0-9]+
[ ]*[0-9a-f]+: [A-Z0-9_]*LO[A-Z0-9_]* .sbss.*
+[0-9a-f]+ <[^>]*> addu a0,a0,a1
+[0-9a-f]+ <[^>]*> addiu a0,a1,0
+[0-9a-f]+ <[^>]*> lui a0,0x12
+[0-9a-f]+ <[^>]*> ori a0,a0,0x3456
+[0-9a-f]+ <[^>]*> lui a0,0x12
+[0-9a-f]+ <[^>]*> ori a0,a0,0x3456
+[0-9a-f]+ <[^>]*> addu a0,a0,a1
+[0-9a-f]+ <[^>]*> lui a0,0x0
+[ ]*[0-9a-f]+: [A-Z0-9_]*HI[A-Z0-9_]* big_external_data_label
+[0-9a-f]+ <[^>]*> addiu a0,a0,0
+[ ]*[0-9a-f]+: [A-Z0-9_]*LO[A-Z0-9_]* big_external_data_label
+[0-9a-f]+ <[^>]*> lui a0,0x0
+[ ]*[0-9a-f]+: [A-Z0-9_]*HI[A-Z0-9_]* big_external_data_label
+[0-9a-f]+ <[^>]*> addiu a0,a0,0
+[ ]*[0-9a-f]+: [A-Z0-9_]*LO[A-Z0-9_]* big_external_data_label
[0-9a-f]+ <[^>]*> addu a0,a0,a1
...
la $4,small_external_common+0x1a5a5($5)
la $4,big_local_common+0x1a5a5($5)
la $4,small_local_common+0x1a5a5($5)
+ la $4,($5)
+ la $4,(0x123456)
+ la $4,(0x123456)($5)
+ la $4,(big_external_data_label)
+ la $4,(big_external_data_label)($5)
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
.space 8