* config/tc-i386.c (md_apply_fix3): Change handling of PCREL reloc
authorIan Lance Taylor <ian@airs.com>
Tue, 20 Oct 1998 14:51:09 +0000 (14:51 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 20 Oct 1998 14:51:09 +0000 (14:51 +0000)
  for BFD_ASSEMBLER to only change value when COFF if TE_PE.

gas/ChangeLog
gas/config/tc-i386.c

index 6ca130691c15770ac5aa864834be9c0b6e38947e..11a9721acbe20f6afb72b6e464f9b690b61c3312 100644 (file)
@@ -1,3 +1,8 @@
+Tue Oct 20 10:49:42 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/tc-i386.c (md_apply_fix3): Change handling of PCREL reloc
+       for BFD_ASSEMBLER to only change value when COFF if TE_PE.
+
 Mon Oct 19 20:20:42 1998  Catherine Moore  <clm@cygnus.com>
 
         * config/tc-sh.h (obj_fix_adjustable):  Define.
index 49d2a7fa76a270b6b3304cb4472ad581b179c253..b4f5c76561c19f46e0f2bfffefa3cb32be4d0f88 100644 (file)
@@ -1511,6 +1511,28 @@ md_assemble (line)
          }
       }
 
+    if (i.tm.base_opcode == AMD_3DNOW_OPCODE)
+      {
+       /* These AMD specific instructions have an opcode suffix which
+          is coded in the same place as an 8-bit immediate field
+          would be.  Here we fake an 8-bit immediate operand from the
+          opcode suffix stored in tm.extension_opcode.
+          Note: this "opcode suffix" has nothing to do with what gas
+          calls opcode suffixes.  gas opcode suffixes should really
+          be called instruction mnemonic suffixes.  FIXME maybe.  */
+
+       expressionS *exp;
+
+       assert(i.imm_operands == 0 && i.operands <= 2);
+
+       exp = &im_expressions[i.imm_operands++];
+       i.imms[i.operands] = exp;
+       i.types[i.operands++] = Imm8;
+       exp->X_op = O_constant;
+       exp->X_add_number = i.tm.extension_opcode;
+       i.tm.extension_opcode = None;
+      }
+
     /* For insns with operands there are more diddles to do to the opcode. */
     if (i.operands)
       {
@@ -2283,7 +2305,7 @@ i386_operand (operand_string)
       op_string = end_op;
       if (is_space_char (*op_string))
        ++op_string;
-      if (*op_string)
+      if (*op_string == ':')
        {
          if (r->reg_type & (SReg2 | SReg3))
            {
@@ -3090,7 +3112,10 @@ md_apply_fix3 (fixP, valp, seg)
     {
 #ifndef OBJ_AOUT
       if (OUTPUT_FLAVOR == bfd_target_elf_flavour
-         || OUTPUT_FLAVOR == bfd_target_coff_flavour)
+#ifdef TE_PE
+         || OUTPUT_FLAVOR == bfd_target_coff_flavour
+#endif
+         )
        value += fixP->fx_where + fixP->fx_frag->fr_address;
 #endif
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)