* config/tc-xc16x.c (md_cgen_lookup_reloc): Ensure fix_size is set
authorDoug Evans <dje@google.com>
Mon, 19 Oct 2009 15:27:39 +0000 (15:27 +0000)
committerDoug Evans <dje@google.com>
Mon, 19 Oct 2009 15:27:39 +0000 (15:27 +0000)
correctly for all 16 bit relocs.  Return BFD_RELOC_NONE if reloc
isn't recognized, not BFD_RELOC_XC16X_SOF.

testsuite:
* gas/xc16x/shlrol.s: Specify constant shift amount.
* gas/xc16x/xc16x.exp (do_xc16x_shlrol): Update expected output.

gas/ChangeLog
gas/config/tc-xc16x.c
gas/testsuite/ChangeLog
gas/testsuite/gas/xc16x/shlrol.s
gas/testsuite/gas/xc16x/xc16x.exp

index 31c5d13d3a678a3ec9efae9ae7463aac15b1e68f..5d86ca1caa4f6264b844b600f5e9ed364496a041 100644 (file)
@@ -1,3 +1,9 @@
+2009-10-19  Doug Evans  <dje@sebabeach.org>
+
+       * config/tc-xc16x.c (md_cgen_lookup_reloc): Ensure fix_size is set
+       correctly for all 16 bit relocs.  Return BFD_RELOC_NONE if reloc
+       isn't recognized, not BFD_RELOC_XC16X_SOF.
+
 2009-10-18  Alan Modra  <amodra@bigpond.net.au>
 
        * as.h (know): Don't define as empty.
index 85b7c0fe806e8e494201fb9bfded63b5454cc27c..c628d866239aa2275f48a2b84a2cac2d54834589 100644 (file)
@@ -154,38 +154,46 @@ md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED,
   switch (operand->type)
     {
     case XC16X_OPERAND_REL:
+      /* ??? Adjust size?  */
       fixP->fx_where += 1;
       fixP->fx_pcrel = 1;
       return BFD_RELOC_8_PCREL;
 
     case XC16X_OPERAND_CADDR:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_16;
 
     case XC16X_OPERAND_UIMM7:
+      /* ??? Adjust size?  */
       fixP->fx_where += 1;
       fixP->fx_pcrel = 1;
       return BFD_RELOC_8_PCREL;
 
     case XC16X_OPERAND_UIMM16:
     case XC16X_OPERAND_MEMORY:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_16;
 
     case XC16X_OPERAND_UPOF16:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_XC16X_POF;
 
     case XC16X_OPERAND_UPAG16:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_XC16X_PAG;
 
     case XC16X_OPERAND_USEG8:
+      /* ??? This is an 8 bit field, why the 16 bit reloc?  */
       fixP->fx_where += 1;
       return BFD_RELOC_XC16X_SEG;
 
     case XC16X_OPERAND_USEG16:
     case  XC16X_OPERAND_USOF16:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_XC16X_SOF;
 
@@ -193,8 +201,7 @@ md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED,
       break;
     }
 
-  fixP->fx_where += 2;
-  return BFD_RELOC_XC16X_SOF;
+  return BFD_RELOC_NONE;
 }
 
 /* Write a value out to the object file, using the appropriate endianness.  */
index 1e7b8782dce566cb708cb0817767f8a54bbeb54f..2c8da327ca87adf713dd17d9348a41035a88e099 100644 (file)
@@ -1,3 +1,8 @@
+2009-10-19  Doug Evans  <dje@sebabeach.org>
+
+       * gas/xc16x/shlrol.s: Specify constant shift amount.
+       * gas/xc16x/xc16x.exp (do_xc16x_shlrol): Update expected output.
+
 2009-10-18  Vincent Rivière  <vincent.riviere@freesbee.fr>
 
        * gas/all/weakref1u.d: Exclude more aout targets.
index 04e6591d69e0e7c727c4e42438b781ee1b4c0c17..801bab6ed4ff448d006194d3e329f4f374619493 100644 (file)
@@ -3,12 +3,12 @@
 xc16x_shlrol:  
 
        shl   r0,r1
-       shl   r0,#a
+       shl   r0,#4
        shr   r0,r1
-       shr   r0,#a
+       shr   r0,#4
        rol    r0,r1
-       rol    r0,#a
+       rol    r0,#4
        ror    r0,r1
-       ror    r0,#a
+       ror    r0,#4
        ashr r0,r1
-       ashr r0,#a
+       ashr r0,#4
index c53e65750567e4a0fb0a572621679b3c27c18e0c..8f42efce494e2a49dba89ad12ef791203fd144ec 100644 (file)
@@ -557,15 +557,15 @@ proc do_xc16x_shlrol {} {
     while 1 {
        expect {
            -re " +\[0-9\]+ 0000 4C01\[^\n\]*\n"   { set x [expr $x+1] }
-           -re " +\[0-9\]+ 0002 5C00\[^\n\]*\n"   { set x [expr $x+1] }
+           -re " +\[0-9\]+ 0002 5C40\[^\n\]*\n"   { set x [expr $x+1] }
            -re " +\[0-9\]+ 0004 6C01\[^\n\]*\n"   { set x [expr $x+1] }
-           -re " +\[0-9\]+ 0006 7C00\[^\n\]*\n"   { set x [expr $x+1] }
+           -re " +\[0-9\]+ 0006 7C40\[^\n\]*\n"   { set x [expr $x+1] }
            -re " +\[0-9\]+ 0008 0C01\[^\n\]*\n"   { set x [expr $x+1] }
-           -re " +\[0-9\]+ 000a 1C00\[^\n\]*\n"   { set x [expr $x+1] }
+           -re " +\[0-9\]+ 000a 1C40\[^\n\]*\n"   { set x [expr $x+1] }
            -re " +\[0-9\]+ 000c 2C01\[^\n\]*\n"   { set x [expr $x+1] }
-           -re " +\[0-9\]+ 000e 3C00\[^\n\]*\n"   { set x [expr $x+1] }
+           -re " +\[0-9\]+ 000e 3C40\[^\n\]*\n"   { set x [expr $x+1] }
            -re " +\[0-9\]+ 0010 AC01\[^\n\]*\n"   { set x [expr $x+1] }
-           -re " +\[0-9\]+ 0012 BC00\[^\n\]*\n"   { set x [expr $x+1] }
+           -re " +\[0-9\]+ 0012 BC40\[^\n\]*\n"   { set x [expr $x+1] }
            timeout                             { perror "timeout\n; break }
            eof                                 { break }
        }