OSDN Git Service

* config/tc-sh.c (md_apply_fix): Extend sign of the offset value
authorkkojima <kkojima>
Sat, 29 Aug 2009 10:38:32 +0000 (10:38 +0000)
committerkkojima <kkojima>
Sat, 29 Aug 2009 10:38:32 +0000 (10:38 +0000)
for 64-bit host.
* gas/sh/sign-extension.d: New file.
* gas/sh/sign-extension.s: New file.
* gas/sh/basic.exp: Run new test.

gas/ChangeLog
gas/config/tc-sh.c
gas/testsuite/ChangeLog
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/sign-extension.d [new file with mode: 0644]
gas/testsuite/gas/sh/sign-extension.s [new file with mode: 0644]

index 70d17e4..2de1fe8 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-29  Matt Fleming  <matt@console-pimps.org>
+
+       * config/tc-sh.c (md_apply_fix): Extend sign of the offset value
+       for 64-bit host.
+
 2009-08-28  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/tc-i386.c (cpu_arch): Use PROCESSOR_L1OM on "l1om".
index 24a2954..4bc5ee6 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-sh.c -- Assemble code for the Renesas / SuperH SH
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007  Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -4183,6 +4183,9 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
        val = ((val >> shift)
               | ((long) -1 & ~ ((long) -1 >> shift)));
     }
+
+  /* Extend sign for 64-bit host.  */
+  val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000;
   if (max != 0 && (val < min || val > max))
     as_bad_where (fixP->fx_file, fixP->fx_line, _("offset out of range"));
   else if (max != 0)
index 529e323..ab53121 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-29  Matt Fleming  <matt@console-pimps.org>
+
+       * gas/sh/sign-extension.d: New file.
+       * gas/sh/sign-extension.s: New file.
+       * gas/sh/basic.exp: Run new test.
+
 2009-08-28  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gas/i386/l1om.d: Check elf64-l1om format.
index ffa8952..ab4e190 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1995, 1996, 1997, 2002, 2003, 2004, 2007
+# Copyright (C) 1995, 1996, 1997, 2002, 2003, 2004, 2007, 2009
 # Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
@@ -169,6 +169,8 @@ if [istarget sh*-*-*] then {
        run_dump_test "reg-prefix"
 
        run_dump_test "too_large"
+
+       run_dump_test "sign-extension"
     }
 }
 
diff --git a/gas/testsuite/gas/sh/sign-extension.d b/gas/testsuite/gas/sh/sign-extension.d
new file mode 100644 (file)
index 0000000..eeae7bd
--- /dev/null
@@ -0,0 +1,11 @@
+#as: -little
+#objdump: -drj.text
+#name: Sign-extended immediate
+
+.*:     file format .*sh.*
+
+Disassembly of section \.text:
+
+00000000 <foo>:
+   0:  f0 e0           mov     #-16,r0
+   2:  09 00           nop     
diff --git a/gas/testsuite/gas/sh/sign-extension.s b/gas/testsuite/gas/sh/sign-extension.s
new file mode 100644 (file)
index 0000000..73d0167
--- /dev/null
@@ -0,0 +1,3 @@
+       .align 2
+foo:
+       mov #0xfffffff0, r0