1 /* tc-h8300.c -- Assemble code for the Renesas H8/300
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
3 2001, 2002, 2003 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 the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 /* Written By Steve Chamberlain <sac@cygnus.com>. */
30 #include "dwarf2dbg.h"
34 #define h8_opcodes ops
35 #include "opcode/h8300.h"
36 #include "safe-ctype.h"
42 const char comment_chars[] = ";";
43 const char line_comment_chars[] = "#";
44 const char line_separator_chars[] = "";
46 static void sbranch (int);
47 static void h8300hmode (int);
48 static void h8300smode (int);
49 static void h8300hnmode (int);
50 static void h8300snmode (int);
51 static void h8300sxmode (int);
52 static void h8300sxnmode (int);
53 static void pint (int);
60 #define PSIZE (Hmode && !Nmode ? L_32 : L_16)
62 static int bsize = L_8; /* Default branch displacement. */
70 const struct h8_opcode *opcode;
73 static struct h8_instruction *h8_instructions;
76 h8300hmode (int arg ATTRIBUTE_UNUSED)
81 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300h))
82 as_warn (_("could not set architecture and machine"));
87 h8300smode (int arg ATTRIBUTE_UNUSED)
92 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300s))
93 as_warn (_("could not set architecture and machine"));
98 h8300hnmode (int arg ATTRIBUTE_UNUSED)
104 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300hn))
105 as_warn (_("could not set architecture and machine"));
110 h8300snmode (int arg ATTRIBUTE_UNUSED)
116 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300sn))
117 as_warn (_("could not set architecture and machine"));
122 h8300sxmode (int arg ATTRIBUTE_UNUSED)
128 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300sx))
129 as_warn (_("could not set architecture and machine"));
134 h8300sxnmode (int arg ATTRIBUTE_UNUSED)
141 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300sxn))
142 as_warn (_("could not set architecture and machine"));
153 pint (int arg ATTRIBUTE_UNUSED)
155 cons (Hmode ? 4 : 2);
158 /* This table describes all the machine specific pseudo-ops the assembler
159 has to support. The fields are:
160 pseudo-op name without dot
161 function to call to execute this pseudo-op
162 Integer arg to pass to the function. */
164 const pseudo_typeS md_pseudo_table[] =
166 {"h8300h", h8300hmode, 0},
167 {"h8300hn", h8300hnmode, 0},
168 {"h8300s", h8300smode, 0},
169 {"h8300sn", h8300snmode, 0},
170 {"h8300sx", h8300sxmode, 0},
171 {"h8300sxn", h8300sxnmode, 0},
172 {"sbranch", sbranch, L_8},
173 {"lbranch", sbranch, L_16},
179 {"form", listing_psize, 0},
180 {"heading", listing_title, 0},
181 {"import", s_ignore, 0},
182 {"page", listing_eject, 0},
183 {"program", s_ignore, 0},
187 const int md_reloc_size;
189 const char EXP_CHARS[] = "eE";
191 /* Chars that mean this number is a floating point constant
194 const char FLT_CHARS[] = "rRsSfFdDxXpP";
196 static struct hash_control *opcode_hash_control; /* Opcode mnemonics. */
198 /* This function is called once, at assembler startup time. This
199 should set up all the tables, etc. that the MD part of the assembler
205 unsigned int nopcodes;
206 struct h8_opcode *p, *p1;
207 struct h8_instruction *pi;
208 char prev_buffer[100];
212 if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300))
213 as_warn (_("could not set architecture and machine"));
216 opcode_hash_control = hash_new ();
219 nopcodes = sizeof (h8_opcodes) / sizeof (struct h8_opcode);
221 h8_instructions = (struct h8_instruction *)
222 xmalloc (nopcodes * sizeof (struct h8_instruction));
224 pi = h8_instructions;
226 /* We do a minimum amount of sorting on the opcode table; this is to
227 make it easy to describe the mova instructions without unnecessary
229 Sorting only takes place inside blocks of instructions of the form
230 X/Y, so for example mova/b, mova/w and mova/l can be intermixed. */
233 struct h8_opcode *first_skipped = 0;
235 char *src = p1->name;
240 /* Strip off any . part when inserting the opcode and only enter
241 unique codes into the hash table. */
242 dst = buffer = malloc (strlen (src) + 1);
251 cmplen = src - p1->name + 1;
258 hash_insert (opcode_hash_control, buffer, (char *) pi);
259 strcpy (prev_buffer, buffer);
262 for (p = p1; p->name; p++)
264 /* A negative TIME is used to indicate that we've added this opcode
268 if (strncmp (p->name, buffer, cmplen) != 0
269 || (p->name[cmplen] != '\0' && p->name[cmplen] != '.'
270 && p->name[cmplen - 1] != '/'))
272 if (first_skipped == 0)
276 if (strncmp (p->name, buffer, len) != 0)
278 if (first_skipped == 0)
284 pi->size = p->name[len] == '.' ? p->name[len + 1] : 0;
287 /* Find the number of operands. */
289 while (pi->noperands < 3 && p->args.nib[pi->noperands] != (op_type) E)
292 /* Find the length of the opcode in bytes. */
294 while (p->data.nib[pi->length * 2] != (op_type) E)
303 /* Add entry for the NULL vector terminator. */
327 static void clever_message (const struct h8_instruction *, struct h8_op *);
328 static void fix_operand_size (struct h8_op *, int);
329 static void build_bytes (const struct h8_instruction *, struct h8_op *);
330 static void do_a_fix_imm (int, int, struct h8_op *, int);
331 static void check_operand (struct h8_op *, unsigned int, char *);
332 static const struct h8_instruction * get_specific (const struct h8_instruction *, struct h8_op *, int) ;
333 static char *get_operands (unsigned, char *, struct h8_op *);
334 static void get_operand (char **, struct h8_op *, int);
335 static int parse_reg (char *, op_type *, unsigned *, int);
336 static char *skip_colonthing (char *, int *);
337 static char *parse_exp (char *, struct h8_op *);
339 static int constant_fits_width_p (struct h8_op *, unsigned int);
340 static int constant_fits_size_p (struct h8_op *, int, int);
344 WREG r0,r1,r2,r3,r4,r5,r6,r7,fp,sp
353 /* Try to parse a reg name. Return the number of chars consumed. */
356 parse_reg (char *src, op_type *mode, unsigned int *reg, int direction)
361 /* Cribbed from get_symbol_end. */
362 if (!is_name_beginner (*src) || *src == '\001')
365 while ((is_part_of_name (*end) && *end != '.') || *end == '\001')
369 if (len == 2 && TOLOWER (src[0]) == 's' && TOLOWER (src[1]) == 'p')
371 *mode = PSIZE | REG | direction;
376 TOLOWER (src[0]) == 'c' &&
377 TOLOWER (src[1]) == 'c' &&
378 TOLOWER (src[2]) == 'r')
385 TOLOWER (src[0]) == 'e' &&
386 TOLOWER (src[1]) == 'x' &&
387 TOLOWER (src[2]) == 'r')
394 TOLOWER (src[0]) == 'v' &&
395 TOLOWER (src[1]) == 'b' &&
396 TOLOWER (src[2]) == 'r')
403 TOLOWER (src[0]) == 's' &&
404 TOLOWER (src[1]) == 'b' &&
405 TOLOWER (src[2]) == 'r')
411 if (len == 2 && TOLOWER (src[0]) == 'f' && TOLOWER (src[1]) == 'p')
413 *mode = PSIZE | REG | direction;
417 if (len == 3 && TOLOWER (src[0]) == 'e' && TOLOWER (src[1]) == 'r' &&
418 src[2] >= '0' && src[2] <= '7')
420 *mode = L_32 | REG | direction;
423 as_warn (_("Reg not valid for H8/300"));
426 if (len == 2 && TOLOWER (src[0]) == 'e' && src[1] >= '0' && src[1] <= '7')
428 *mode = L_16 | REG | direction;
429 *reg = src[1] - '0' + 8;
431 as_warn (_("Reg not valid for H8/300"));
435 if (TOLOWER (src[0]) == 'r')
437 if (src[1] >= '0' && src[1] <= '7')
439 if (len == 3 && TOLOWER (src[2]) == 'l')
441 *mode = L_8 | REG | direction;
442 *reg = (src[1] - '0') + 8;
445 if (len == 3 && TOLOWER (src[2]) == 'h')
447 *mode = L_8 | REG | direction;
448 *reg = (src[1] - '0');
453 *mode = L_16 | REG | direction;
454 *reg = (src[1] - '0');
464 /* Parse an immediate or address-related constant and store it in OP.
465 If the user also specifies the operand's size, store that size
466 in OP->MODE, otherwise leave it for later code to decide. */
469 parse_exp (char *src, struct h8_op *op)
473 save = input_line_pointer;
474 input_line_pointer = src;
475 expression (&op->exp);
476 if (op->exp.X_op == O_absent)
477 as_bad (_("missing operand"));
478 src = input_line_pointer;
479 input_line_pointer = save;
481 return skip_colonthing (src, &op->mode);
485 /* If SRC starts with an explicit operand size, skip it and store the size
486 in *MODE. Leave *MODE unchanged otherwise. */
489 skip_colonthing (char *src, int *mode)
495 if (src[0] == '8' && !ISDIGIT (src[1]))
497 else if (src[0] == '2' && !ISDIGIT (src[1]))
499 else if (src[0] == '3' && !ISDIGIT (src[1]))
501 else if (src[0] == '4' && !ISDIGIT (src[1]))
503 else if (src[0] == '5' && !ISDIGIT (src[1]))
505 else if (src[0] == '2' && src[1] == '4' && !ISDIGIT (src[2]))
507 else if (src[0] == '3' && src[1] == '2' && !ISDIGIT (src[2]))
509 else if (src[0] == '1' && src[1] == '6' && !ISDIGIT (src[2]))
512 as_bad (_("invalid operand size requested"));
514 while (ISDIGIT (*src))
520 /* The many forms of operand:
523 @Rn Register indirect
524 @(exp[:16], Rn) Register indirect with displacement
528 @aa:16 absolute 16 bit
531 #xx[:size] immediate data
532 @(exp:[8], pc) pc rel
533 @@aa[:8] memory indirect. */
536 constant_fits_width_p (struct h8_op *operand, unsigned int width)
538 return ((operand->exp.X_add_number & ~width) == 0
539 || (operand->exp.X_add_number | width) == (unsigned)(~0));
543 constant_fits_size_p (struct h8_op *operand, int size, int no_symbols)
545 offsetT num = operand->exp.X_add_number;
547 && (operand->exp.X_add_symbol != 0 || operand->exp.X_op_symbol != 0))
552 return (num & ~3) == 0;
554 return (num & ~7) == 0;
556 return num >= 1 && num < 8;
558 return (num & ~15) == 0;
560 return num >= 1 && num < 32;
562 return (num & ~0xFF) == 0 || ((unsigned)num | 0x7F) == ~0u;
564 return (num & ~0xFF) == 0;
566 return (num & ~0xFFFF) == 0 || ((unsigned)num | 0x7FFF) == ~0u;
568 return (num & ~0xFFFF) == 0;
577 get_operand (char **ptr, struct h8_op *op, int direction)
586 /* Check for '(' and ')' for instructions ldm and stm. */
587 if (src[0] == '(' && src[8] == ')')
590 /* Gross. Gross. ldm and stm have a format not easily handled
591 by get_operand. We deal with it explicitly here. */
592 if (TOLOWER (src[0]) == 'e' && TOLOWER (src[1]) == 'r' &&
593 ISDIGIT (src[2]) && src[3] == '-' &&
594 TOLOWER (src[4]) == 'e' && TOLOWER (src[5]) == 'r' && ISDIGIT (src[6]))
602 as_bad (_("Invalid register list for ldm/stm\n"));
605 as_bad (_("Invalid register list for ldm/stm\n"));
608 as_bad (_("Invalid register list for ldm/stm)\n"));
610 /* Even sicker. We encode two registers into op->reg. One
611 for the low register to save, the other for the high
612 register to save; we also set the high bit in op->reg
613 so we know this is "very special". */
614 op->reg = 0x80000000 | (high << 8) | low;
623 len = parse_reg (src, &op->mode, &op->reg, direction);
629 int size = op->mode & SIZE;
634 as_warn (_("mismatch between register and suffix"));
635 op->mode = (op->mode & ~MODE) | LOWREG;
638 if (size != L_32 && size != L_16)
639 as_warn (_("mismatch between register and suffix"));
640 op->mode = (op->mode & ~MODE) | LOWREG;
641 op->mode = (op->mode & ~SIZE) | L_16;
644 op->mode = (op->mode & ~MODE) | LOWREG;
645 if (size != L_32 && size != L_8)
646 as_warn (_("mismatch between register and suffix"));
647 op->mode = (op->mode & ~MODE) | LOWREG;
648 op->mode = (op->mode & ~SIZE) | L_8;
651 as_warn ("invalid suffix after register.");
665 *ptr = parse_exp (src + 1, op);
666 if (op->exp.X_add_number >= 0x100)
671 /* FIXME : 2? or 4? */
672 if (op->exp.X_add_number >= 0x400)
673 as_bad (_("address too high for vector table jmp/jsr"));
674 else if (op->exp.X_add_number >= 0x200)
679 op->exp.X_add_number = op->exp.X_add_number / divisor - 0x80;
686 if (*src == '-' || *src == '+')
688 len = parse_reg (src + 1, &mode, &num, direction);
691 /* Oops, not a reg after all, must be ordinary exp. */
692 op->mode = ABS | direction;
693 *ptr = parse_exp (src, op);
697 if (((mode & SIZE) != PSIZE)
698 /* For Normal mode accept 16 bit and 32 bit pointer registers. */
699 && (!Nmode || ((mode & SIZE) != L_32)))
700 as_bad (_("Wrong size pointer register for architecture."));
702 op->mode = src[0] == '-' ? RDPREDEC : RDPREINC;
704 *ptr = src + 1 + len;
711 /* See if this is @(ERn.x, PC). */
712 len = parse_reg (src, &mode, &op->reg, direction);
713 if (len != 0 && (mode & MODE) == REG && src[len] == '.')
715 switch (TOLOWER (src[len + 1]))
718 mode = PCIDXB | direction;
721 mode = PCIDXW | direction;
724 mode = PCIDXL | direction;
731 && src[len + 2] == ','
732 && TOLOWER (src[len + 3]) != 'p'
733 && TOLOWER (src[len + 4]) != 'c'
734 && src[len + 5] != ')')
736 *ptr = src + len + 6;
740 /* Fall through into disp case - the grammar is somewhat
741 ambiguous, so we should try whether it's a DISP operand
742 after all ("ER3.L" might be a poorly named label...). */
747 /* Start off assuming a 16 bit offset. */
749 src = parse_exp (src, op);
752 op->mode |= ABS | direction;
759 as_bad (_("expected @(exp, reg16)"));
764 len = parse_reg (src, &mode, &op->reg, direction);
765 if (len == 0 || (mode & MODE) != REG)
767 as_bad (_("expected @(exp, reg16)"));
773 switch (TOLOWER (src[1]))
776 op->mode |= INDEXB | direction;
779 op->mode |= INDEXW | direction;
782 op->mode |= INDEXL | direction;
785 as_bad (_("expected .L, .W or .B for register in indexed addressing mode"));
791 op->mode |= DISP | direction;
792 src = skip_colonthing (src, &op->mode);
794 if (*src != ')' && '(')
796 as_bad (_("expected @(exp, reg16)"));
802 len = parse_reg (src, &mode, &num, direction);
807 if (*src == '+' || *src == '-')
809 if (((mode & SIZE) != PSIZE)
810 /* For Normal mode accept 16 bit and 32 bit pointer registers. */
811 && (!Nmode || ((mode & SIZE) != L_32)))
812 as_bad (_("Wrong size pointer register for architecture."));
813 op->mode = *src == '+' ? RSPOSTINC : RSPOSTDEC;
819 if (((mode & SIZE) != PSIZE)
820 /* For Normal mode accept 16 bit and 32 bit pointer registers. */
821 && (!Nmode || ((mode & SIZE) != L_32)))
822 as_bad (_("Wrong size pointer register for architecture."));
824 op->mode = direction | IND | PSIZE;
832 /* must be a symbol */
834 op->mode = ABS | direction;
835 *ptr = parse_exp (src, op);
843 *ptr = parse_exp (src + 1, op);
846 else if (strncmp (src, "mach", 4) == 0 ||
847 strncmp (src, "macl", 4) == 0 ||
848 strncmp (src, "MACH", 4) == 0 ||
849 strncmp (src, "MACL", 4) == 0)
851 op->reg = TOLOWER (src[3]) == 'l';
859 *ptr = parse_exp (src, op);
864 get_operands (unsigned int noperands, char *op_end, struct h8_op *operand)
875 get_operand (&ptr, operand + 0, SRC);
879 get_operand (&ptr, operand + 1, DST);
885 get_operand (&ptr, operand + 0, SRC);
888 get_operand (&ptr, operand + 1, DST);
893 get_operand (&ptr, operand + 0, SRC);
896 get_operand (&ptr, operand + 1, DST);
899 get_operand (&ptr, operand + 2, OP3);
909 /* MOVA has special requirements. Rather than adding twice the amount of
910 addressing modes, we simply special case it a bit. */
912 get_mova_operands (char *op_end, struct h8_op *operand)
916 if (ptr[1] != '@' || ptr[2] != '(')
920 ptr = parse_exp (ptr, &operand[0]);
925 get_operand (&ptr, operand + 1, DST);
933 operand[0].mode = (operand[0].mode & ~MODE) | INDEXB;
936 operand[0].mode = (operand[0].mode & ~MODE) | INDEXW;
939 operand[0].mode = (operand[0].mode & ~MODE) | INDEXL;
945 else if ((operand[1].mode & MODE) == LOWREG)
947 switch (operand[1].mode & SIZE)
950 operand[0].mode = (operand[0].mode & ~MODE) | INDEXB;
953 operand[0].mode = (operand[0].mode & ~MODE) | INDEXW;
956 operand[0].mode = (operand[0].mode & ~MODE) | INDEXL;
965 if (*ptr++ != ')' || *ptr++ != ',')
967 get_operand (&ptr, operand + 2, OP3);
968 /* See if we can use the short form of MOVA. */
969 if (((operand[1].mode & MODE) == REG || (operand[1].mode & MODE) == LOWREG)
970 && (operand[2].mode & MODE) == REG
971 && (operand[1].reg & 7) == (operand[2].reg & 7))
973 operand[1].mode = operand[2].mode = 0;
974 operand[0].reg = operand[2].reg & 7;
979 as_bad (_("expected valid addressing mode for mova: \"@(disp, ea.sz),ERn\""));
984 get_rtsl_operands (char *ptr, struct h8_op *operand)
986 int mode, num, num2, len, type = 0;
994 len = parse_reg (ptr, &mode, &num, SRC);
995 if (len == 0 || (mode & MODE) != REG)
997 as_bad (_("expected register"));
1003 len = parse_reg (++ptr, &mode, &num2, SRC);
1004 if (len == 0 || (mode & MODE) != REG)
1006 as_bad (_("expected register"));
1010 /* CONST_xxx are used as placeholders in the opcode table. */
1012 if (num < 0 || num > 3)
1014 as_bad (_("invalid register list"));
1019 num2 = num, num = 0;
1020 if (type == 1 && *ptr++ != ')')
1022 as_bad (_("expected closing paren"));
1025 operand[0].mode = RS32;
1026 operand[1].mode = RD32;
1027 operand[0].reg = num;
1028 operand[1].reg = num2;
1031 /* Passed a pointer to a list of opcodes which use different
1032 addressing modes, return the opcode which matches the opcodes
1035 static const struct h8_instruction *
1036 get_specific (const struct h8_instruction *instruction,
1037 struct h8_op *operands, int size)
1039 const struct h8_instruction *this_try = instruction;
1040 const struct h8_instruction *found_other = 0, *found_mismatched = 0;
1042 int this_index = instruction->idx;
1045 /* There's only one ldm/stm and it's easier to just
1046 get out quick for them. */
1047 if (OP_KIND (instruction->opcode->how) == O_LDM
1048 || OP_KIND (instruction->opcode->how) == O_STM)
1051 while (noperands < 3 && operands[noperands].mode != 0)
1054 while (this_index == instruction->idx && !found)
1059 this_try = instruction++;
1060 this_size = this_try->opcode->how & SN;
1062 if (this_try->noperands != noperands)
1064 else if (this_try->noperands > 0)
1068 for (i = 0; i < this_try->noperands && found; i++)
1070 op_type op = this_try->opcode->args.nib[i];
1071 int op_mode = op & MODE;
1072 int op_size = op & SIZE;
1073 int x = operands[i].mode;
1074 int x_mode = x & MODE;
1075 int x_size = x & SIZE;
1077 if (op_mode == LOWREG && (x_mode == REG || x_mode == LOWREG))
1079 if ((x_size == L_8 && (operands[i].reg & 8) == 0)
1080 || (x_size == L_16 && (operands[i].reg & 8) == 8))
1081 as_warn (_("can't use high part of register in operand %d"), i);
1083 if (x_size != op_size)
1086 else if (op_mode == REG)
1088 if (x_mode == LOWREG)
1094 x_size = (Hmode ? L_32 : L_16);
1096 op_size = (Hmode ? L_32 : L_16);
1098 /* The size of the reg is v important. */
1099 if (op_size != x_size)
1102 else if (op_mode & CTRL) /* control register */
1104 if (!(x_mode & CTRL))
1110 if (op_mode != CCR &&
1111 op_mode != CCR_EXR &&
1112 op_mode != CC_EX_VB_SB)
1116 if (op_mode != EXR &&
1117 op_mode != CCR_EXR &&
1118 op_mode != CC_EX_VB_SB)
1122 if (op_mode != MACH &&
1127 if (op_mode != MACL &&
1132 if (op_mode != VBR &&
1133 op_mode != VBR_SBR &&
1134 op_mode != CC_EX_VB_SB)
1138 if (op_mode != SBR &&
1139 op_mode != VBR_SBR &&
1140 op_mode != CC_EX_VB_SB)
1145 else if ((op & ABSJMP) && (x_mode == ABS || x_mode == PCREL))
1147 operands[i].mode &= ~MODE;
1148 operands[i].mode |= ABSJMP;
1149 /* But it may not be 24 bits long. */
1150 if (x_mode == ABS && !Hmode)
1152 operands[i].mode &= ~SIZE;
1153 operands[i].mode |= L_16;
1155 if ((operands[i].mode & SIZE) == L_32
1156 && (op_mode & SIZE) != L_32)
1159 else if (x_mode == IMM && op_mode != IMM)
1161 offsetT num = operands[i].exp.X_add_number;
1162 if (op_mode == KBIT || op_mode == DBIT)
1163 /* This is ok if the immediate value is sensible. */;
1164 else if (op_mode == CONST_2)
1166 else if (op_mode == CONST_4)
1168 else if (op_mode == CONST_8)
1170 else if (op_mode == CONST_16)
1175 else if (op_mode == PCREL && op_mode == x_mode)
1177 /* movsd, bsr/bc and bsr/bs only come in PCREL16 flavour:
1178 If x_size is L_8, promote it. */
1179 if (OP_KIND (this_try->opcode->how) == O_MOVSD
1180 || OP_KIND (this_try->opcode->how) == O_BSRBC
1181 || OP_KIND (this_try->opcode->how) == O_BSRBS)
1185 /* The size of the displacement is important. */
1186 if (op_size != x_size)
1189 else if ((op_mode == DISP || op_mode == IMM || op_mode == ABS
1190 || op_mode == INDEXB || op_mode == INDEXW
1191 || op_mode == INDEXL)
1192 && op_mode == x_mode)
1194 /* Promote a L_24 to L_32 if it makes us match. */
1195 if (x_size == L_24 && op_size == L_32)
1202 /* Promote an L8 to L_16 if it makes us match. */
1203 if ((op_mode == ABS || op_mode == DISP) && x_size == L_8)
1205 if (op_size == L_16)
1210 if (((x_size == L_16 && op_size == L_16U)
1211 || (x_size == L_8 && op_size == L_8U)
1212 || (x_size == L_3 && op_size == L_3NZ))
1213 /* We're deliberately more permissive for ABS modes. */
1215 || constant_fits_size_p (operands + i, op_size,
1219 if (x_size != 0 && op_size != x_size)
1221 else if (x_size == 0
1222 && ! constant_fits_size_p (operands + i, op_size,
1226 else if (op_mode != x_mode)
1234 if ((this_try->opcode->available == AV_H8SX && ! SXmode)
1235 || (this_try->opcode->available == AV_H8S && ! Smode)
1236 || (this_try->opcode->available == AV_H8H && ! Hmode))
1237 found = 0, found_other = this_try;
1238 else if (this_size != size && (this_size != SN && size != SN))
1239 found_mismatched = this_try, found = 0;
1247 as_warn (_("Opcode `%s' with these operand types not available in %s mode"),
1248 found_other->opcode->name,
1249 (! Hmode && ! Smode ? "H8/300"
1254 else if (found_mismatched)
1256 as_warn (_("mismatch between opcode size and operand size"));
1257 return found_mismatched;
1263 check_operand (struct h8_op *operand, unsigned int width, char *string)
1265 if (operand->exp.X_add_symbol == 0
1266 && operand->exp.X_op_symbol == 0)
1268 /* No symbol involved, let's look at offset, it's dangerous if
1269 any of the high bits are not 0 or ff's, find out by oring or
1270 anding with the width and seeing if the answer is 0 or all
1273 if (! constant_fits_width_p (operand, width))
1276 && (operand->exp.X_add_number & 0xff00) == 0xff00)
1278 /* Just ignore this one - which happens when trying to
1279 fit a 16 bit address truncated into an 8 bit address
1280 of something like bset. */
1282 else if (strcmp (string, "@") == 0
1284 && (operand->exp.X_add_number & 0xff8000) == 0xff8000)
1286 /* Just ignore this one - which happens when trying to
1287 fit a 24 bit address truncated into a 16 bit address
1288 of something like mov.w. */
1292 as_warn (_("operand %s0x%lx out of range."), string,
1293 (unsigned long) operand->exp.X_add_number);
1299 /* RELAXMODE has one of 3 values:
1301 0 Output a "normal" reloc, no relaxing possible for this insn/reloc
1303 1 Output a relaxable 24bit absolute mov.w address relocation
1304 (may relax into a 16bit absolute address).
1306 2 Output a relaxable 16/24 absolute mov.b address relocation
1307 (may relax into an 8bit absolute address). */
1310 do_a_fix_imm (int offset, int nibble, struct h8_op *operand, int relaxmode)
1315 char *bytes = frag_now->fr_literal + offset;
1317 char *t = ((operand->mode & MODE) == IMM) ? "#" : "@";
1319 if (operand->exp.X_add_symbol == 0)
1321 switch (operand->mode & SIZE)
1324 check_operand (operand, 0x3, t);
1325 bytes[0] |= (operand->exp.X_add_number & 3) << (nibble ? 0 : 4);
1329 check_operand (operand, 0x7, t);
1330 bytes[0] |= (operand->exp.X_add_number & 7) << (nibble ? 0 : 4);
1333 check_operand (operand, 0xF, t);
1334 bytes[0] |= (operand->exp.X_add_number & 15) << (nibble ? 0 : 4);
1337 check_operand (operand, 0x1F, t);
1338 bytes[0] |= operand->exp.X_add_number & 31;
1342 check_operand (operand, 0xff, t);
1343 bytes[0] |= operand->exp.X_add_number;
1347 check_operand (operand, 0xffff, t);
1348 bytes[0] |= operand->exp.X_add_number >> 8;
1349 bytes[1] |= operand->exp.X_add_number >> 0;
1352 check_operand (operand, 0xffffff, t);
1353 bytes[0] |= operand->exp.X_add_number >> 16;
1354 bytes[1] |= operand->exp.X_add_number >> 8;
1355 bytes[2] |= operand->exp.X_add_number >> 0;
1359 /* This should be done with bfd. */
1360 bytes[0] |= operand->exp.X_add_number >> 24;
1361 bytes[1] |= operand->exp.X_add_number >> 16;
1362 bytes[2] |= operand->exp.X_add_number >> 8;
1363 bytes[3] |= operand->exp.X_add_number >> 0;
1366 idx = (relaxmode == 2) ? R_MOV24B1 : R_MOVL1;
1367 fix_new_exp (frag_now, offset, 4, &operand->exp, 0, idx);
1374 switch (operand->mode & SIZE)
1379 where = (operand->mode & SIZE) == L_24 ? -1 : 0;
1382 else if (relaxmode == 1)
1388 as_bad (_("Can't work out size of operand.\n"));
1397 operand->exp.X_add_number =
1398 ((operand->exp.X_add_number & 0xffff) ^ 0x8000) - 0x8000;
1399 operand->exp.X_add_number |= (bytes[0] << 8) | bytes[1];
1405 operand->exp.X_add_number =
1406 ((operand->exp.X_add_number & 0xff) ^ 0x80) - 0x80;
1407 operand->exp.X_add_number |= bytes[0];
1410 fix_new_exp (frag_now,
1419 /* Now we know what sort of opcodes it is, let's build the bytes. */
1422 build_bytes (const struct h8_instruction *this_try, struct h8_op *operand)
1425 char *output = frag_more (this_try->length);
1426 op_type *nibble_ptr = this_try->opcode->data.nib;
1428 unsigned int nibble_count = 0;
1432 char asnibbles[100];
1433 char *p = asnibbles;
1436 if (!Hmode && this_try->opcode->available != AV_H8)
1437 as_warn (_("Opcode `%s' with these operand types not available in H8/300 mode"),
1438 this_try->opcode->name);
1440 && this_try->opcode->available != AV_H8
1441 && this_try->opcode->available != AV_H8H)
1442 as_warn (_("Opcode `%s' with these operand types not available in H8/300H mode"),
1443 this_try->opcode->name);
1445 && this_try->opcode->available != AV_H8
1446 && this_try->opcode->available != AV_H8H
1447 && this_try->opcode->available != AV_H8S)
1448 as_warn (_("Opcode `%s' with these operand types not available in H8/300S mode"),
1449 this_try->opcode->name);
1451 while (*nibble_ptr != (op_type) E)
1458 d = (c & OP3) == OP3 ? 2 : (c & DST) == DST ? 1 : 0;
1466 if (c2 == REG || c2 == LOWREG
1467 || c2 == IND || c2 == PREINC || c2 == PREDEC
1468 || c2 == POSTINC || c2 == POSTDEC)
1470 nib = operand[d].reg;
1475 else if (c & CTRL) /* Control reg operand. */
1476 nib = operand[d].reg;
1478 else if ((c & DISPREG) == (DISPREG))
1480 nib = operand[d].reg;
1484 operand[d].mode = c;
1485 op_at[d] = nibble_count;
1488 else if (c2 == IMM || c2 == PCREL || c2 == ABS
1489 || (c & ABSJMP) || c2 == DISP)
1491 operand[d].mode = c;
1492 op_at[d] = nibble_count;
1495 else if ((c & IGNORE) || (c & DATA))
1498 else if (c2 == DBIT)
1500 switch (operand[0].exp.X_add_number)
1509 as_bad (_("Need #1 or #2 here"));
1512 else if (c2 == KBIT)
1514 switch (operand[0].exp.X_add_number)
1524 as_warn (_("#4 not valid on H8/300."));
1529 as_bad (_("Need #1 or #2 here"));
1532 /* Stop it making a fix. */
1533 operand[0].mode = 0;
1537 operand[d].mode |= MEMRELAX;
1553 if (operand[0].mode == MACREG)
1554 /* stmac has mac[hl] as the first operand. */
1555 nib = 2 + operand[0].reg;
1557 /* ldmac has mac[hl] as the second operand. */
1558 nib = 2 + operand[1].reg;
1566 /* Disgusting. Why, oh why didn't someone ask us for advice
1567 on the assembler format. */
1568 if (OP_KIND (this_try->opcode->how) == O_LDM)
1570 high = (operand[1].reg >> 8) & 0xf;
1571 low = (operand[1].reg) & 0xf;
1572 asnibbles[2] = high - low;
1573 asnibbles[7] = high;
1575 else if (OP_KIND (this_try->opcode->how) == O_STM)
1577 high = (operand[0].reg >> 8) & 0xf;
1578 low = (operand[0].reg) & 0xf;
1579 asnibbles[2] = high - low;
1583 for (i = 0; i < this_try->length; i++)
1584 output[i] = (asnibbles[i * 2] << 4) | asnibbles[i * 2 + 1];
1586 /* Note if this is a movb instruction -- there's a special relaxation
1587 which only applies to them. */
1588 if (this_try->opcode->how == O (O_MOV, SB))
1591 /* Output any fixes. */
1592 for (i = 0; i < this_try->noperands; i++)
1594 int x = operand[i].mode;
1595 int x_mode = x & MODE;
1597 if (x_mode == IMM || x_mode == DISP)
1598 do_a_fix_imm (output - frag_now->fr_literal + op_at[i] / 2,
1599 op_at[i] & 1, operand + i, (x & MEMRELAX) != 0);
1601 else if (x_mode == ABS)
1602 do_a_fix_imm (output - frag_now->fr_literal + op_at[i] / 2,
1603 op_at[i] & 1, operand + i,
1604 (x & MEMRELAX) ? movb + 1 : 0);
1606 else if (x_mode == PCREL)
1608 int size16 = (x & SIZE) == L_16;
1609 int size = size16 ? 2 : 1;
1610 int type = size16 ? R_PCRWORD : R_PCRBYTE;
1613 check_operand (operand + i, size16 ? 0x7fff : 0x7f, "@");
1615 if (operand[i].exp.X_add_number & 1)
1616 as_warn (_("branch operand has odd offset (%lx)\n"),
1617 (unsigned long) operand->exp.X_add_number);
1619 /* The COFF port has always been off by one, changing it
1620 now would be an incompatible change, so we leave it as-is.
1622 We don't want to do this for ELF as we want to be
1623 compatible with the proposed ELF format from Hitachi. */
1624 operand[i].exp.X_add_number -= 1;
1628 operand[i].exp.X_add_number =
1629 ((operand[i].exp.X_add_number & 0xffff) ^ 0x8000) - 0x8000;
1633 operand[i].exp.X_add_number =
1634 ((operand[i].exp.X_add_number & 0xff) ^ 0x80) - 0x80;
1639 operand[i].exp.X_add_number |= output[op_at[i] / 2];
1641 fixP = fix_new_exp (frag_now,
1642 output - frag_now->fr_literal + op_at[i] / 2,
1647 fixP->fx_signed = 1;
1649 else if (x_mode == MEMIND)
1651 check_operand (operand + i, 0xff, "@@");
1652 fix_new_exp (frag_now,
1653 output - frag_now->fr_literal + 1,
1659 else if (x_mode == VECIND)
1661 check_operand (operand + i, 0x7f, "@@");
1662 /* FIXME: approximating the effect of "B31" here...
1663 This is very hackish, and ought to be done a better way. */
1664 operand[i].exp.X_add_number |= 0x80;
1665 fix_new_exp (frag_now,
1666 output - frag_now->fr_literal + 1,
1672 else if (x & ABSJMP)
1675 bfd_reloc_code_real_type reloc_type = R_JMPL1;
1678 /* To be compatible with the proposed H8 ELF format, we
1679 want the relocation's offset to point to the first byte
1680 that will be modified, not to the start of the instruction. */
1682 if ((operand->mode & SIZE) == L_32)
1685 reloc_type = R_RELLONG;
1691 /* This jmp may be a jump or a branch. */
1693 check_operand (operand + i,
1694 SXmode ? 0xffffffff : Hmode ? 0xffffff : 0xffff,
1697 if (operand[i].exp.X_add_number & 1)
1698 as_warn (_("branch operand has odd offset (%lx)\n"),
1699 (unsigned long) operand->exp.X_add_number);
1702 operand[i].exp.X_add_number =
1703 ((operand[i].exp.X_add_number & 0xffff) ^ 0x8000) - 0x8000;
1704 fix_new_exp (frag_now,
1705 output - frag_now->fr_literal + where,
1714 /* Try to give an intelligent error message for common and simple to
1718 clever_message (const struct h8_instruction *instruction,
1719 struct h8_op *operand)
1721 /* Find out if there was more than one possible opcode. */
1723 if ((instruction + 1)->idx != instruction->idx)
1727 /* Only one opcode of this flavour, try to guess which operand
1729 for (argn = 0; argn < instruction->noperands; argn++)
1731 switch (instruction->opcode->args.nib[argn])
1734 if (operand[argn].mode != RD16)
1736 as_bad (_("destination operand must be 16 bit register"));
1743 if (operand[argn].mode != RS8)
1745 as_bad (_("source operand must be 8 bit register"));
1751 if (operand[argn].mode != ABS16DST)
1753 as_bad (_("destination operand must be 16bit absolute address"));
1758 if (operand[argn].mode != RD8)
1760 as_bad (_("destination operand must be 8 bit register"));
1766 if (operand[argn].mode != ABS16SRC)
1768 as_bad (_("source operand must be 16bit absolute address"));
1776 as_bad (_("invalid operands"));
1780 /* If OPERAND is part of an address, adjust its size and value given
1781 that it addresses SIZE bytes.
1783 This function decides how big non-immediate constants are when no
1784 size was explicitly given. It also scales down the assembly-level
1785 displacement in an @(d:2,ERn) operand. */
1788 fix_operand_size (struct h8_op *operand, int size)
1790 if (SXmode && (operand->mode & MODE) == DISP)
1792 /* If the user didn't specify an operand width, see if we
1793 can use @(d:2,ERn). */
1794 if ((operand->mode & SIZE) == 0
1795 && operand->exp.X_add_symbol == 0
1796 && operand->exp.X_op_symbol == 0
1797 && (operand->exp.X_add_number == size
1798 || operand->exp.X_add_number == size * 2
1799 || operand->exp.X_add_number == size * 3))
1800 operand->mode |= L_2;
1802 /* Scale down the displacement in an @(d:2,ERn) operand.
1803 X_add_number then contains the desired field value. */
1804 if ((operand->mode & SIZE) == L_2)
1806 if (operand->exp.X_add_number % size != 0)
1807 as_warn (_("operand/size mis-match"));
1808 operand->exp.X_add_number /= size;
1812 if ((operand->mode & SIZE) == 0)
1813 switch (operand->mode & MODE)
1820 /* Pick a 24-bit address unless we know that a 16-bit address
1821 is safe. get_specific() will relax L_24 into L_32 where
1825 && (operand->exp.X_add_number < -32768
1826 || operand->exp.X_add_number > 32767
1827 || operand->exp.X_add_symbol != 0
1828 || operand->exp.X_op_symbol != 0))
1829 operand->mode |= L_24;
1831 operand->mode |= L_16;
1835 /* This condition is long standing, though somewhat suspect. */
1836 if (operand->exp.X_add_number > -128
1837 && operand->exp.X_add_number < 127)
1838 operand->mode |= L_8;
1840 operand->mode |= L_16;
1846 /* This is the guts of the machine-dependent assembler. STR points to
1847 a machine dependent instruction. This function is supposed to emit
1848 the frags/bytes it assembles. */
1851 md_assemble (char *str)
1855 struct h8_op operand[3];
1856 const struct h8_instruction *instruction;
1857 const struct h8_instruction *prev_instruction;
1864 /* Drop leading whitespace. */
1868 /* Find the op code end. */
1869 for (op_start = op_end = str;
1870 *op_end != 0 && *op_end != ' ';
1880 else if (*op_end == '/' && ! slash)
1884 if (op_end == op_start)
1886 as_bad (_("can't find opcode "));
1892 /* The assembler stops scanning the opcode at slashes, so it fails
1893 to make characters following them lower case. Fix them. */
1896 *slash = TOLOWER (*slash);
1898 instruction = (const struct h8_instruction *)
1899 hash_find (opcode_hash_control, op_start);
1901 if (instruction == NULL)
1903 as_bad (_("unknown opcode"));
1907 /* We used to set input_line_pointer to the result of get_operands,
1908 but that is wrong. Our caller assumes we don't change it. */
1910 operand[0].mode = 0;
1911 operand[1].mode = 0;
1912 operand[2].mode = 0;
1914 if (OP_KIND (instruction->opcode->how) == O_MOVAB
1915 || OP_KIND (instruction->opcode->how) == O_MOVAW
1916 || OP_KIND (instruction->opcode->how) == O_MOVAL)
1917 get_mova_operands (op_end, operand);
1918 else if (OP_KIND (instruction->opcode->how) == O_RTEL
1919 || OP_KIND (instruction->opcode->how) == O_RTSL)
1920 get_rtsl_operands (op_end, operand);
1922 get_operands (instruction->noperands, op_end, operand);
1925 prev_instruction = instruction;
1930 switch (TOLOWER (*dot))
1945 if (OP_KIND (instruction->opcode->how) == O_MOVAB ||
1946 OP_KIND (instruction->opcode->how) == O_MOVAW ||
1947 OP_KIND (instruction->opcode->how) == O_MOVAL)
1949 switch (operand[0].mode & MODE)
1953 fix_operand_size (&operand[1], 1);
1956 fix_operand_size (&operand[1], 2);
1959 fix_operand_size (&operand[1], 4);
1965 for (i = 0; i < 3 && operand[i].mode != 0; i++)
1971 fix_operand_size (&operand[i], 1);
1974 fix_operand_size (&operand[i], 2);
1977 fix_operand_size (&operand[i], 4);
1982 instruction = get_specific (instruction, operand, size);
1984 if (instruction == 0)
1986 /* Couldn't find an opcode which matched the operands. */
1987 char *where = frag_more (2);
1991 clever_message (prev_instruction, operand);
1996 build_bytes (instruction, operand);
1998 #ifdef BFD_ASSEMBLER
1999 dwarf2_emit_insn (instruction->length);
2003 #ifndef BFD_ASSEMBLER
2005 tc_crawl_symbol_chain (object_headers *headers ATTRIBUTE_UNUSED)
2007 printf (_("call to tc_crawl_symbol_chain \n"));
2012 md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
2017 #ifndef BFD_ASSEMBLER
2019 tc_headers_hook (object_headers *headers ATTRIBUTE_UNUSED)
2021 printf (_("call to tc_headers_hook \n"));
2025 /* Various routines to kill one day */
2026 /* Equal to MAX_PRECISION in atof-ieee.c */
2027 #define MAX_LITTLENUMS 6
2029 /* Turn a string in input_line_pointer into a floating point constant
2030 of type TYPE, and store the appropriate bytes in *LITP. The number
2031 of LITTLENUMS emitted is stored in *SIZEP. An error message is
2032 returned, or NULL on OK. */
2035 md_atof (int type, char *litP, int *sizeP)
2038 LITTLENUM_TYPE words[MAX_LITTLENUMS];
2039 LITTLENUM_TYPE *wordP;
2070 return _("Bad call to MD_ATOF()");
2072 t = atof_ieee (input_line_pointer, type, words);
2074 input_line_pointer = t;
2076 *sizeP = prec * sizeof (LITTLENUM_TYPE);
2077 for (wordP = words; prec--;)
2079 md_number_to_chars (litP, (long) (*wordP++), sizeof (LITTLENUM_TYPE));
2080 litP += sizeof (LITTLENUM_TYPE);
2085 const char *md_shortopts = "";
2086 struct option md_longopts[] = {
2087 {NULL, no_argument, NULL, 0}
2090 size_t md_longopts_size = sizeof (md_longopts);
2093 md_parse_option (int c ATTRIBUTE_UNUSED, char *arg ATTRIBUTE_UNUSED)
2099 md_show_usage (FILE *stream ATTRIBUTE_UNUSED)
2103 void tc_aout_fix_to_chars (void);
2106 tc_aout_fix_to_chars (void)
2108 printf (_("call to tc_aout_fix_to_chars \n"));
2114 #ifdef BFD_ASSEMBLER
2115 bfd *headers ATTRIBUTE_UNUSED,
2117 object_headers *headers ATTRIBUTE_UNUSED,
2119 segT seg ATTRIBUTE_UNUSED,
2120 fragS *fragP ATTRIBUTE_UNUSED)
2122 printf (_("call to md_convert_frag \n"));
2126 #ifdef BFD_ASSEMBLER
2128 md_section_align (segT segment, valueT size)
2130 int align = bfd_get_section_alignment (stdoutput, segment);
2131 return ((size + (1 << align) - 1) & (-1 << align));
2135 md_section_align (segT seg, valueT size)
2137 return ((size + (1 << section_alignment[(int) seg]) - 1)
2138 & (-1 << section_alignment[(int) seg]));
2144 md_apply_fix3 (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
2146 char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
2149 switch (fixP->fx_size)
2155 *buf++ = (val >> 8);
2159 *buf++ = (val >> 24);
2160 *buf++ = (val >> 16);
2161 *buf++ = (val >> 8);
2168 if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
2173 md_estimate_size_before_relax (register fragS *fragP ATTRIBUTE_UNUSED,
2174 register segT segment_type ATTRIBUTE_UNUSED)
2176 printf (_("call tomd_estimate_size_before_relax \n"));
2180 /* Put number into target byte order. */
2182 md_number_to_chars (char *ptr, valueT use, int nbytes)
2184 number_to_chars_bigendian (ptr, use, nbytes);
2188 md_pcrel_from (fixS *fixP ATTRIBUTE_UNUSED)
2193 #ifndef BFD_ASSEMBLER
2195 tc_reloc_mangle (fixS *fix_ptr, struct internal_reloc *intr, bfd_vma base)
2197 symbolS *symbol_ptr;
2199 symbol_ptr = fix_ptr->fx_addsy;
2201 /* If this relocation is attached to a symbol then it's ok
2203 if (fix_ptr->fx_r_type == TC_CONS_RELOC)
2205 /* cons likes to create reloc32's whatever the size of the reloc..
2207 switch (fix_ptr->fx_size)
2210 intr->r_type = R_RELLONG;
2213 intr->r_type = R_RELWORD;
2216 intr->r_type = R_RELBYTE;
2224 intr->r_type = fix_ptr->fx_r_type;
2227 intr->r_vaddr = fix_ptr->fx_frag->fr_address + fix_ptr->fx_where + base;
2228 intr->r_offset = fix_ptr->fx_offset;
2232 if (symbol_ptr->sy_number != -1)
2233 intr->r_symndx = symbol_ptr->sy_number;
2238 /* This case arises when a reference is made to `.'. */
2239 segsym = seg_info (S_GET_SEGMENT (symbol_ptr))->dot;
2241 intr->r_symndx = -1;
2244 intr->r_symndx = segsym->sy_number;
2245 intr->r_offset += S_GET_VALUE (symbol_ptr);
2250 intr->r_symndx = -1;
2252 #else /* BFD_ASSEMBLER */
2254 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
2257 bfd_reloc_code_real_type r_type;
2259 if (fixp->fx_addsy && fixp->fx_subsy)
2261 if ((S_GET_SEGMENT (fixp->fx_addsy) != S_GET_SEGMENT (fixp->fx_subsy))
2262 || S_GET_SEGMENT (fixp->fx_addsy) == undefined_section)
2264 as_bad_where (fixp->fx_file, fixp->fx_line,
2265 "Difference of symbols in different sections is not supported");
2270 rel = (arelent *) xmalloc (sizeof (arelent));
2271 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
2272 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
2273 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
2274 rel->addend = fixp->fx_offset;
2276 r_type = fixp->fx_r_type;
2280 fprintf (stderr, "%s\n", bfd_get_reloc_code_name (r_type));
2283 rel->howto = bfd_reloc_type_lookup (stdoutput, r_type);
2284 if (rel->howto == NULL)
2286 as_bad_where (fixp->fx_file, fixp->fx_line,
2287 _("Cannot represent relocation type %s"),
2288 bfd_get_reloc_code_name (r_type));