aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMingjie Xing <mingjie.xing@gmail.com>2011-01-11 07:22:09 +0000
committerMingjie Xing <mingjie.xing@gmail.com>2011-01-11 07:22:09 +0000
commitc95354ed1373286584d5729f3c0ce97cded6fbce (patch)
tree902dc5eb658c1799a50183eadc15e306557a9c5d
parent0d7a18f740233546470b92af36ebb116405bc810 (diff)
downloadfsf-binutils-gdb-c95354ed1373286584d5729f3c0ce97cded6fbce.zip
fsf-binutils-gdb-c95354ed1373286584d5729f3c0ce97cded6fbce.tar.gz
fsf-binutils-gdb-c95354ed1373286584d5729f3c0ce97cded6fbce.tar.bz2
Take unadjusted offset for loongson3a specific instructions.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-mips.c17
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/mips/loongson-3a-2.d8
-rw-r--r--gas/testsuite/gas/mips/loongson-3a-2.s8
-rw-r--r--opcodes/ChangeLog5
-rw-r--r--opcodes/mips-dis.c3
7 files changed, 38 insertions, 13 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 2318483..449aa73 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-11 Mingjie Xing <mingjie.xing@gmail.com>
+
+ * config/tc-mips.c (mips_ip): Update error messages. Take an
+ unadjusted offset for "+c" argument.
+
2011-01-10 Nick Clifton <nickc@redhat.com>
* config/tc-i386.c (x86_elf_abi): Only define for targets that use
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index ee9b276..ae37e02 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -9321,7 +9321,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
if (imm_expr.X_add_number < min_range
|| imm_expr.X_add_number > max_range)
{
- as_bad (_("immediate not in range %ld..%ld (%ld)"),
+ as_bad (_("Offset not in range %ld..%ld (%ld)"),
(long) min_range, (long) max_range,
(long) imm_expr.X_add_number);
}
@@ -9338,7 +9338,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
if (imm_expr.X_add_number < min_range
|| imm_expr.X_add_number > max_range)
{
- as_bad (_("immediate not in range %ld..%ld (%ld)"),
+ as_bad (_("Offset not in range %ld..%ld (%ld)"),
(long) min_range, (long) max_range,
(long) imm_expr.X_add_number);
}
@@ -9352,14 +9352,23 @@ mips_ip (char *str, struct mips_cl_insn *ip)
check_absolute_expr (ip, &imm_expr);
min_range = -((OP_MASK_OFFSET_C + 1) >> 1);
max_range = ((OP_MASK_OFFSET_C + 1) >> 1) - 1;
+ /* We check the offset range before adjusted. */
+ min_range <<= 4;
+ max_range <<= 4;
if (imm_expr.X_add_number < min_range
|| imm_expr.X_add_number > max_range)
{
- as_bad (_("immediate not in range %ld..%ld (%ld)"),
+ as_bad (_("Offset not in range %ld..%ld (%ld)"),
(long) min_range, (long) max_range,
(long) imm_expr.X_add_number);
}
- INSERT_OPERAND (OFFSET_C, *ip, imm_expr.X_add_number);
+ if (imm_expr.X_add_number & 0xf)
+ {
+ as_bad (_("Offset not 16 bytes alignment (%ld)"),
+ (long) imm_expr.X_add_number);
+ }
+ /* Right shift 4 bits to adjust the offset operand. */
+ INSERT_OPERAND (OFFSET_C, *ip, imm_expr.X_add_number >> 4);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index d28da8d..e63bd65 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-11 Mingjie Xing <mingjie.xing@gmail.com>
+
+ * mips/loongson-3a-2.s, mips/loongson-3a-2.d: Use the real offset
+ value in assembly.
+
2011-01-10 Nathan Sidwell <nathan@codesourcery.com>
Glauber de Oliveira Costa <glommer@gmail.com>
diff --git a/gas/testsuite/gas/mips/loongson-3a-2.d b/gas/testsuite/gas/mips/loongson-3a-2.d
index 4029a60..32fea2e 100644
--- a/gas/testsuite/gas/mips/loongson-3a-2.d
+++ b/gas/testsuite/gas/mips/loongson-3a-2.d
@@ -57,9 +57,9 @@ Disassembly of section .text:
.*: d8912c07 gsldxc1 \$f17,-128\(\$4,\$5\)
.*: f8d23bfe gsswxc1 \$f18,127\(\$6,\$7\)
.*: f9134c07 gssdxc1 \$f19,-128\(\$8,\$9\)
-.*: c98b3fea gslq \$10,\$11,255\(\$12\)
-.*: e9ee402d gssq \$13,\$14,-256\(\$15\)
-.*: ca15bff4 gslqc1 \$f20,\$f21,255\(\$16\)
-.*: ea37c036 gssqc1 \$f22,\$f23,-256\(\$17\)
+.*: c98b3fea gslq \$10,\$11,4080\(\$12\)
+.*: e9ee402d gssq \$13,\$14,-4096\(\$15\)
+.*: ca15bff4 gslqc1 \$f20,\$f21,4080\(\$16\)
+.*: ea37c036 gssqc1 \$f22,\$f23,-4096\(\$17\)
#pass
diff --git a/gas/testsuite/gas/mips/loongson-3a-2.s b/gas/testsuite/gas/mips/loongson-3a-2.s
index 16a38c9..c296b06 100644
--- a/gas/testsuite/gas/mips/loongson-3a-2.s
+++ b/gas/testsuite/gas/mips/loongson-3a-2.s
@@ -58,8 +58,8 @@
gsswxc1 $f18,127($6,$7)
gssdxc1 $f19,-128($8,$9)
- gslq $10,$11,255($12)
- gssq $13,$14,-256($15)
- gslqc1 $f20,$f21,255($16)
- gssqc1 $f22,$f23,-256($17)
+ gslq $10,$11,4080($12)
+ gssq $13,$14,-4096($15)
+ gslqc1 $f20,$f21,4080($16)
+ gssqc1 $f22,$f23,-4096($17)
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index f7b2fa9..a863510 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-11 Mingjie Xing <mingjie.xing@gmail.com>
+
+ * mips-dis.c (print_insn_args): Adjust the value to print the real
+ offset for "+c" argument.
+
2011-01-10 Nick Clifton <nickc@redhat.com>
* po/da.po: Updated Danish translation.
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index ca65d71..c38a7e1 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -991,7 +991,8 @@ print_insn_args (const char *d,
delta = (l >> OP_SH_OFFSET_C) & OP_MASK_OFFSET_C;
if (delta & 0x100)
delta |= ~OP_MASK_OFFSET_C;
- (*info->fprintf_func) (info->stream, "%d", delta);
+ /* Left shift 4 bits to print the real offset. */
+ (*info->fprintf_func) (info->stream, "%d", delta << 4);
break;
case 'z':