diff options
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-sh.c | 5 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/basic.exp | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/sign-extension.d | 11 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/sign-extension.s | 3 |
6 files changed, 32 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 70d17e4..2de1fe8 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -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". diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index 24a2954..4bc5ee6 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -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) diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 529e323..ab53121 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -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. diff --git a/gas/testsuite/gas/sh/basic.exp b/gas/testsuite/gas/sh/basic.exp index ffa8952..ab4e190 100644 --- a/gas/testsuite/gas/sh/basic.exp +++ b/gas/testsuite/gas/sh/basic.exp @@ -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 index 0000000..eeae7bd --- /dev/null +++ b/gas/testsuite/gas/sh/sign-extension.d @@ -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 index 0000000..73d0167 --- /dev/null +++ b/gas/testsuite/gas/sh/sign-extension.s @@ -0,0 +1,3 @@ + .align 2 +foo: + mov #0xfffffff0, r0 |