1 /* tc-d10v.c -- Assembler code for the Mitsubishi D10V
2 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
5 This file is part of GAS, the GNU Assembler.
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
24 #include "safe-ctype.h"
26 #include "opcode/d10v.h"
29 const char comment_chars[] = ";";
30 const char line_comment_chars[] = "#";
31 const char line_separator_chars[] = "";
32 const char *md_shortopts = "O";
33 const char EXP_CHARS[] = "eE";
34 const char FLT_CHARS[] = "dD";
38 #define AT_WORD_P(X) ((X)->X_op == O_right_shift \
39 && (X)->X_op_symbol != NULL \
40 && symbol_constant_p ((X)->X_op_symbol) \
41 && S_GET_VALUE ((X)->X_op_symbol) == AT_WORD_RIGHT_SHIFT)
42 #define AT_WORD_RIGHT_SHIFT 2
45 #define MAX_INSN_FIXUPS (5)
52 bfd_reloc_code_real_type reloc;
55 typedef struct _fixups
58 struct d10v_fixup fix[MAX_INSN_FIXUPS];
62 static Fixups FixUps[2];
63 static Fixups *fixups;
65 static int do_not_ignore_hash = 0;
67 typedef int packing_type;
68 #define PACK_UNSPEC (0) /* Packing order not specified. */
69 #define PACK_PARALLEL (1) /* "||" */
70 #define PACK_LEFT_RIGHT (2) /* "->" */
71 #define PACK_RIGHT_LEFT (3) /* "<-" */
72 static packing_type etype = PACK_UNSPEC; /* Used by d10v_cleanup. */
74 /* True if instruction swapping warnings should be inhibited.
76 static boolean flag_warn_suppress_instructionswap;
78 /* True if instruction packing should be performed when --gstabs is specified.
79 --gstabs-packing, --no-gstabs-packing. */
80 static boolean flag_allow_gstabs_packing = 1;
82 /* Local functions. */
83 static int reg_name_search PARAMS ((char *name));
84 static int register_name PARAMS ((expressionS *expressionP));
85 static int check_range PARAMS ((unsigned long num, int bits, int flags));
86 static int postfix PARAMS ((char *p));
87 static bfd_reloc_code_real_type get_reloc PARAMS ((struct d10v_operand *op));
88 static int get_operands PARAMS ((expressionS exp[]));
89 static struct d10v_opcode *find_opcode PARAMS ((struct d10v_opcode *opcode, expressionS ops[]));
90 static unsigned long build_insn PARAMS ((struct d10v_opcode *opcode, expressionS *opers, unsigned long insn));
91 static void write_long PARAMS ((unsigned long insn, Fixups *fx));
92 static void write_1_short PARAMS ((struct d10v_opcode *opcode, unsigned long insn, Fixups *fx));
93 static int write_2_short PARAMS ((struct d10v_opcode *opcode1, unsigned long insn1,
94 struct d10v_opcode *opcode2, unsigned long insn2, packing_type exec_type, Fixups *fx));
95 static unsigned long do_assemble PARAMS ((char *str, struct d10v_opcode **opcode));
96 static unsigned long d10v_insert_operand PARAMS (( unsigned long insn, int op_type,
97 offsetT value, int left, fixS *fix));
98 static int parallel_ok PARAMS ((struct d10v_opcode *opcode1, unsigned long insn1,
99 struct d10v_opcode *opcode2, unsigned long insn2,
100 packing_type exec_type));
102 static void check_resource_conflict PARAMS ((struct d10v_opcode *opcode1,
104 struct d10v_opcode *opcode2,
105 unsigned long insn2));
107 static symbolS * find_symbol_matching_register PARAMS ((expressionS *));
109 struct option md_longopts[] =
111 #define OPTION_NOWARNSWAP (OPTION_MD_BASE)
112 {"nowarnswap", no_argument, NULL, OPTION_NOWARNSWAP},
113 #define OPTION_GSTABSPACKING (OPTION_MD_BASE + 1)
114 {"gstabspacking", no_argument, NULL, OPTION_GSTABSPACKING},
115 {"gstabs-packing", no_argument, NULL, OPTION_GSTABSPACKING},
116 #define OPTION_NOGSTABSPACKING (OPTION_MD_BASE + 2)
117 {"nogstabspacking", no_argument, NULL, OPTION_NOGSTABSPACKING},
118 {"no-gstabs-packing", no_argument, NULL, OPTION_NOGSTABSPACKING},
119 {NULL, no_argument, NULL, 0}
122 size_t md_longopts_size = sizeof (md_longopts);
124 static void d10v_dot_word PARAMS ((int));
126 /* The target specific pseudo-ops which we support. */
127 const pseudo_typeS md_pseudo_table[] =
129 { "word", d10v_dot_word, 2 },
133 /* Opcode hash table. */
134 static struct hash_control *d10v_hash;
136 /* Do a binary search of the d10v_predefined_registers array to see if
137 NAME is a valid regiter name. Return the register number from the
138 array on success, or -1 on failure. */
141 reg_name_search (name)
144 int middle, low, high;
148 high = d10v_reg_name_cnt () - 1;
152 middle = (low + high) / 2;
153 cmp = strcasecmp (name, d10v_predefined_registers[middle].name);
159 return d10v_predefined_registers[middle].value;
165 /* Check the string at input_line_pointer
166 to see if it is a valid register name. */
169 register_name (expressionP)
170 expressionS *expressionP;
173 char c, *p = input_line_pointer;
176 && *p != '\n' && *p != '\r' && *p != ',' && *p != ' ' && *p != ')')
183 /* Look to see if it's in the register table. */
184 reg_number = reg_name_search (input_line_pointer);
187 expressionP->X_op = O_register;
188 /* Temporarily store a pointer to the string here. */
189 expressionP->X_op_symbol = (symbolS *) input_line_pointer;
190 expressionP->X_add_number = reg_number;
191 input_line_pointer = p;
200 check_range (num, bits, flags)
208 /* Don't bother checking 16-bit values. */
212 if (flags & OPERAND_SHIFT)
214 /* All special shift operands are unsigned and <= 16.
215 We allow 0 for now. */
222 if (flags & OPERAND_SIGNED)
224 /* Signed 3-bit integers are restricted to the (-2, 3) range. */
225 if (flags & RESTRICTED_NUM3)
227 if ((long) num < -2 || (long) num > 3)
232 max = (1 << (bits - 1)) - 1;
233 min = - (1 << (bits - 1));
234 if (((long) num > max) || ((long) num < min))
240 max = (1 << bits) - 1;
242 if (((long) num > max) || ((long) num < min))
249 md_show_usage (stream)
252 fprintf (stream, _("D10V options:\n\
253 -O Optimize. Will do some operations in parallel.\n\
254 --gstabs-packing Pack adjacent short instructions together even\n\
255 when --gstabs is specified. On by default.\n\
256 --no-gstabs-packing If --gstabs is specified, do not pack adjacent\n\
257 instructions together.\n"));
261 md_parse_option (c, arg)
263 char *arg ATTRIBUTE_UNUSED;
268 /* Optimize. Will attempt to parallelize operations. */
271 case OPTION_NOWARNSWAP:
272 flag_warn_suppress_instructionswap = 1;
274 case OPTION_GSTABSPACKING:
275 flag_allow_gstabs_packing = 1;
277 case OPTION_NOGSTABSPACKING:
278 flag_allow_gstabs_packing = 0;
287 md_undefined_symbol (name)
288 char *name ATTRIBUTE_UNUSED;
293 /* Turn a string in input_line_pointer into a floating point constant
294 of type TYPE, and store the appropriate bytes in *LITP. The number
295 of LITTLENUMS emitted is stored in *SIZEP. An error message is
296 returned, or NULL on OK. */
299 md_atof (type, litP, sizeP)
305 LITTLENUM_TYPE words[4];
319 return _("bad call to md_atof");
322 t = atof_ieee (input_line_pointer, type, words);
324 input_line_pointer = t;
328 for (i = 0; i < prec; i++)
330 md_number_to_chars (litP, (valueT) words[i], 2);
337 md_convert_frag (abfd, sec, fragP)
338 bfd *abfd ATTRIBUTE_UNUSED;
339 asection *sec ATTRIBUTE_UNUSED;
340 fragS *fragP ATTRIBUTE_UNUSED;
346 md_section_align (seg, addr)
350 int align = bfd_get_section_alignment (stdoutput, seg);
351 return ((addr + (1 << align) - 1) & (-1 << align));
357 char *prev_name = "";
358 struct d10v_opcode *opcode;
359 d10v_hash = hash_new ();
361 /* Insert unique names into hash table. The D10v instruction set
362 has many identical opcode names that have different opcodes based
363 on the operands. This hash table then provides a quick index to
364 the first opcode with a particular name in the opcode table. */
366 for (opcode = (struct d10v_opcode *) d10v_opcodes; opcode->name; opcode++)
368 if (strcmp (prev_name, opcode->name))
370 prev_name = (char *) opcode->name;
371 hash_insert (d10v_hash, opcode->name, (char *) opcode);
376 FixUps[0].next = &FixUps[1];
377 FixUps[1].next = &FixUps[0];
380 /* Remove the postincrement or postdecrement operator ( '+' or '-' )
381 from an expression. */
387 while (*p != '-' && *p != '+')
389 if (*p == 0 || *p == '\n' || *p == '\r')
408 static bfd_reloc_code_real_type
410 struct d10v_operand *op;
417 if (op->flags & OPERAND_ADDR)
420 return (BFD_RELOC_D10V_10_PCREL_R);
422 return (BFD_RELOC_D10V_18_PCREL);
425 return (BFD_RELOC_16);
428 /* Parse a string of operands. Return an array of expressions. */
434 char *p = input_line_pointer;
441 while (*p == ' ' || *p == '\t' || *p == ',')
443 if (*p == 0 || *p == '\n' || *p == '\r')
451 exp[numops].X_op = O_absent;
455 exp[numops].X_add_number = OPERAND_ATPAR;
460 exp[numops].X_add_number = OPERAND_ATMINUS;
464 exp[numops].X_add_number = OPERAND_ATSIGN;
468 exp[numops].X_op = O_absent;
469 exp[numops].X_add_number = OPERAND_PLUS;
480 /* Just skip the trailing paren. */
485 input_line_pointer = p;
487 /* Check to see if it might be a register name. */
488 if (!register_name (&exp[numops]))
490 /* Parse as an expression. */
493 /* Any expression that involves the indirect addressing
494 cannot also involve immediate addressing. Therefore
495 the use of the hash character is illegal. */
496 int save = do_not_ignore_hash;
497 do_not_ignore_hash = 1;
499 expression (&exp[numops]);
501 do_not_ignore_hash = save;
504 expression (&exp[numops]);
507 if (strncasecmp (input_line_pointer, "@word", 5) == 0)
509 input_line_pointer += 5;
510 if (exp[numops].X_op == O_register)
512 /* If it looked like a register name but was followed by
513 "@word" then it was really a symbol, so change it to
515 exp[numops].X_op = O_symbol;
516 exp[numops].X_add_symbol =
517 symbol_find_or_make ((char *) exp[numops].X_op_symbol);
520 /* Check for identifier@word+constant. */
521 if (*input_line_pointer == '-' || *input_line_pointer == '+')
524 expression (&new_exp);
525 exp[numops].X_add_number = new_exp.X_add_number;
528 /* Convert expr into a right shift by AT_WORD_RIGHT_SHIFT. */
531 memset (&new_exp, 0, sizeof new_exp);
532 new_exp.X_add_number = AT_WORD_RIGHT_SHIFT;
533 new_exp.X_op = O_constant;
534 new_exp.X_unsigned = 1;
535 exp[numops].X_op_symbol = make_expr_symbol (&new_exp);
536 exp[numops].X_op = O_right_shift;
539 know (AT_WORD_P (&exp[numops]));
542 if (exp[numops].X_op == O_illegal)
543 as_bad (_("illegal operand"));
544 else if (exp[numops].X_op == O_absent)
545 as_bad (_("missing operand"));
548 p = input_line_pointer;
553 case -1: /* Postdecrement mode. */
554 exp[numops].X_op = O_absent;
555 exp[numops++].X_add_number = OPERAND_MINUS;
557 case 1: /* Postincrement mode. */
558 exp[numops].X_op = O_absent;
559 exp[numops++].X_add_number = OPERAND_PLUS;
563 exp[numops].X_op = 0;
568 d10v_insert_operand (insn, op_type, value, left, fix)
577 shift = d10v_operands[op_type].shift;
581 bits = d10v_operands[op_type].bits;
583 /* Truncate to the proper number of bits. */
584 if (check_range (value, bits, d10v_operands[op_type].flags))
585 as_bad_where (fix->fx_file, fix->fx_line,
586 _("operand out of range: %ld"), (long) value);
588 value &= 0x7FFFFFFF >> (31 - bits);
589 insn |= (value << shift);
594 /* Take a pointer to the opcode entry in the opcode table and the
595 array of operand expressions. Return the instruction. */
598 build_insn (opcode, opers, insn)
599 struct d10v_opcode *opcode;
603 int i, bits, shift, flags, format;
604 unsigned long number;
606 /* The insn argument is only used for the DIVS kludge. */
611 insn = opcode->opcode;
612 format = opcode->format;
615 for (i = 0; opcode->operands[i]; i++)
617 flags = d10v_operands[opcode->operands[i]].flags;
618 bits = d10v_operands[opcode->operands[i]].bits;
619 shift = d10v_operands[opcode->operands[i]].shift;
620 number = opers[i].X_add_number;
622 if (flags & OPERAND_REG)
624 number &= REGISTER_MASK;
625 if (format == LONG_L)
629 if (opers[i].X_op != O_register && opers[i].X_op != O_constant)
631 /* Now create a fixup. */
633 if (fixups->fc >= MAX_INSN_FIXUPS)
634 as_fatal (_("too many fixups"));
636 if (AT_WORD_P (&opers[i]))
638 /* Reconize XXX>>1+N aka XXX@word+N as special (AT_WORD). */
639 fixups->fix[fixups->fc].reloc = BFD_RELOC_D10V_18;
640 opers[i].X_op = O_symbol;
641 opers[i].X_op_symbol = NULL; /* Should free it. */
642 /* number is left shifted by AT_WORD_RIGHT_SHIFT so
643 that, it is aligned with the symbol's value. Later,
644 BFD_RELOC_D10V_18 will right shift (symbol_value +
646 number <<= AT_WORD_RIGHT_SHIFT;
647 opers[i].X_add_number = number;
650 fixups->fix[fixups->fc].reloc =
651 get_reloc ((struct d10v_operand *) &d10v_operands[opcode->operands[i]]);
653 if (fixups->fix[fixups->fc].reloc == BFD_RELOC_16 ||
654 fixups->fix[fixups->fc].reloc == BFD_RELOC_D10V_18)
655 fixups->fix[fixups->fc].size = 2;
657 fixups->fix[fixups->fc].size = 4;
659 fixups->fix[fixups->fc].exp = opers[i];
660 fixups->fix[fixups->fc].operand = opcode->operands[i];
661 fixups->fix[fixups->fc].pcrel =
662 (flags & OPERAND_ADDR) ? true : false;
666 /* Truncate to the proper number of bits. */
667 if ((opers[i].X_op == O_constant) && check_range (number, bits, flags))
668 as_bad (_("operand out of range: %lu"), number);
669 number &= 0x7FFFFFFF >> (31 - bits);
670 insn = insn | (number << shift);
673 /* kludge: for DIVS, we need to put the operands in twice on the second
674 pass, format is changed to LONG_R to force the second set of operands
675 to not be shifted over 15. */
676 if ((opcode->opcode == OPCODE_DIVS) && (format == LONG_L))
677 insn = build_insn (opcode, opers, insn);
682 /* Write out a long form instruction. */
685 write_long (insn, fx)
690 char *f = frag_more (4);
693 number_to_chars_bigendian (f, insn, 4);
695 for (i = 0; i < fx->fc; i++)
697 if (fx->fix[i].reloc)
699 where = f - frag_now->fr_literal;
700 if (fx->fix[i].size == 2)
703 if (fx->fix[i].reloc == BFD_RELOC_D10V_18)
704 fx->fix[i].operand |= 4096;
706 fix_new_exp (frag_now,
711 fx->fix[i].operand|2048);
717 /* Write out a short form instruction by itself. */
720 write_1_short (opcode, insn, fx)
721 struct d10v_opcode *opcode;
725 char *f = frag_more (4);
728 if (opcode->exec_type & PARONLY)
729 as_fatal (_("Instruction must be executed in parallel with another instruction."));
731 /* The other container needs to be NOP.
732 According to 4.3.1: for FM=00, sub-instructions performed only by IU
733 cannot be encoded in L-container. */
734 if (opcode->unit == IU)
735 insn |= FM00 | (NOP << 15); /* Right container. */
737 insn = FM00 | (insn << 15) | NOP; /* Left container. */
739 number_to_chars_bigendian (f, insn, 4);
740 for (i = 0; i < fx->fc; i++)
742 if (fx->fix[i].reloc)
744 where = f - frag_now->fr_literal;
745 if (fx->fix[i].size == 2)
748 if (fx->fix[i].reloc == BFD_RELOC_D10V_18)
749 fx->fix[i].operand |= 4096;
751 /* If it's an R reloc, we may have to switch it to L. */
752 if ((fx->fix[i].reloc == BFD_RELOC_D10V_10_PCREL_R)
753 && (opcode->unit != IU))
754 fx->fix[i].operand |= 1024;
756 fix_new_exp (frag_now,
761 fx->fix[i].operand|2048);
767 /* Expects two short instructions.
768 If possible, writes out both as a single packed instruction.
769 Otherwise, writes out the first one, packed with a NOP.
770 Returns number of instructions not written out. */
773 write_2_short (opcode1, insn1, opcode2, insn2, exec_type, fx)
774 struct d10v_opcode *opcode1, *opcode2;
775 unsigned long insn1, insn2;
776 packing_type exec_type;
783 if ((exec_type != PACK_PARALLEL)
784 && ((opcode1->exec_type & PARONLY) || (opcode2->exec_type & PARONLY)))
785 as_fatal (_("Instruction must be executed in parallel"));
787 if ((opcode1->format & LONG_OPCODE) || (opcode2->format & LONG_OPCODE))
788 as_fatal (_("Long instructions may not be combined."));
792 case PACK_UNSPEC: /* Order not specified. */
793 if (opcode1->exec_type & ALONE)
795 /* Case of a short branch on a separate GAS line. Pack with NOP. */
796 write_1_short (opcode1, insn1, fx->next);
800 && parallel_ok (opcode1, insn1, opcode2, insn2, exec_type))
803 if (opcode1->unit == IU)
804 insn = FM00 | (insn2 << 15) | insn1;
805 else if (opcode2->unit == MU)
806 insn = FM00 | (insn2 << 15) | insn1;
808 insn = FM00 | (insn1 << 15) | insn2;
810 else if (opcode1->unit == IU)
811 /* Reverse sequential with IU opcode1 on right and done first. */
812 insn = FM10 | (insn2 << 15) | insn1;
814 /* Sequential with non-IU opcode1 on left and done first. */
815 insn = FM01 | (insn1 << 15) | insn2;
819 if (opcode1->exec_type & SEQ || opcode2->exec_type & SEQ)
821 (_("One of these instructions may not be executed in parallel."));
822 if (opcode1->unit == IU)
824 if (opcode2->unit == IU)
825 as_fatal (_("Two IU instructions may not be executed in parallel"));
826 if (!flag_warn_suppress_instructionswap)
827 as_warn (_("Swapping instruction order"));
828 insn = FM00 | (insn2 << 15) | insn1;
830 else if (opcode2->unit == MU)
832 if (opcode1->unit == MU)
833 as_fatal (_("Two MU instructions may not be executed in parallel"));
834 if (!flag_warn_suppress_instructionswap)
835 as_warn (_("Swapping instruction order"));
836 insn = FM00 | (insn2 << 15) | insn1;
839 insn = FM00 | (insn1 << 15) | insn2;
840 check_resource_conflict (opcode1, insn1, opcode2, insn2);
843 case PACK_LEFT_RIGHT:
844 if (opcode1->unit != IU)
845 insn = FM01 | (insn1 << 15) | insn2;
846 else if (opcode2->unit == MU || opcode2->unit == EITHER)
848 if (!flag_warn_suppress_instructionswap)
849 as_warn (_("Swapping instruction order"));
850 insn = FM10 | (insn2 << 15) | insn1;
853 as_fatal (_("IU instruction may not be in the left container"));
854 if (opcode1->exec_type & ALONE)
855 as_warn (_("Instruction in R container is squashed by flow control instruction in L container."));
858 case PACK_RIGHT_LEFT:
859 if (opcode2->unit != MU)
860 insn = FM10 | (insn1 << 15) | insn2;
861 else if (opcode1->unit == IU || opcode1->unit == EITHER)
863 if (!flag_warn_suppress_instructionswap)
864 as_warn (_("Swapping instruction order"));
865 insn = FM01 | (insn2 << 15) | insn1;
868 as_fatal (_("MU instruction may not be in the right container"));
869 if (opcode2->exec_type & ALONE)
870 as_warn (_("Instruction in R container is squashed by flow control instruction in L container."));
874 as_fatal (_("unknown execution type passed to write_2_short()"));
878 number_to_chars_bigendian (f, insn, 4);
880 /* Process fixup chains. fx refers to insn2 when j == 0, and to
881 insn1 when j == 1. Yes, it's reversed. */
883 for (j = 0; j < 2; j++)
885 for (i = 0; i < fx->fc; i++)
887 if (fx->fix[i].reloc)
889 where = f - frag_now->fr_literal;
890 if (fx->fix[i].size == 2)
893 if (fx->fix[i].reloc == BFD_RELOC_D10V_10_PCREL_R
894 /* A BFD_RELOC_D10V_10_PCREL_R relocation applied to
895 the instruction in the L container has to be
896 adjusted to BDF_RELOC_D10V_10_PCREL_L. When
897 j==0, we're processing insn2's operands, so we
898 want to mark the operand if insn2 is *not* in the
899 R container. When j==1, we're processing insn1's
900 operands, so we want to mark the operand if insn2
901 *is* in the R container. Note that, if two
902 instructions are identical, we're never going to
903 swap them, so the test is safe. */
904 && j == ((insn & 0x7fff) == insn2))
905 fx->fix[i].operand |= 1024;
907 if (fx->fix[i].reloc == BFD_RELOC_D10V_18)
908 fx->fix[i].operand |= 4096;
910 fix_new_exp (frag_now,
915 fx->fix[i].operand|2048);
924 /* Check 2 instructions and determine if they can be safely
925 executed in parallel. Return 1 if they can be. */
928 parallel_ok (op1, insn1, op2, insn2, exec_type)
929 struct d10v_opcode *op1, *op2;
930 unsigned long insn1, insn2;
931 packing_type exec_type;
933 int i, j, flags, mask, shift, regno;
934 unsigned long ins, mod[2], used[2];
935 struct d10v_opcode *op;
937 if ((op1->exec_type & SEQ) != 0 || (op2->exec_type & SEQ) != 0
938 || (op1->exec_type & PAR) == 0 || (op2->exec_type & PAR) == 0
939 || (op1->unit == BOTH) || (op2->unit == BOTH)
940 || (op1->unit == IU && op2->unit == IU)
941 || (op1->unit == MU && op2->unit == MU))
944 /* If this is auto parallization, and either instruction is a branch,
946 if (exec_type == PACK_UNSPEC
947 && (op1->exec_type & (ALONE | BRANCH)
948 || op2->exec_type & (ALONE | BRANCH)))
951 /* The idea here is to create two sets of bitmasks (mod and used)
952 which indicate which registers are modified or used by each
953 instruction. The operation can only be done in parallel if
954 instruction 1 and instruction 2 modify different registers, and
955 the first instruction does not modify registers that the second
956 is using (The second instruction can modify registers that the
957 first is using as they are only written back after the first
958 instruction has completed). Accesses to control registers, PSW,
959 and memory are treated as accesses to a single register. So if
960 both instructions write memory or if the first instruction writes
961 memory and the second reads, then they cannot be done in
962 parallel. Likewise, if the first instruction mucks with the psw
963 and the second reads the PSW (which includes C, F0, and F1), then
964 they cannot operate safely in parallel. */
966 /* The bitmasks (mod and used) look like this (bit 31 = MSB).
973 for (j = 0; j < 2; j++)
985 mod[j] = used[j] = 0;
986 if (op->exec_type & BRANCH_LINK)
989 for (i = 0; op->operands[i]; i++)
991 flags = d10v_operands[op->operands[i]].flags;
992 shift = d10v_operands[op->operands[i]].shift;
993 mask = 0x7FFFFFFF >> (31 - d10v_operands[op->operands[i]].bits);
994 if (flags & OPERAND_REG)
996 regno = (ins >> shift) & mask;
997 if (flags & (OPERAND_ACC0 | OPERAND_ACC1))
999 else if (flags & OPERAND_CONTROL) /* mvtc or mvfc. */
1006 else if (flags & (OPERAND_FFLAG | OPERAND_CFLAG))
1009 if (flags & OPERAND_DEST)
1011 mod[j] |= 1 << regno;
1012 if (flags & OPERAND_EVEN)
1013 mod[j] |= 1 << (regno + 1);
1017 used[j] |= 1 << regno;
1018 if (flags & OPERAND_EVEN)
1019 used[j] |= 1 << (regno + 1);
1021 /* Auto inc/dec also modifies the register. */
1022 if (op->operands[i + 1] != 0
1023 && (d10v_operands[op->operands[i + 1]].flags
1024 & (OPERAND_PLUS | OPERAND_MINUS)) != 0)
1025 mod[j] |= 1 << regno;
1028 else if (flags & OPERAND_ATMINUS)
1030 /* SP implicitly used/modified. */
1035 if (op->exec_type & RMEM)
1037 else if (op->exec_type & WMEM)
1039 else if (op->exec_type & RF0)
1041 else if (op->exec_type & WF0)
1043 else if (op->exec_type & WCAR)
1046 if ((mod[0] & mod[1]) == 0 && (mod[0] & used[1]) == 0)
1051 /* Determine if there are any resource conflicts among two manually
1052 parallelized instructions. Some of this was lifted from parallel_ok. */
1055 check_resource_conflict (op1, insn1, op2, insn2)
1056 struct d10v_opcode *op1, *op2;
1057 unsigned long insn1, insn2;
1059 int i, j, flags, mask, shift, regno;
1060 unsigned long ins, mod[2], used[2];
1061 struct d10v_opcode *op;
1063 if ((op1->exec_type & SEQ)
1064 || ! ((op1->exec_type & PAR) || (op1->exec_type & PARONLY)))
1066 as_warn (_("packing conflict: %s must dispatch sequentially"),
1071 if ((op2->exec_type & SEQ)
1072 || ! ((op2->exec_type & PAR) || (op2->exec_type & PARONLY)))
1074 as_warn (_("packing conflict: %s must dispatch sequentially"),
1079 /* The idea here is to create two sets of bitmasks (mod and used)
1080 which indicate which registers are modified or used by each
1081 instruction. The operation can only be done in parallel if
1082 instruction 1 and instruction 2 modify different registers, and
1083 the first instruction does not modify registers that the second
1084 is using (The second instruction can modify registers that the
1085 first is using as they are only written back after the first
1086 instruction has completed). Accesses to control registers
1087 and memory are treated as accesses to a single register. So if
1088 both instructions write memory or if the first instruction writes
1089 memory and the second reads, then they cannot be done in
1090 parallel. We treat reads to the PSW (which includes C, F0, and F1)
1091 in isolation. So simultaneously writing C and F0 in two different
1092 sub-instructions is permitted. */
1094 /* The bitmasks (mod and used) look like this (bit 31 = MSB).
1103 for (j = 0; j < 2; j++)
1115 mod[j] = used[j] = 0;
1116 if (op->exec_type & BRANCH_LINK)
1119 for (i = 0; op->operands[i]; i++)
1121 flags = d10v_operands[op->operands[i]].flags;
1122 shift = d10v_operands[op->operands[i]].shift;
1123 mask = 0x7FFFFFFF >> (31 - d10v_operands[op->operands[i]].bits);
1124 if (flags & OPERAND_REG)
1126 regno = (ins >> shift) & mask;
1127 if (flags & (OPERAND_ACC0 | OPERAND_ACC1))
1129 else if (flags & OPERAND_CONTROL) /* mvtc or mvfc */
1136 else if (flags & OPERAND_FFLAG)
1138 else if (flags & OPERAND_CFLAG)
1141 if ( flags & OPERAND_DEST )
1143 mod[j] |= 1 << regno;
1144 if (flags & OPERAND_EVEN)
1145 mod[j] |= 1 << (regno + 1);
1149 used[j] |= 1 << regno ;
1150 if (flags & OPERAND_EVEN)
1151 used[j] |= 1 << (regno + 1);
1153 /* Auto inc/dec also modifies the register. */
1154 if (op->operands[i+1] != 0
1155 && (d10v_operands[op->operands[i+1]].flags
1156 & (OPERAND_PLUS | OPERAND_MINUS)) != 0)
1157 mod[j] |= 1 << regno;
1160 else if (flags & OPERAND_ATMINUS)
1162 /* SP implicitly used/modified. */
1167 if (op->exec_type & RMEM)
1169 else if (op->exec_type & WMEM)
1171 else if (op->exec_type & RF0)
1173 else if (op->exec_type & WF0)
1175 else if (op->exec_type & WCAR)
1178 if ((mod[0] & mod[1]) == 0)
1183 x = mod[0] & mod[1];
1185 for (j = 0; j <= 15; j++)
1187 as_warn (_("resource conflict (R%d)"), j);
1188 for (j = 16; j <= 17; j++)
1190 as_warn (_("resource conflict (A%d)"), j - 16);
1192 as_warn (_("resource conflict (PSW)"));
1194 as_warn (_("resource conflict (C flag)"));
1196 as_warn (_("resource conflict (F flag)"));
1200 /* This is the main entry point for the machine-dependent assembler.
1201 STR points to a machine-dependent instruction. This function is
1202 supposed to emit the frags/bytes it assembles to. For the D10V, it
1203 mostly handles the special VLIW parsing and packing and leaves the
1204 difficult stuff to do_assemble(). */
1206 static unsigned long prev_insn;
1207 static struct d10v_opcode *prev_opcode = 0;
1208 static subsegT prev_subseg;
1209 static segT prev_seg = 0;;
1215 /* etype is saved extype. For multi-line instructions. */
1217 packing_type extype = PACK_UNSPEC; /* Parallel, etc. */
1219 struct d10v_opcode *opcode;
1223 if (etype == PACK_UNSPEC)
1225 /* Look for the special multiple instruction separators. */
1226 str2 = strstr (str, "||");
1228 extype = PACK_PARALLEL;
1231 str2 = strstr (str, "->");
1233 extype = PACK_LEFT_RIGHT;
1236 str2 = strstr (str, "<-");
1238 extype = PACK_RIGHT_LEFT;
1242 /* str2 points to the separator, if there is one. */
1247 /* If two instructions are present and we already have one saved,
1248 then first write out the saved one. */
1251 /* Assemble first instruction and save it. */
1252 prev_insn = do_assemble (str, &prev_opcode);
1254 prev_subseg = now_subseg;
1255 if (prev_insn == (unsigned long) -1)
1256 as_fatal (_("can't find opcode "));
1257 fixups = fixups->next;
1262 insn = do_assemble (str, &opcode);
1263 if (insn == (unsigned long) -1)
1265 if (extype != PACK_UNSPEC)
1270 as_fatal (_("can't find opcode "));
1273 if (etype != PACK_UNSPEC)
1276 etype = PACK_UNSPEC;
1279 /* If this is a long instruction, write it and any previous short
1281 if (opcode->format & LONG_OPCODE)
1283 if (extype != PACK_UNSPEC)
1284 as_fatal (_("Unable to mix instructions as specified"));
1286 write_long (insn, fixups);
1293 && ((prev_seg != now_seg) || (prev_subseg != now_subseg)))
1297 && (0 == write_2_short (prev_opcode, prev_insn, opcode, insn, extype,
1300 /* No instructions saved. */
1305 if (extype != PACK_UNSPEC)
1306 as_fatal (_("Unable to mix instructions as specified"));
1307 /* Save last instruction so it may be packed on next pass. */
1308 prev_opcode = opcode;
1311 prev_subseg = now_subseg;
1312 fixups = fixups->next;
1316 /* Assemble a single instruction.
1317 Return an opcode, or -1 (an invalid opcode) on error. */
1319 static unsigned long
1320 do_assemble (str, opcode)
1322 struct d10v_opcode **opcode;
1324 unsigned char *op_start, *save;
1325 unsigned char *op_end;
1328 expressionS myops[6];
1331 /* Drop leading whitespace. */
1335 /* Find the opcode end. */
1336 for (op_start = op_end = (unsigned char *) (str);
1339 && !is_end_of_line[*op_end] && *op_end != ' ';
1342 name[nlen] = TOLOWER (op_start[nlen]);
1350 /* Find the first opcode with the proper name. */
1351 *opcode = (struct d10v_opcode *) hash_find (d10v_hash, name);
1352 if (*opcode == NULL)
1353 as_fatal (_("unknown opcode: %s"), name);
1355 save = input_line_pointer;
1356 input_line_pointer = op_end;
1357 *opcode = find_opcode (*opcode, myops);
1360 input_line_pointer = save;
1362 insn = build_insn ((*opcode), myops, 0);
1366 /* Find the symbol which has the same name as the register in exp. */
1369 find_symbol_matching_register (exp)
1374 if (exp->X_op != O_register)
1377 /* Find the name of the register. */
1378 for (i = d10v_reg_name_cnt (); i--;)
1379 if (d10v_predefined_registers[i].value == exp->X_add_number)
1385 /* Now see if a symbol has been defined with the same name. */
1386 return symbol_find (d10v_predefined_registers[i].name);
1389 /* Get a pointer to an entry in the opcode table.
1390 The function must look at all opcodes with the same name and use
1391 the operands to choose the correct opcode. */
1393 static struct d10v_opcode *
1394 find_opcode (opcode, myops)
1395 struct d10v_opcode *opcode;
1396 expressionS myops[];
1399 struct d10v_opcode *next_opcode;
1401 /* Get all the operands and save them as expressions. */
1402 get_operands (myops);
1404 /* Now see if the operand is a fake. If so, find the correct size
1405 instruction, if possible. */
1406 if (opcode->format == OPCODE_FAKE)
1408 int opnum = opcode->operands[0];
1411 if (myops[opnum].X_op == O_register)
1413 myops[opnum].X_op = O_symbol;
1414 myops[opnum].X_add_symbol =
1415 symbol_find_or_make ((char *) myops[opnum].X_op_symbol);
1416 myops[opnum].X_add_number = 0;
1417 myops[opnum].X_op_symbol = NULL;
1420 next_opcode = opcode + 1;
1422 /* If the first operand is supposed to be a register, make sure
1423 we got a valid one. */
1424 flags = d10v_operands[next_opcode->operands[0]].flags;
1425 if (flags & OPERAND_REG)
1427 int X_op = myops[0].X_op;
1428 int num = myops[0].X_add_number;
1430 if (X_op != O_register
1432 & (OPERAND_GPR | OPERAND_ACC0 | OPERAND_ACC1
1433 | OPERAND_FFLAG | OPERAND_CFLAG | OPERAND_CONTROL))
1434 || ((flags & OPERAND_SP) && ! (num & OPERAND_SP)))
1436 as_bad (_("bad opcode or operands"));
1441 if (myops[opnum].X_op == O_constant
1442 || (myops[opnum].X_op == O_symbol
1443 && S_IS_DEFINED (myops[opnum].X_add_symbol)
1444 && (S_GET_SEGMENT (myops[opnum].X_add_symbol) == now_seg)))
1446 for (i = 0; opcode->operands[i + 1]; i++)
1448 int bits = d10v_operands[next_opcode->operands[opnum]].bits;
1449 int flags = d10v_operands[next_opcode->operands[opnum]].flags;
1450 if (flags & OPERAND_ADDR)
1453 if (myops[opnum].X_op == O_constant)
1455 if (!check_range (myops[opnum].X_add_number, bits, flags))
1462 unsigned long current_position;
1463 unsigned long symbol_position;
1464 unsigned long value;
1465 boolean found_symbol;
1467 /* Calculate the address of the current instruction
1468 and the address of the symbol. Do this by summing
1469 the offsets of previous frags until we reach the
1470 frag containing the symbol, and the current frag. */
1471 sym_frag = symbol_get_frag (myops[opnum].X_add_symbol);
1472 found_symbol = false;
1475 obstack_next_free (&frchain_now->frch_obstack)
1476 - frag_now->fr_literal;
1477 symbol_position = S_GET_VALUE (myops[opnum].X_add_symbol);
1479 for (f = frchain_now->frch_root; f; f = f->fr_next)
1481 current_position += f->fr_fix + f->fr_offset;
1484 found_symbol = true;
1487 symbol_position += f->fr_fix + f->fr_offset;
1490 value = symbol_position;
1492 if (flags & OPERAND_ADDR)
1493 value -= current_position;
1495 if (AT_WORD_P (&myops[opnum]))
1500 if (!check_range (value, bits, flags))
1504 else if (!check_range (value, bits, flags))
1510 if (opcode->operands [i + 1] == 0)
1511 as_fatal (_("value out of range"));
1513 opcode = next_opcode;
1517 /* Not a constant, so use a long instruction. */
1524 /* Now search the opcode table table for one with operands
1525 that matches what we've got. */
1529 for (i = 0; opcode->operands[i]; i++)
1531 int flags = d10v_operands[opcode->operands[i]].flags;
1532 int X_op = myops[i].X_op;
1533 int num = myops[i].X_add_number;
1541 if (flags & OPERAND_REG)
1543 if ((X_op != O_register)
1545 & (OPERAND_GPR | OPERAND_ACC0 | OPERAND_ACC1
1546 | OPERAND_FFLAG | OPERAND_CFLAG
1548 || ((flags & OPERAND_SP) && ! (num & OPERAND_SP)))
1555 if (((flags & OPERAND_MINUS) && ((X_op != O_absent) || (num != OPERAND_MINUS))) ||
1556 ((flags & OPERAND_PLUS) && ((X_op != O_absent) || (num != OPERAND_PLUS))) ||
1557 ((flags & OPERAND_ATMINUS) && ((X_op != O_absent) || (num != OPERAND_ATMINUS))) ||
1558 ((flags & OPERAND_ATPAR) && ((X_op != O_absent) || (num != OPERAND_ATPAR))) ||
1559 ((flags & OPERAND_ATSIGN) && ((X_op != O_absent) || ((num != OPERAND_ATSIGN) && (num != OPERAND_ATPAR)))))
1565 /* Unfortunatly, for the indirect operand in instructions such
1566 as ``ldb r1, @(c,r14)'' this function can be passed
1567 X_op == O_register (because 'c' is a valid register name).
1568 However we cannot just ignore the case when X_op == O_register
1569 but flags & OPERAND_REG is null, so we check to see if a symbol
1570 of the same name as the register exists. If the symbol does
1571 exist, then the parser was unable to distinguish the two cases
1572 and we fix things here. (Ref: PR14826) */
1574 if (!(flags & OPERAND_REG) && (X_op == O_register))
1578 sym = find_symbol_matching_register (& myops[i]);
1582 myops[i].X_op = X_op = O_symbol;
1583 myops[i].X_add_symbol = sym;
1587 (_("illegal operand - register name found where none expected"));
1591 /* We're only done if the operands matched so far AND there
1592 are no more to check. */
1593 if (match && myops[i].X_op == 0)
1598 next_opcode = opcode + 1;
1600 if (next_opcode->opcode == 0)
1603 if (strcmp (next_opcode->name, opcode->name))
1606 opcode = next_opcode;
1611 as_bad (_("bad opcode or operands"));
1615 /* Check that all registers that are required to be even are.
1616 Also, if any operands were marked as registers, but were really symbols,
1618 for (i = 0; opcode->operands[i]; i++)
1620 if ((d10v_operands[opcode->operands[i]].flags & OPERAND_EVEN) &&
1621 (myops[i].X_add_number & 1))
1622 as_fatal (_("Register number must be EVEN"));
1623 if ((d10v_operands[opcode->operands[i]].flags & OPERAND_NOSP)
1624 && (myops[i].X_add_number & OPERAND_SP))
1625 as_bad (_("Unsupported use of sp"));
1626 if (myops[i].X_op == O_register)
1628 if (!(d10v_operands[opcode->operands[i]].flags & OPERAND_REG))
1630 myops[i].X_op = O_symbol;
1631 myops[i].X_add_symbol =
1632 symbol_find_or_make ((char *) myops[i].X_op_symbol);
1633 myops[i].X_add_number = 0;
1634 myops[i].X_op_symbol = NULL;
1637 if ((d10v_operands[opcode->operands[i]].flags & OPERAND_CONTROL)
1638 && (myops[i].X_add_number == OPERAND_CONTROL + 4
1639 || myops[i].X_add_number == OPERAND_CONTROL + 5
1640 || myops[i].X_add_number == OPERAND_CONTROL + 6
1641 || myops[i].X_add_number == OPERAND_CONTROL + 12
1642 || myops[i].X_add_number == OPERAND_CONTROL + 13
1643 || myops[i].X_add_number == OPERAND_CONTROL + 15))
1644 as_warn (_("cr%ld is a reserved control register"),
1645 myops[i].X_add_number - OPERAND_CONTROL);
1650 /* If while processing a fixup, a reloc really needs to be created.
1651 Then it is done here. */
1654 tc_gen_reloc (seg, fixp)
1655 asection *seg ATTRIBUTE_UNUSED;
1659 reloc = (arelent *) xmalloc (sizeof (arelent));
1660 reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
1661 *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
1662 reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
1663 reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
1664 if (reloc->howto == (reloc_howto_type *) NULL)
1666 as_bad_where (fixp->fx_file, fixp->fx_line,
1667 _("reloc %d not supported by object file format"),
1668 (int) fixp->fx_r_type);
1672 if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
1673 || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
1674 reloc->address = fixp->fx_offset;
1676 reloc->addend = fixp->fx_addnumber;
1682 md_estimate_size_before_relax (fragp, seg)
1683 fragS *fragp ATTRIBUTE_UNUSED;
1684 asection *seg ATTRIBUTE_UNUSED;
1691 md_pcrel_from_section (fixp, sec)
1695 if (fixp->fx_addsy != (symbolS *) NULL
1696 && (!S_IS_DEFINED (fixp->fx_addsy)
1697 || (S_GET_SEGMENT (fixp->fx_addsy) != sec)))
1699 return fixp->fx_frag->fr_address + fixp->fx_where;
1703 md_apply_fix3 (fixP, valP, seg)
1706 segT seg ATTRIBUTE_UNUSED;
1710 long value = * (long *) valP;
1714 if (fixP->fx_addsy == (symbolS *) NULL)
1717 else if (fixP->fx_pcrel)
1722 value = fixP->fx_offset;
1724 if (fixP->fx_subsy != (symbolS *) NULL)
1726 if (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section)
1727 value -= S_GET_VALUE (fixP->fx_subsy);
1730 /* We don't actually support subtracting a symbol. */
1731 as_bad_where (fixP->fx_file, fixP->fx_line,
1732 _("expression too complex"));
1737 op_type = fixP->fx_r_type;
1744 fixP->fx_r_type = BFD_RELOC_D10V_10_PCREL_L;
1747 else if (op_type & 4096)
1750 fixP->fx_r_type = BFD_RELOC_D10V_18;
1754 get_reloc ((struct d10v_operand *) &d10v_operands[op_type]);
1757 /* Fetch the instruction, insert the fully resolved operand
1758 value, and stuff the instruction back again. */
1759 where = fixP->fx_frag->fr_literal + fixP->fx_where;
1760 insn = bfd_getb32 ((unsigned char *) where);
1762 switch (fixP->fx_r_type)
1764 case BFD_RELOC_D10V_10_PCREL_L:
1765 case BFD_RELOC_D10V_10_PCREL_R:
1766 case BFD_RELOC_D10V_18_PCREL:
1767 /* If the fix is relative to a global symbol, not a section
1768 symbol, then ignore the offset.
1769 XXX - Do we have to worry about branches to a symbol + offset ? */
1770 if (fixP->fx_addsy != NULL
1771 && S_IS_EXTERN (fixP->fx_addsy) )
1773 segT fseg = S_GET_SEGMENT (fixP->fx_addsy);
1774 segment_info_type *segf = seg_info(fseg);
1776 if ( segf && segf->sym != fixP->fx_addsy)
1780 case BFD_RELOC_D10V_18:
1781 /* Instruction addresses are always right-shifted by 2. */
1782 value >>= AT_WORD_RIGHT_SHIFT;
1783 if (fixP->fx_size == 2)
1784 bfd_putb16 ((bfd_vma) value, (unsigned char *) where);
1787 struct d10v_opcode *rep, *repi;
1789 rep = (struct d10v_opcode *) hash_find (d10v_hash, "rep");
1790 repi = (struct d10v_opcode *) hash_find (d10v_hash, "repi");
1791 if ((insn & FM11) == FM11
1793 && (insn & repi->mask) == (unsigned) repi->opcode)
1795 && (insn & rep->mask) == (unsigned) rep->opcode))
1798 (_("line %d: rep or repi must include at least 4 instructions"),
1801 d10v_insert_operand (insn, op_type, (offsetT) value, left, fixP);
1802 bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
1806 bfd_putb32 ((bfd_vma) value, (unsigned char *) where);
1809 bfd_putb16 ((bfd_vma) value, (unsigned char *) where);
1812 case BFD_RELOC_VTABLE_INHERIT:
1813 case BFD_RELOC_VTABLE_ENTRY:
1818 as_fatal (_("line %d: unknown relocation type: 0x%x"),
1819 fixP->fx_line, fixP->fx_r_type);
1823 /* d10v_cleanup() is called after the assembler has finished parsing
1824 the input file, when a label is read from the input file, or when a
1825 stab directive is output. Because the D10V assembler sometimes
1826 saves short instructions to see if it can package them with the
1827 next instruction, there may be a short instruction that still needs
1830 NOTE: accesses a global, etype.
1831 NOTE: invoked by various macros such as md_cleanup: see. */
1839 /* If cleanup was invoked because the assembler encountered, e.g., a
1840 user label, we write out the pending instruction, if any. If it
1841 was invoked because the assembler is outputting a piece of line
1842 debugging information, though, we write out the pending
1843 instruction only if the --no-gstabs-packing command line switch
1844 has been specified. */
1846 && etype == PACK_UNSPEC
1847 && (! outputting_stabs_line_debug || ! flag_allow_gstabs_packing))
1850 subseg = now_subseg;
1853 subseg_set (prev_seg, prev_subseg);
1855 write_1_short (prev_opcode, prev_insn, fixups->next);
1856 subseg_set (seg, subseg);
1862 /* Like normal .word, except support @word.
1863 Clobbers input_line_pointer, checks end-of-line. */
1866 d10v_dot_word (dummy)
1867 int dummy ATTRIBUTE_UNUSED;
1872 if (is_it_end_of_statement ())
1874 demand_empty_rest_of_line ();
1881 if (!strncasecmp (input_line_pointer, "@word", 5))
1883 exp.X_add_number = 0;
1884 input_line_pointer += 5;
1887 fix_new_exp (frag_now, p - frag_now->fr_literal, 2,
1888 &exp, 0, BFD_RELOC_D10V_18);
1891 emit_expr (&exp, 2);
1893 while (*input_line_pointer++ == ',');
1895 input_line_pointer--; /* Put terminator back into stream. */
1896 demand_empty_rest_of_line ();
1899 /* Mitsubishi asked that we support some old syntax that apparently
1900 had immediate operands starting with '#'. This is in some of their
1901 sample code but is not documented (although it appears in some
1902 examples in their assembler manual). For now, we'll solve this
1903 compatibility problem by simply ignoring any '#' at the beginning
1906 /* Operands that begin with '#' should fall through to here.
1910 md_operand (expressionP)
1911 expressionS *expressionP;
1913 if (*input_line_pointer == '#' && ! do_not_ignore_hash)
1915 input_line_pointer++;
1916 expression (expressionP);
1921 d10v_fix_adjustable (fixP)
1924 if (fixP->fx_addsy == NULL)
1927 /* Prevent all adjustments to global and weak symbols or symbols in
1929 if ((S_IS_EXTERN (fixP->fx_addsy)
1930 || (S_IS_WEAK (fixP->fx_addsy))
1931 || (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0))
1934 /* We need the symbol name for the VTABLE entries. */
1935 if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
1936 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
1943 d10v_force_relocation (fixp)
1946 if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
1947 || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)