gas/
* 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. gas/testsuite/ * gas/mips/la.s, gas/mips/la.d, gas/mips/la-svr4pic.d, gas/mips/la-xgot.d: Add tests for bracketed addresses.
This commit is contained in:
parent
93161bef4c
commit
0cbbe1b85e
7 changed files with 66 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
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>
|
2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* config/tc-mips.c (gprel16_reloc_p): New function.
|
* config/tc-mips.c (gprel16_reloc_p): New function.
|
||||||
|
|
|
@ -12702,17 +12702,17 @@ mips_ip (char *str, struct mips_cl_insn *ip)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'A':
|
case 'A':
|
||||||
/* If we expect a base register, check whether there is only
|
my_getSmallExpression (&offset_expr, offset_reloc, s);
|
||||||
a single bracketed expression left. If so, it must be the
|
if (offset_expr.X_op == O_register)
|
||||||
base register and the constant must be zero. */
|
|
||||||
if (args[1] == '(' && *s == '(' && strchr (s + 1, '(') == 0)
|
|
||||||
{
|
{
|
||||||
|
/* 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_op = O_constant;
|
||||||
offset_expr.X_add_number = 0;
|
offset_expr.X_add_number = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my_getSmallExpression (&offset_expr, offset_reloc, s);
|
|
||||||
normalize_address_expr (&offset_expr);
|
normalize_address_expr (&offset_expr);
|
||||||
s = expr_end;
|
s = expr_end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
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>
|
2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* gas/mips/ldstla-32.d: Avoid "lui at,0x0" sequences for
|
* gas/mips/ldstla-32.d: Avoid "lui at,0x0" sequences for
|
||||||
|
|
|
@ -452,5 +452,17 @@ Disassembly of section .text:
|
||||||
[0-9a-f]+ <[^>]*> addiu at,at,-22131
|
[0-9a-f]+ <[^>]*> addiu at,at,-22131
|
||||||
[ ]*[0-9a-f]+: R_MIPS_LO16 .bss
|
[ ]*[0-9a-f]+: R_MIPS_LO16 .bss
|
||||||
[0-9a-f]+ <[^>]*> addu a0,a0,at
|
[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]+ <[^>]*> addu a0,a0,a1
|
||||||
...
|
...
|
||||||
|
|
|
@ -596,5 +596,23 @@ Disassembly of section .text:
|
||||||
[0-9a-f]+ <[^>]*> addiu at,at,-22131
|
[0-9a-f]+ <[^>]*> addiu at,at,-22131
|
||||||
[ ]*[0-9a-f]+: R_MIPS_LO16 .bss
|
[ ]*[0-9a-f]+: R_MIPS_LO16 .bss
|
||||||
[0-9a-f]+ <[^>]*> addu a0,a0,at
|
[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]+ <[^>]*> addu a0,a0,a1
|
||||||
...
|
...
|
||||||
|
|
|
@ -377,5 +377,20 @@ Disassembly of section .text:
|
||||||
[ ]*[0-9a-f]+: [A-Z0-9_]*HI[A-Z0-9_]* .sbss.*
|
[ ]*[0-9a-f]+: [A-Z0-9_]*HI[A-Z0-9_]* .sbss.*
|
||||||
[0-9a-f]+ <[^>]*> addiu a0,a0,[-0-9]+
|
[0-9a-f]+ <[^>]*> addiu a0,a0,[-0-9]+
|
||||||
[ ]*[0-9a-f]+: [A-Z0-9_]*LO[A-Z0-9_]* .sbss.*
|
[ ]*[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
|
[0-9a-f]+ <[^>]*> addu a0,a0,a1
|
||||||
...
|
...
|
||||||
|
|
|
@ -106,6 +106,11 @@ data_label:
|
||||||
la $4,small_external_common+0x1a5a5($5)
|
la $4,small_external_common+0x1a5a5($5)
|
||||||
la $4,big_local_common+0x1a5a5($5)
|
la $4,big_local_common+0x1a5a5($5)
|
||||||
la $4,small_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 ...
|
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||||
.space 8
|
.space 8
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue