1 /* tc-m68k.c -- Assemble for the m68k family
2 Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 Free Software Foundation, Inc.
6 This file is part of GAS, the GNU Assembler.
8 GAS is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GAS is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GAS; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
24 #include "safe-ctype.h"
27 #include "dwarf2dbg.h"
28 #include "dw2gencfi.h"
30 #include "opcode/m68k.h"
31 #include "m68k-parse.h"
37 /* This string holds the chars that always start a comment. If the
38 pre-processor is disabled, these aren't very useful. The macro
39 tc_comment_chars points to this. We use this, rather than the
40 usual comment_chars, so that the --bitwise-or option will work. */
41 #if defined (TE_SVR4) || defined (TE_DELTA)
42 const char *m68k_comment_chars = "|#";
44 const char *m68k_comment_chars = "|";
47 /* This array holds the chars that only start a comment at the beginning of
48 a line. If the line seems to have the form '# 123 filename'
49 .line and .file directives will appear in the pre-processed output */
50 /* Note that input_file.c hand checks for '#' at the beginning of the
51 first line of the input file. This is because the compiler outputs
52 #NO_APP at the beginning of its output. */
53 /* Also note that comments like this one will always work. */
54 const char line_comment_chars[] = "#*";
56 const char line_separator_chars[] = ";";
58 /* Chars that can be used to separate mant from exp in floating point nums */
59 const char EXP_CHARS[] = "eE";
61 /* Chars that mean this number is a floating point constant, as
62 in "0f12.456" or "0d1.2345e12". */
64 const char FLT_CHARS[] = "rRsSfFdDxXeEpP";
66 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
67 changed in read.c . Ideally it shouldn't have to know about it at all,
68 but nothing is ideal around here. */
70 const int md_reloc_size = 8; /* Size of relocation record */
72 /* Are we trying to generate PIC code? If so, absolute references
73 ought to be made into linkage table references or pc-relative
74 references. Not implemented. For ELF there are other means
75 to denote pic relocations. */
78 static int flag_short_refs; /* -l option */
79 static int flag_long_jumps; /* -S option */
80 static int flag_keep_pcrel; /* --pcrel option. */
82 #ifdef REGISTER_PREFIX_OPTIONAL
83 int flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
85 int flag_reg_prefix_optional;
88 /* Whether --register-prefix-optional was used on the command line. */
89 static int reg_prefix_optional_seen;
91 /* The floating point coprocessor to use by default. */
92 static enum m68k_register m68k_float_copnum = COP1;
94 /* If this is non-zero, then references to number(%pc) will be taken
95 to refer to number, rather than to %pc + number. */
96 static int m68k_abspcadd;
98 /* If this is non-zero, then the quick forms of the move, add, and sub
99 instructions are used when possible. */
100 static int m68k_quick = 1;
102 /* If this is non-zero, then if the size is not specified for a base
103 or outer displacement, the assembler assumes that the size should
105 static int m68k_rel32 = 1;
107 /* This is non-zero if m68k_rel32 was set from the command line. */
108 static int m68k_rel32_from_cmdline;
110 /* The default width to use for an index register when using a base
112 static enum m68k_size m68k_index_width_default = SIZE_LONG;
114 /* We want to warn if any text labels are misaligned. In order to get
115 the right line number, we need to record the line number for each
120 struct label_line *next;
127 /* The list of labels. */
129 static struct label_line *labels;
131 /* The current label. */
133 static struct label_line *current_label;
135 /* Its an arbitrary name: This means I don't approve of it */
136 /* See flames below */
137 static struct obstack robyn;
141 const char *m_operands;
142 unsigned long m_opcode;
146 struct m68k_incant *m_next;
149 #define getone(x) ((((x)->m_opcode)>>16)&0xffff)
150 #define gettwo(x) (((x)->m_opcode)&0xffff)
152 static const enum m68k_register m68000_control_regs[] = { 0 };
153 static const enum m68k_register m68010_control_regs[] = {
157 static const enum m68k_register m68020_control_regs[] = {
158 SFC, DFC, USP, VBR, CACR, CAAR, MSP, ISP,
161 static const enum m68k_register m68040_control_regs[] = {
162 SFC, DFC, CACR, TC, ITT0, ITT1, DTT0, DTT1,
163 USP, VBR, MSP, ISP, MMUSR, URP, SRP,
166 static const enum m68k_register m68060_control_regs[] = {
167 SFC, DFC, CACR, TC, ITT0, ITT1, DTT0, DTT1, BUSCR,
168 USP, VBR, URP, SRP, PCR,
171 static const enum m68k_register mcf_control_regs[] = {
172 CACR, TC, ITT0, ITT1, DTT0, DTT1, VBR, ROMBAR,
173 RAMBAR0, RAMBAR1, MBAR,
176 #define cpu32_control_regs m68010_control_regs
178 static const enum m68k_register *control_regs;
180 /* internal form of a 68020 instruction */
184 const char *args; /* list of opcode info */
187 int numo; /* Number of shorts in opcode */
190 struct m68k_op operands[6];
192 int nexp; /* number of exprs in use */
193 struct m68k_exp exprs[4];
195 int nfrag; /* Number of frags we have to produce */
198 int fragoff; /* Where in the current opcode the frag ends */
205 int nrel; /* Num of reloc strucs in use */
212 /* In a pc relative address the difference between the address
213 of the offset and the address that the offset is relative
214 to. This depends on the addressing mode. Basically this
215 is the value to put in the offset field to address the
216 first byte of the offset, without regarding the special
217 significance of some values (in the branch instruction, for
221 /* Whether this expression needs special pic relocation, and if
223 enum pic_relocation pic_reloc;
226 reloc[5]; /* Five is enough??? */
229 #define cpu_of_arch(x) ((x) & (m68000up|mcf))
230 #define float_of_arch(x) ((x) & mfloat)
231 #define mmu_of_arch(x) ((x) & mmmu)
232 #define arch_coldfire_p(x) (((x) & mcf) != 0)
234 /* Macros for determining if cpu supports a specific addressing mode */
235 #define HAVE_LONG_BRANCH(x) ((x) & (m68020|m68030|m68040|m68060|cpu32|mcf5407))
237 static struct m68k_it the_ins; /* the instruction being assembled */
239 #define op(ex) ((ex)->exp.X_op)
240 #define adds(ex) ((ex)->exp.X_add_symbol)
241 #define subs(ex) ((ex)->exp.X_op_symbol)
242 #define offs(ex) ((ex)->exp.X_add_number)
244 /* Macros for adding things to the m68k_it struct */
246 #define addword(w) the_ins.opcode[the_ins.numo++]=(w)
248 /* Static functions. */
250 static void insop PARAMS ((int, const struct m68k_incant *));
251 static void add_fix PARAMS ((int, struct m68k_exp *, int, int));
252 static void add_frag PARAMS ((symbolS *, offsetT, int));
254 /* Like addword, but goes BEFORE general operands */
258 const struct m68k_incant *opcode;
261 for (z = the_ins.numo; z > opcode->m_codenum; --z)
262 the_ins.opcode[z] = the_ins.opcode[z - 1];
263 for (z = 0; z < the_ins.nrel; z++)
264 the_ins.reloc[z].n += 2;
265 for (z = 0; z < the_ins.nfrag; z++)
266 the_ins.fragb[z].fragoff++;
267 the_ins.opcode[opcode->m_codenum] = w;
271 /* The numo+1 kludge is so we can hit the low order byte of the prev word.
274 add_fix (width, exp, pc_rel, pc_fix)
276 struct m68k_exp *exp;
280 the_ins.reloc[the_ins.nrel].n = ((width == 'B' || width == '3')
284 : (the_ins.numo*2)));
285 the_ins.reloc[the_ins.nrel].exp = exp->exp;
286 the_ins.reloc[the_ins.nrel].wid = width;
287 the_ins.reloc[the_ins.nrel].pcrel_fix = pc_fix;
289 the_ins.reloc[the_ins.nrel].pic_reloc = exp->pic_reloc;
291 the_ins.reloc[the_ins.nrel++].pcrel = pc_rel;
294 /* Cause an extra frag to be generated here, inserting up to 10 bytes
295 (that value is chosen in the frag_var call in md_assemble). TYPE
296 is the subtype of the frag to be generated; its primary type is
297 rs_machine_dependent.
299 The TYPE parameter is also used by md_convert_frag_1 and
300 md_estimate_size_before_relax. The appropriate type of fixup will
301 be emitted by md_convert_frag_1.
303 ADD becomes the FR_SYMBOL field of the frag, and OFF the FR_OFFSET. */
305 add_frag (add, off, type)
310 the_ins.fragb[the_ins.nfrag].fragoff = the_ins.numo;
311 the_ins.fragb[the_ins.nfrag].fadd = add;
312 the_ins.fragb[the_ins.nfrag].foff = off;
313 the_ins.fragb[the_ins.nfrag++].fragty = type;
317 (op (ex) != O_constant && op (ex) != O_big)
319 static char *crack_operand PARAMS ((char *str, struct m68k_op *opP));
320 static int get_num PARAMS ((struct m68k_exp *exp, int ok));
321 static void m68k_ip PARAMS ((char *));
322 static void insert_reg PARAMS ((const char *, int));
323 static void select_control_regs PARAMS ((void));
324 static void init_regtable PARAMS ((void));
325 static int reverse_16_bits PARAMS ((int in));
326 static int reverse_8_bits PARAMS ((int in));
327 static void install_gen_operand PARAMS ((int mode, int val));
328 static void install_operand PARAMS ((int mode, int val));
329 static void s_bss PARAMS ((int));
330 static void s_data1 PARAMS ((int));
331 static void s_data2 PARAMS ((int));
332 static void s_even PARAMS ((int));
333 static void s_proc PARAMS ((int));
334 static void mri_chip PARAMS ((void));
335 static void s_chip PARAMS ((int));
336 static void s_fopt PARAMS ((int));
337 static void s_opt PARAMS ((int));
338 static void s_reg PARAMS ((int));
339 static void s_restore PARAMS ((int));
340 static void s_save PARAMS ((int));
341 static void s_mri_if PARAMS ((int));
342 static void s_mri_else PARAMS ((int));
343 static void s_mri_endi PARAMS ((int));
344 static void s_mri_break PARAMS ((int));
345 static void s_mri_next PARAMS ((int));
346 static void s_mri_for PARAMS ((int));
347 static void s_mri_endf PARAMS ((int));
348 static void s_mri_repeat PARAMS ((int));
349 static void s_mri_until PARAMS ((int));
350 static void s_mri_while PARAMS ((int));
351 static void s_mri_endw PARAMS ((int));
352 static void md_convert_frag_1 PARAMS ((fragS *));
354 static int current_architecture;
363 static const struct m68k_cpu archs[] =
365 { m68000, "68000", 0 },
366 { m68010, "68010", 0 },
367 { m68020, "68020", 0 },
368 { m68030, "68030", 0 },
369 { m68040, "68040", 0 },
370 { m68060, "68060", 0 },
371 { cpu32, "cpu32", 0 },
372 { m68881, "68881", 0 },
373 { m68851, "68851", 0 },
374 { mcf5200, "5200", 0 },
375 { mcf5206e, "5206e", 0 },
376 { mcf5307, "5307", 0},
377 { mcf5407, "5407", 0},
378 /* Aliases (effectively, so far as gas is concerned) for the above
380 { m68020, "68k", 1 },
381 { m68000, "68008", 1 },
382 { m68000, "68302", 1 },
383 { m68000, "68306", 1 },
384 { m68000, "68307", 1 },
385 { m68000, "68322", 1 },
386 { m68000, "68356", 1 },
387 { m68000, "68ec000", 1 },
388 { m68000, "68hc000", 1 },
389 { m68000, "68hc001", 1 },
390 { m68020, "68ec020", 1 },
391 { m68030, "68ec030", 1 },
392 { m68040, "68ec040", 1 },
393 { m68060, "68ec060", 1 },
394 { cpu32, "68330", 1 },
395 { cpu32, "68331", 1 },
396 { cpu32, "68332", 1 },
397 { cpu32, "68333", 1 },
398 { cpu32, "68334", 1 },
399 { cpu32, "68336", 1 },
400 { cpu32, "68340", 1 },
401 { cpu32, "68341", 1 },
402 { cpu32, "68349", 1 },
403 { cpu32, "68360", 1 },
404 { m68881, "68882", 1 },
405 { mcf5200, "5202", 1 },
406 { mcf5200, "5204", 1 },
407 { mcf5200, "5206", 1 },
410 static const int n_archs = sizeof (archs) / sizeof (archs[0]);
412 /* This is the assembler relaxation table for m68k. m68k is a rich CISC
413 architecture and we have a lot of relaxation modes. */
415 /* Macros used in the relaxation code. */
416 #define TAB(x,y) (((x) << 2) + (y))
417 #define TABTYPE(x) ((x) >> 2)
419 /* Relaxation states. */
425 /* Here are all the relaxation modes we support. First we can relax ordinary
426 branches. On 68020 and higher and on CPU32 all branch instructions take
427 three forms, so on these CPUs all branches always remain as such. When we
428 have to expand to the LONG form on a 68000, though, we substitute an
429 absolute jump instead. This is a direct replacement for unconditional
430 branches and a branch over a jump for conditional branches. However, if the
431 user requires PIC and disables this with --pcrel, we can only relax between
432 BYTE and SHORT forms, punting if that isn't enough. This gives us four
433 different relaxation modes for branches: */
435 #define BRANCHBWL 0 /* branch byte, word, or long */
436 #define BRABSJUNC 1 /* absolute jump for LONG, unconditional */
437 #define BRABSJCOND 2 /* absolute jump for LONG, conditional */
438 #define BRANCHBW 3 /* branch byte or word */
440 /* We also relax coprocessor branches and DBcc's. All CPUs that support
441 coprocessor branches support them in word and long forms, so we have only
442 one relaxation mode for them. DBcc's are word only on all CPUs. We can
443 relax them to the LONG form with a branch-around sequence. This sequence
444 can use a long branch (if available) or an absolute jump (if acceptable).
445 This gives us two relaxation modes. If long branches are not available and
446 absolute jumps are not acceptable, we don't relax DBcc's. */
448 #define FBRANCH 4 /* coprocessor branch */
449 #define DBCCLBR 5 /* DBcc relaxable with a long branch */
450 #define DBCCABSJ 6 /* DBcc relaxable with an absolute jump */
452 /* That's all for instruction relaxation. However, we also relax PC-relative
453 operands. Specifically, we have three operand relaxation modes. On the
454 68000 PC-relative operands can only be 16-bit, but on 68020 and higher and
455 on CPU32 they may be 16-bit or 32-bit. For the latter we relax between the
456 two. Also PC+displacement+index operands in their simple form (with a non-
457 suppressed index without memory indirection) are supported on all CPUs, but
458 on the 68000 the displacement can be 8-bit only, whereas on 68020 and higher
459 and on CPU32 we relax it to SHORT and LONG forms as well using the extended
460 form of the PC+displacement+index operand. Finally, some absolute operands
461 can be relaxed down to 16-bit PC-relative. */
463 #define PCREL1632 7 /* 16-bit or 32-bit PC-relative */
464 #define PCINDEX 8 /* PC+displacement+index */
465 #define ABSTOPCREL 9 /* absolute relax down to 16-bit PC-relative */
467 /* Note that calls to frag_var need to specify the maximum expansion
468 needed; this is currently 10 bytes for DBCC. */
471 How far Forward this mode will reach:
472 How far Backward this mode will reach:
473 How many bytes this mode will add to the size of the frag
474 Which mode to go to if the offset won't fit in this one
476 Please check tc-m68k.h:md_prepare_relax_scan if changing this table. */
477 relax_typeS md_relax_table[] =
479 { 127, -128, 0, TAB (BRANCHBWL, SHORT) },
480 { 32767, -32768, 2, TAB (BRANCHBWL, LONG) },
484 { 127, -128, 0, TAB (BRABSJUNC, SHORT) },
485 { 32767, -32768, 2, TAB (BRABSJUNC, LONG) },
489 { 127, -128, 0, TAB (BRABSJCOND, SHORT) },
490 { 32767, -32768, 2, TAB (BRABSJCOND, LONG) },
494 { 127, -128, 0, TAB (BRANCHBW, SHORT) },
499 { 1, 1, 0, 0 }, /* FBRANCH doesn't come BYTE */
500 { 32767, -32768, 2, TAB (FBRANCH, LONG) },
504 { 1, 1, 0, 0 }, /* DBCC doesn't come BYTE */
505 { 32767, -32768, 2, TAB (DBCCLBR, LONG) },
509 { 1, 1, 0, 0 }, /* DBCC doesn't come BYTE */
510 { 32767, -32768, 2, TAB (DBCCABSJ, LONG) },
514 { 1, 1, 0, 0 }, /* PCREL1632 doesn't come BYTE */
515 { 32767, -32768, 2, TAB (PCREL1632, LONG) },
519 { 125, -130, 0, TAB (PCINDEX, SHORT) },
520 { 32765, -32770, 2, TAB (PCINDEX, LONG) },
524 { 1, 1, 0, 0 }, /* ABSTOPCREL doesn't come BYTE */
525 { 32767, -32768, 2, TAB (ABSTOPCREL, LONG) },
530 /* These are the machine dependent pseudo-ops. These are included so
531 the assembler can work on the output from the SUN C compiler, which
535 /* This table describes all the machine specific pseudo-ops the assembler
536 has to support. The fields are:
537 pseudo-op name without dot
538 function to call to execute this pseudo-op
539 Integer arg to pass to the function
541 const pseudo_typeS md_pseudo_table[] =
543 {"data1", s_data1, 0},
544 {"data2", s_data2, 0},
547 {"skip", s_space, 0},
549 #if defined (TE_SUN3) || defined (OBJ_ELF)
550 {"align", s_align_bytes, 0},
553 {"swbeg", s_ignore, 0},
555 {"extend", float_cons, 'x'},
556 {"ldouble", float_cons, 'x'},
558 /* The following pseudo-ops are supported for MRI compatibility. */
560 {"comline", s_space, 1},
562 {"mask2", s_ignore, 0},
565 {"restore", s_restore, 0},
569 {"if.b", s_mri_if, 'b'},
570 {"if.w", s_mri_if, 'w'},
571 {"if.l", s_mri_if, 'l'},
572 {"else", s_mri_else, 0},
573 {"else.s", s_mri_else, 's'},
574 {"else.l", s_mri_else, 'l'},
575 {"endi", s_mri_endi, 0},
576 {"break", s_mri_break, 0},
577 {"break.s", s_mri_break, 's'},
578 {"break.l", s_mri_break, 'l'},
579 {"next", s_mri_next, 0},
580 {"next.s", s_mri_next, 's'},
581 {"next.l", s_mri_next, 'l'},
582 {"for", s_mri_for, 0},
583 {"for.b", s_mri_for, 'b'},
584 {"for.w", s_mri_for, 'w'},
585 {"for.l", s_mri_for, 'l'},
586 {"endf", s_mri_endf, 0},
587 {"repeat", s_mri_repeat, 0},
588 {"until", s_mri_until, 0},
589 {"until.b", s_mri_until, 'b'},
590 {"until.w", s_mri_until, 'w'},
591 {"until.l", s_mri_until, 'l'},
592 {"while", s_mri_while, 0},
593 {"while.b", s_mri_while, 'b'},
594 {"while.w", s_mri_while, 'w'},
595 {"while.l", s_mri_while, 'l'},
596 {"endw", s_mri_endw, 0},
601 /* The mote pseudo ops are put into the opcode table, since they
602 don't start with a . they look like opcodes to gas.
606 extern void obj_coff_section PARAMS ((int));
609 const pseudo_typeS mote_pseudo_table[] =
622 {"xdef", s_globl, 0},
624 {"align", s_align_bytes, 0},
626 {"align", s_align_ptwo, 0},
629 {"sect", obj_coff_section, 0},
630 {"section", obj_coff_section, 0},
635 #define issbyte(x) ((x)>=-128 && (x)<=127)
636 #define isubyte(x) ((x)>=0 && (x)<=255)
637 #define issword(x) ((x)>=-32768 && (x)<=32767)
638 #define isuword(x) ((x)>=0 && (x)<=65535)
640 #define isbyte(x) ((x)>= -255 && (x)<=255)
641 #define isword(x) ((x)>=-65536 && (x)<=65535)
642 #define islong(x) (1)
644 extern char *input_line_pointer;
646 static char notend_table[256];
647 static char alt_notend_table[256];
649 (! (notend_table[(unsigned char) *s] \
651 && alt_notend_table[(unsigned char) s[1]])))
653 #if defined (M68KCOFF) && !defined (BFD_ASSEMBLER)
655 #ifdef NO_PCREL_RELOCS
658 make_pcrel_absolute(fixP, add_number)
662 register unsigned char *opcode = fixP->fx_frag->fr_opcode;
664 /* rewrite the PC relative instructions to absolute address ones.
665 * these are rumoured to be faster, and the apollo linker refuses
666 * to deal with the PC relative relocations.
668 if (opcode[0] == 0x60 && opcode[1] == 0xff) /* BRA -> JMP */
673 else if (opcode[0] == 0x61 && opcode[1] == 0xff) /* BSR -> JSR */
679 as_fatal (_("Unknown PC relative instruction"));
684 #endif /* NO_PCREL_RELOCS */
687 tc_coff_fix2rtype (fixP)
690 if (fixP->fx_tcbit && fixP->fx_size == 4)
691 return R_RELLONG_NEG;
692 #ifdef NO_PCREL_RELOCS
693 know (fixP->fx_pcrel == 0);
694 return (fixP->fx_size == 1 ? R_RELBYTE
695 : fixP->fx_size == 2 ? R_DIR16
698 return (fixP->fx_pcrel ?
699 (fixP->fx_size == 1 ? R_PCRBYTE :
700 fixP->fx_size == 2 ? R_PCRWORD :
702 (fixP->fx_size == 1 ? R_RELBYTE :
703 fixP->fx_size == 2 ? R_RELWORD :
712 /* Return zero if the reference to SYMBOL from within the same segment may
715 /* On an ELF system, we can't relax an externally visible symbol,
716 because it may be overridden by a shared library. However, if
717 TARGET_OS is "elf", then we presume that we are assembling for an
718 embedded system, in which case we don't have to worry about shared
719 libraries, and we can relax any external sym. */
721 #define relaxable_symbol(symbol) \
722 (!((S_IS_EXTERNAL (symbol) && strcmp (TARGET_OS, "elf") != 0) \
723 || S_IS_WEAK (symbol)))
725 /* Compute the relocation code for a fixup of SIZE bytes, using pc
726 relative relocation if PCREL is non-zero. PIC says whether a special
727 pic relocation was requested. */
729 static bfd_reloc_code_real_type get_reloc_code
730 PARAMS ((int, int, enum pic_relocation));
732 static bfd_reloc_code_real_type
733 get_reloc_code (size, pcrel, pic)
736 enum pic_relocation pic;
744 return BFD_RELOC_8_GOT_PCREL;
746 return BFD_RELOC_16_GOT_PCREL;
748 return BFD_RELOC_32_GOT_PCREL;
756 return BFD_RELOC_8_GOTOFF;
758 return BFD_RELOC_16_GOTOFF;
760 return BFD_RELOC_32_GOTOFF;
768 return BFD_RELOC_8_PLT_PCREL;
770 return BFD_RELOC_16_PLT_PCREL;
772 return BFD_RELOC_32_PLT_PCREL;
780 return BFD_RELOC_8_PLTOFF;
782 return BFD_RELOC_16_PLTOFF;
784 return BFD_RELOC_32_PLTOFF;
794 return BFD_RELOC_8_PCREL;
796 return BFD_RELOC_16_PCREL;
798 return BFD_RELOC_32_PCREL;
818 as_bad (_("Can not do %d byte pc-relative relocation"), size);
820 as_bad (_("Can not do %d byte pc-relative pic relocation"), size);
825 as_bad (_("Can not do %d byte relocation"), size);
827 as_bad (_("Can not do %d byte pic relocation"), size);
830 return BFD_RELOC_NONE;
833 /* Here we decide which fixups can be adjusted to make them relative
834 to the beginning of the section instead of the symbol. Basically
835 we need to make sure that the dynamic relocations are done
836 correctly, so in some cases we force the original symbol to be
839 tc_m68k_fix_adjustable (fixP)
842 /* adjust_reloc_syms doesn't know about the GOT */
843 switch (fixP->fx_r_type)
845 case BFD_RELOC_8_GOT_PCREL:
846 case BFD_RELOC_16_GOT_PCREL:
847 case BFD_RELOC_32_GOT_PCREL:
848 case BFD_RELOC_8_GOTOFF:
849 case BFD_RELOC_16_GOTOFF:
850 case BFD_RELOC_32_GOTOFF:
851 case BFD_RELOC_8_PLT_PCREL:
852 case BFD_RELOC_16_PLT_PCREL:
853 case BFD_RELOC_32_PLT_PCREL:
854 case BFD_RELOC_8_PLTOFF:
855 case BFD_RELOC_16_PLTOFF:
856 case BFD_RELOC_32_PLTOFF:
859 case BFD_RELOC_VTABLE_INHERIT:
860 case BFD_RELOC_VTABLE_ENTRY:
870 #define get_reloc_code(SIZE,PCREL,OTHER) NO_RELOC
872 #define relaxable_symbol(symbol) 1
879 tc_gen_reloc (section, fixp)
880 asection *section ATTRIBUTE_UNUSED;
884 bfd_reloc_code_real_type code;
886 /* If the tcbit is set, then this was a fixup of a negative value
887 that was never resolved. We do not have a reloc to handle this,
888 so just return. We assume that other code will have detected this
889 situation and produced a helpful error message, so we just tell the
890 user that the reloc cannot be produced. */
894 as_bad_where (fixp->fx_file, fixp->fx_line,
895 _("Unable to produce reloc against symbol '%s'"),
896 S_GET_NAME (fixp->fx_addsy));
900 if (fixp->fx_r_type != BFD_RELOC_NONE)
902 code = fixp->fx_r_type;
904 /* Since DIFF_EXPR_OK is defined in tc-m68k.h, it is possible
905 that fixup_segment converted a non-PC relative reloc into a
906 PC relative reloc. In such a case, we need to convert the
913 code = BFD_RELOC_8_PCREL;
916 code = BFD_RELOC_16_PCREL;
919 code = BFD_RELOC_32_PCREL;
921 case BFD_RELOC_8_PCREL:
922 case BFD_RELOC_16_PCREL:
923 case BFD_RELOC_32_PCREL:
924 case BFD_RELOC_8_GOT_PCREL:
925 case BFD_RELOC_16_GOT_PCREL:
926 case BFD_RELOC_32_GOT_PCREL:
927 case BFD_RELOC_8_GOTOFF:
928 case BFD_RELOC_16_GOTOFF:
929 case BFD_RELOC_32_GOTOFF:
930 case BFD_RELOC_8_PLT_PCREL:
931 case BFD_RELOC_16_PLT_PCREL:
932 case BFD_RELOC_32_PLT_PCREL:
933 case BFD_RELOC_8_PLTOFF:
934 case BFD_RELOC_16_PLTOFF:
935 case BFD_RELOC_32_PLTOFF:
938 as_bad_where (fixp->fx_file, fixp->fx_line,
939 _("Cannot make %s relocation PC relative"),
940 bfd_get_reloc_code_name (code));
946 #define F(SZ,PCREL) (((SZ) << 1) + (PCREL))
947 switch (F (fixp->fx_size, fixp->fx_pcrel))
949 #define MAP(SZ,PCREL,TYPE) case F(SZ,PCREL): code = (TYPE); break
950 MAP (1, 0, BFD_RELOC_8);
951 MAP (2, 0, BFD_RELOC_16);
952 MAP (4, 0, BFD_RELOC_32);
953 MAP (1, 1, BFD_RELOC_8_PCREL);
954 MAP (2, 1, BFD_RELOC_16_PCREL);
955 MAP (4, 1, BFD_RELOC_32_PCREL);
963 reloc = (arelent *) xmalloc (sizeof (arelent));
964 reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
965 *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
966 reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
969 reloc->addend = fixp->fx_addnumber;
974 reloc->addend = fixp->fx_addnumber;
976 reloc->addend = (section->vma
977 /* Explicit sign extension in case char is
979 + ((fixp->fx_pcrel_adjust & 0xff) ^ 0x80) - 0x80
981 + md_pcrel_from (fixp));
984 reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
985 assert (reloc->howto != 0);
990 #endif /* BFD_ASSEMBLER */
992 /* Handle of the OPCODE hash table. NULL means any use before
993 m68k_ip_begin() will crash. */
994 static struct hash_control *op_hash;
996 /* Assemble an m68k instruction. */
1003 register struct m68k_op *opP;
1004 register const struct m68k_incant *opcode;
1005 register const char *s;
1006 register int tmpreg = 0, baseo = 0, outro = 0, nextword;
1007 char *pdot, *pdotmove;
1008 enum m68k_size siz1, siz2;
1012 LITTLENUM_TYPE words[6];
1013 LITTLENUM_TYPE *wordp;
1014 unsigned long ok_arch = 0;
1016 if (*instring == ' ')
1017 instring++; /* skip leading whitespace */
1019 /* Scan up to end of operation-code, which MUST end in end-of-string
1020 or exactly 1 space. */
1022 for (p = instring; *p != '\0'; p++)
1032 the_ins.error = _("No operator");
1036 /* p now points to the end of the opcode name, probably whitespace.
1037 Make sure the name is null terminated by clobbering the
1038 whitespace, look it up in the hash table, then fix it back.
1039 Remove a dot, first, since the opcode tables have none. */
1042 for (pdotmove = pdot; pdotmove < p; pdotmove++)
1043 *pdotmove = pdotmove[1];
1049 opcode = (const struct m68k_incant *) hash_find (op_hash, instring);
1054 for (pdotmove = p; pdotmove > pdot; pdotmove--)
1055 *pdotmove = pdotmove[-1];
1062 the_ins.error = _("Unknown operator");
1066 /* found a legitimate opcode, start matching operands */
1070 if (opcode->m_operands == 0)
1072 char *old = input_line_pointer;
1074 input_line_pointer = p;
1075 /* Ahh - it's a motorola style psuedo op */
1076 mote_pseudo_table[opcode->m_opnum].poc_handler
1077 (mote_pseudo_table[opcode->m_opnum].poc_val);
1078 input_line_pointer = old;
1084 if (flag_mri && opcode->m_opnum == 0)
1086 /* In MRI mode, random garbage is allowed after an instruction
1087 which accepts no operands. */
1088 the_ins.args = opcode->m_operands;
1089 the_ins.numargs = opcode->m_opnum;
1090 the_ins.numo = opcode->m_codenum;
1091 the_ins.opcode[0] = getone (opcode);
1092 the_ins.opcode[1] = gettwo (opcode);
1096 for (opP = &the_ins.operands[0]; *p; opP++)
1098 p = crack_operand (p, opP);
1102 the_ins.error = opP->error;
1107 opsfound = opP - &the_ins.operands[0];
1109 /* This ugly hack is to support the floating pt opcodes in their
1110 standard form. Essentially, we fake a first enty of type COP#1 */
1111 if (opcode->m_operands[0] == 'I')
1115 for (n = opsfound; n > 0; --n)
1116 the_ins.operands[n] = the_ins.operands[n - 1];
1118 memset ((char *) (&the_ins.operands[0]), '\0',
1119 sizeof (the_ins.operands[0]));
1120 the_ins.operands[0].mode = CONTROL;
1121 the_ins.operands[0].reg = m68k_float_copnum;
1125 /* We've got the operands. Find an opcode that'll accept them */
1128 /* If we didn't get the right number of ops, or we have no
1129 common model with this pattern then reject this pattern. */
1131 ok_arch |= opcode->m_arch;
1132 if (opsfound != opcode->m_opnum
1133 || ((opcode->m_arch & current_architecture) == 0))
1137 for (s = opcode->m_operands, opP = &the_ins.operands[0];
1141 /* Warning: this switch is huge! */
1142 /* I've tried to organize the cases into this order:
1143 non-alpha first, then alpha by letter. Lower-case
1144 goes directly before uppercase counterpart. */
1145 /* Code with multiple case ...: gets sorted by the lowest
1146 case ... it belongs to. I hope this makes sense. */
1252 if (opP->reg == PC || opP->reg == ZPC)
1269 if (opP->reg == PC || opP->reg == ZPC)
1288 if (opP->reg == PC || opP->reg == ZPC)
1298 if (opP->mode != IMMED)
1300 else if (s[1] == 'b'
1301 && ! isvar (&opP->disp)
1302 && (opP->disp.exp.X_op != O_constant
1303 || ! isbyte (opP->disp.exp.X_add_number)))
1305 else if (s[1] == 'B'
1306 && ! isvar (&opP->disp)
1307 && (opP->disp.exp.X_op != O_constant
1308 || ! issbyte (opP->disp.exp.X_add_number)))
1310 else if (s[1] == 'w'
1311 && ! isvar (&opP->disp)
1312 && (opP->disp.exp.X_op != O_constant
1313 || ! isword (opP->disp.exp.X_add_number)))
1315 else if (s[1] == 'W'
1316 && ! isvar (&opP->disp)
1317 && (opP->disp.exp.X_op != O_constant
1318 || ! issword (opP->disp.exp.X_add_number)))
1324 if (opP->mode != IMMED)
1329 if (opP->mode == AREG
1330 || opP->mode == CONTROL
1331 || opP->mode == FPREG
1332 || opP->mode == IMMED
1333 || opP->mode == REGLST
1334 || (opP->mode != ABSL
1336 || opP->reg == ZPC)))
1341 if (opP->mode == CONTROL
1342 || opP->mode == FPREG
1343 || opP->mode == REGLST
1344 || opP->mode == IMMED
1345 || (opP->mode != ABSL
1347 || opP->reg == ZPC)))
1375 if (opP->mode == CONTROL
1376 || opP->mode == FPREG
1377 || opP->mode == REGLST)
1382 if (opP->mode != AINC)
1387 if (opP->mode != ADEC)
1437 if (opP->reg == PC || opP->reg == ZPC)
1458 case '~': /* For now! (JF FOO is this right?) */
1480 if (opP->mode != CONTROL
1481 || (opP->reg != TT0 && opP->reg != TT1))
1486 if (opP->mode != AREG)
1491 if (opP->mode != AINDR)
1496 if (opP->mode != ABSL
1498 && strncmp (instring, "jbsr", 4) == 0))
1503 if (opP->mode != CONTROL || opP->reg != CCR)
1508 if (opP->mode != DISP
1510 || opP->reg > ADDR7)
1515 if (opP->mode != DREG)
1520 if (opP->reg != ACC)
1525 if (opP->mode != FPREG)
1530 if (opP->reg != MACSR)
1535 if (opP->reg != MASK)
1540 if (opP->mode != CONTROL
1547 if (opP->mode != CONTROL
1549 || opP->reg > last_movec_reg)
1553 const enum m68k_register *rp;
1554 for (rp = control_regs; *rp; rp++)
1555 if (*rp == opP->reg)
1563 if (opP->mode != IMMED)
1569 if (opP->mode == DREG
1570 || opP->mode == AREG
1571 || opP->mode == FPREG)
1580 opP->mask = 1 << (opP->reg - DATA0);
1583 opP->mask = 1 << (opP->reg - ADDR0 + 8);
1586 opP->mask = 1 << (opP->reg - FP0 + 16);
1594 else if (opP->mode == CONTROL)
1603 opP->mask = 1 << 24;
1606 opP->mask = 1 << 25;
1609 opP->mask = 1 << 26;
1618 else if (opP->mode != REGLST)
1620 else if (s[1] == '8' && (opP->mask & 0x0ffffff) != 0)
1622 else if (s[1] == '3' && (opP->mask & 0x7000000) != 0)
1627 if (opP->mode != IMMED)
1629 else if (opP->disp.exp.X_op != O_constant
1630 || ! issbyte (opP->disp.exp.X_add_number))
1632 else if (! m68k_quick
1633 && instring[3] != 'q'
1634 && instring[4] != 'q')
1639 if (opP->mode != DREG
1640 && opP->mode != IMMED
1641 && opP->mode != ABSL)
1646 if (opP->mode != IMMED)
1648 else if (opP->disp.exp.X_op != O_constant
1649 || opP->disp.exp.X_add_number < 1
1650 || opP->disp.exp.X_add_number > 8)
1652 else if (! m68k_quick
1653 && (strncmp (instring, "add", 3) == 0
1654 || strncmp (instring, "sub", 3) == 0)
1655 && instring[3] != 'q')
1660 if (opP->mode != DREG && opP->mode != AREG)
1665 if (opP->mode != AINDR
1666 && (opP->mode != BASE
1668 && opP->reg != ZADDR0)
1669 || opP->disp.exp.X_op != O_absent
1670 || ((opP->index.reg < DATA0
1671 || opP->index.reg > DATA7)
1672 && (opP->index.reg < ADDR0
1673 || opP->index.reg > ADDR7))
1674 || opP->index.size != SIZE_UNSPEC
1675 || opP->index.scale != 1))
1680 if (opP->mode != CONTROL
1681 || ! (opP->reg == FPI
1683 || opP->reg == FPC))
1688 if (opP->mode != CONTROL || opP->reg != SR)
1693 if (opP->mode != IMMED)
1695 else if (opP->disp.exp.X_op != O_constant
1696 || opP->disp.exp.X_add_number < 0
1697 || opP->disp.exp.X_add_number > 7)
1702 if (opP->mode != CONTROL || opP->reg != USP)
1706 /* JF these are out of order. We could put them
1707 in order if we were willing to put up with
1708 bunches of #ifdef m68851s in the code.
1710 Don't forget that you need these operands
1711 to use 68030 MMU instructions. */
1713 /* Memory addressing mode used by pflushr */
1715 if (opP->mode == CONTROL
1716 || opP->mode == FPREG
1717 || opP->mode == DREG
1718 || opP->mode == AREG
1719 || opP->mode == REGLST)
1721 /* We should accept immediate operands, but they
1722 supposedly have to be quad word, and we don't
1723 handle that. I would like to see what a Motorola
1724 assembler does before doing something here. */
1725 if (opP->mode == IMMED)
1730 if (opP->mode != CONTROL
1731 || (opP->reg != SFC && opP->reg != DFC))
1736 if (opP->mode != CONTROL || opP->reg != TC)
1741 if (opP->mode != CONTROL || opP->reg != AC)
1746 if (opP->mode != CONTROL
1749 && opP->reg != SCC))
1754 if (opP->mode != CONTROL
1760 if (opP->mode != CONTROL
1763 && opP->reg != CRP))
1768 if (opP->mode != CONTROL
1769 || (!(opP->reg >= BAD && opP->reg <= BAD + 7)
1770 && !(opP->reg >= BAC && opP->reg <= BAC + 7)))
1775 if (opP->mode != CONTROL || opP->reg != PSR)
1780 if (opP->mode != CONTROL || opP->reg != PCSR)
1785 if (opP->mode != CONTROL
1792 } /* not a cache specifier. */
1796 if (opP->mode != ABSL)
1801 if (opP->reg < DATA0L || opP->reg > ADDR7U)
1803 /* FIXME: kludge instead of fixing parser:
1804 upper/lower registers are *not* CONTROL
1805 registers, but ordinary ones. */
1806 if ((opP->reg >= DATA0L && opP->reg <= DATA7L)
1807 || (opP->reg >= DATA0U && opP->reg <= DATA7U))
1815 } /* switch on type of operand */
1819 } /* for each operand */
1820 } /* if immediately wrong */
1827 opcode = opcode->m_next;
1832 && !(ok_arch & current_architecture))
1837 _("invalid instruction for this architecture; needs "));
1838 cp = buf + strlen (buf);
1842 strcpy (cp, _("fpu (68040, 68060 or 68881/68882)"));
1845 strcpy (cp, _("mmu (68030 or 68851)"));
1848 strcpy (cp, _("68020 or higher"));
1851 strcpy (cp, _("68000 or higher"));
1854 strcpy (cp, _("68010 or higher"));
1858 int got_one = 0, idx;
1860 idx < (int) (sizeof (archs) / sizeof (archs[0]));
1863 if ((archs[idx].arch & ok_arch)
1864 && ! archs[idx].alias)
1868 strcpy (cp, " or ");
1872 strcpy (cp, archs[idx].name);
1878 cp = xmalloc (strlen (buf) + 1);
1883 the_ins.error = _("operands mismatch");
1885 } /* Fell off the end */
1890 /* now assemble it */
1892 the_ins.args = opcode->m_operands;
1893 the_ins.numargs = opcode->m_opnum;
1894 the_ins.numo = opcode->m_codenum;
1895 the_ins.opcode[0] = getone (opcode);
1896 the_ins.opcode[1] = gettwo (opcode);
1898 for (s = the_ins.args, opP = &the_ins.operands[0]; *s; s += 2, opP++)
1900 /* This switch is a doozy.
1901 Watch the first step; its a big one! */
1929 tmpreg = 0x3c; /* 7.4 */
1930 if (strchr ("bwl", s[1]))
1931 nextword = get_num (&opP->disp, 80);
1933 nextword = get_num (&opP->disp, 0);
1934 if (isvar (&opP->disp))
1935 add_fix (s[1], &opP->disp, 0, 0);
1939 if (!isbyte (nextword))
1940 opP->error = _("operand out of range");
1945 if (!isword (nextword))
1946 opP->error = _("operand out of range");
1951 if (!issword (nextword))
1952 opP->error = _("operand out of range");
1957 addword (nextword >> 16);
1984 /* We gotta put out some float */
1985 if (op (&opP->disp) != O_big)
1990 /* Can other cases happen here? */
1991 if (op (&opP->disp) != O_constant)
1994 val = (valueT) offs (&opP->disp);
1998 generic_bignum[gencnt] = (LITTLENUM_TYPE) val;
1999 val >>= LITTLENUM_NUMBER_OF_BITS;
2003 offs (&opP->disp) = gencnt;
2005 if (offs (&opP->disp) > 0)
2007 if (offs (&opP->disp) > baseo)
2009 as_warn (_("Bignum too big for %c format; truncated"),
2011 offs (&opP->disp) = baseo;
2013 baseo -= offs (&opP->disp);
2016 for (wordp = generic_bignum + offs (&opP->disp) - 1;
2017 offs (&opP->disp)--;
2022 gen_to_words (words, baseo, (long) outro);
2023 for (wordp = words; baseo--; wordp++)
2027 tmpreg = opP->reg - DATA; /* 0.dreg */
2030 tmpreg = 0x08 + opP->reg - ADDR; /* 1.areg */
2033 tmpreg = 0x10 + opP->reg - ADDR; /* 2.areg */
2036 tmpreg = 0x20 + opP->reg - ADDR; /* 4.areg */
2039 tmpreg = 0x18 + opP->reg - ADDR; /* 3.areg */
2043 nextword = get_num (&opP->disp, 80);
2046 && ! isvar (&opP->disp)
2049 opP->disp.exp.X_op = O_symbol;
2050 #ifndef BFD_ASSEMBLER
2051 opP->disp.exp.X_add_symbol = &abs_symbol;
2053 opP->disp.exp.X_add_symbol =
2054 section_symbol (absolute_section);
2058 /* Force into index mode. Hope this works */
2060 /* We do the first bit for 32-bit displacements, and the
2061 second bit for 16 bit ones. It is possible that we
2062 should make the default be WORD instead of LONG, but
2063 I think that'd break GCC, so we put up with a little
2064 inefficiency for the sake of working output. */
2066 if (!issword (nextword)
2067 || (isvar (&opP->disp)
2068 && ((opP->disp.size == SIZE_UNSPEC
2069 && flag_short_refs == 0
2070 && cpu_of_arch (current_architecture) >= m68020
2071 && ! arch_coldfire_p (current_architecture))
2072 || opP->disp.size == SIZE_LONG)))
2074 if (cpu_of_arch (current_architecture) < m68020
2075 || arch_coldfire_p (current_architecture))
2077 _("displacement too large for this architecture; needs 68020 or higher");
2079 tmpreg = 0x3B; /* 7.3 */
2081 tmpreg = 0x30 + opP->reg - ADDR; /* 6.areg */
2082 if (isvar (&opP->disp))
2086 if (opP->disp.size == SIZE_LONG
2088 /* If the displacement needs pic
2089 relocation it cannot be relaxed. */
2090 || opP->disp.pic_reloc != pic_none
2095 add_fix ('l', &opP->disp, 1, 2);
2099 add_frag (adds (&opP->disp),
2101 TAB (PCREL1632, SZ_UNDEF));
2108 add_fix ('l', &opP->disp, 0, 0);
2113 addword (nextword >> 16);
2118 tmpreg = 0x3A; /* 7.2 */
2120 tmpreg = 0x28 + opP->reg - ADDR; /* 5.areg */
2122 if (isvar (&opP->disp))
2126 add_fix ('w', &opP->disp, 1, 0);
2129 add_fix ('w', &opP->disp, 0, 0);
2139 baseo = get_num (&opP->disp, 80);
2140 if (opP->mode == POST || opP->mode == PRE)
2141 outro = get_num (&opP->odisp, 80);
2142 /* Figure out the `addressing mode'.
2143 Also turn on the BASE_DISABLE bit, if needed. */
2144 if (opP->reg == PC || opP->reg == ZPC)
2146 tmpreg = 0x3b; /* 7.3 */
2147 if (opP->reg == ZPC)
2150 else if (opP->reg == 0)
2153 tmpreg = 0x30; /* 6.garbage */
2155 else if (opP->reg >= ZADDR0 && opP->reg <= ZADDR7)
2158 tmpreg = 0x30 + opP->reg - ZADDR0;
2161 tmpreg = 0x30 + opP->reg - ADDR; /* 6.areg */
2163 siz1 = opP->disp.size;
2164 if (opP->mode == POST || opP->mode == PRE)
2165 siz2 = opP->odisp.size;
2169 /* Index register stuff */
2170 if (opP->index.reg != 0
2171 && opP->index.reg >= DATA
2172 && opP->index.reg <= ADDR7)
2174 nextword |= (opP->index.reg - DATA) << 12;
2176 if (opP->index.size == SIZE_LONG
2177 || (opP->index.size == SIZE_UNSPEC
2178 && m68k_index_width_default == SIZE_LONG))
2181 if ((opP->index.scale != 1
2182 && cpu_of_arch (current_architecture) < m68020)
2183 || (opP->index.scale == 8
2184 && arch_coldfire_p (current_architecture)))
2187 _("scale factor invalid on this architecture; needs cpu32 or 68020 or higher");
2190 if (arch_coldfire_p (current_architecture)
2191 && opP->index.size == SIZE_WORD)
2192 opP->error = _("invalid index size for coldfire");
2194 switch (opP->index.scale)
2211 GET US OUT OF HERE! */
2213 /* Must be INDEX, with an index register. Address
2214 register cannot be ZERO-PC, and either :b was
2215 forced, or we know it will fit. For a 68000 or
2216 68010, force this mode anyways, because the
2217 larger modes aren't supported. */
2218 if (opP->mode == BASE
2219 && ((opP->reg >= ADDR0
2220 && opP->reg <= ADDR7)
2223 if (siz1 == SIZE_BYTE
2224 || cpu_of_arch (current_architecture) < m68020
2225 || arch_coldfire_p (current_architecture)
2226 || (siz1 == SIZE_UNSPEC
2227 && ! isvar (&opP->disp)
2228 && issbyte (baseo)))
2230 nextword += baseo & 0xff;
2232 if (isvar (&opP->disp))
2234 /* Do a byte relocation. If it doesn't
2235 fit (possible on m68000) let the
2236 fixup processing complain later. */
2238 add_fix ('B', &opP->disp, 1, 1);
2240 add_fix ('B', &opP->disp, 0, 0);
2242 else if (siz1 != SIZE_BYTE)
2244 if (siz1 != SIZE_UNSPEC)
2245 as_warn (_("Forcing byte displacement"));
2246 if (! issbyte (baseo))
2247 opP->error = _("byte displacement out of range");
2252 else if (siz1 == SIZE_UNSPEC
2254 && isvar (&opP->disp)
2255 && subs (&opP->disp) == NULL
2257 /* If the displacement needs pic
2258 relocation it cannot be relaxed. */
2259 && opP->disp.pic_reloc == pic_none
2263 /* The code in md_convert_frag_1 needs to be
2264 able to adjust nextword. Call frag_grow
2265 to ensure that we have enough space in
2266 the frag obstack to make all the bytes
2269 nextword += baseo & 0xff;
2271 add_frag (adds (&opP->disp), offs (&opP->disp),
2272 TAB (PCINDEX, SZ_UNDEF));
2280 nextword |= 0x40; /* No index reg */
2281 if (opP->index.reg >= ZDATA0
2282 && opP->index.reg <= ZDATA7)
2283 nextword |= (opP->index.reg - ZDATA0) << 12;
2284 else if (opP->index.reg >= ZADDR0
2285 || opP->index.reg <= ZADDR7)
2286 nextword |= (opP->index.reg - ZADDR0 + 8) << 12;
2289 /* It isn't simple. */
2291 if (cpu_of_arch (current_architecture) < m68020
2292 || arch_coldfire_p (current_architecture))
2294 _("invalid operand mode for this architecture; needs 68020 or higher");
2297 /* If the guy specified a width, we assume that it is
2298 wide enough. Maybe it isn't. If so, we lose. */
2302 if (isvar (&opP->disp)
2304 : ! issword (baseo))
2309 else if (! isvar (&opP->disp) && baseo == 0)
2318 as_warn (_(":b not permitted; defaulting to :w"));
2328 /* Figure out innner displacement stuff */
2329 if (opP->mode == POST || opP->mode == PRE)
2331 if (cpu_of_arch (current_architecture) & cpu32)
2332 opP->error = _("invalid operand mode for this architecture; needs 68020 or higher");
2336 if (isvar (&opP->odisp)
2338 : ! issword (outro))
2343 else if (! isvar (&opP->odisp) && outro == 0)
2352 as_warn (_(":b not permitted; defaulting to :w"));
2361 if (opP->mode == POST
2362 && (nextword & 0x40) == 0)
2367 if (siz1 != SIZE_UNSPEC && isvar (&opP->disp))
2369 if (opP->reg == PC || opP->reg == ZPC)
2370 add_fix (siz1 == SIZE_LONG ? 'l' : 'w', &opP->disp, 1, 2);
2372 add_fix (siz1 == SIZE_LONG ? 'l' : 'w', &opP->disp, 0, 0);
2374 if (siz1 == SIZE_LONG)
2375 addword (baseo >> 16);
2376 if (siz1 != SIZE_UNSPEC)
2379 if (siz2 != SIZE_UNSPEC && isvar (&opP->odisp))
2380 add_fix (siz2 == SIZE_LONG ? 'l' : 'w', &opP->odisp, 0, 0);
2381 if (siz2 == SIZE_LONG)
2382 addword (outro >> 16);
2383 if (siz2 != SIZE_UNSPEC)
2389 nextword = get_num (&opP->disp, 80);
2390 switch (opP->disp.size)
2395 if (!isvar (&opP->disp) && issword (offs (&opP->disp)))
2397 tmpreg = 0x38; /* 7.0 */
2401 if (isvar (&opP->disp)
2402 && !subs (&opP->disp)
2403 && adds (&opP->disp)
2405 /* If the displacement needs pic relocation it
2406 cannot be relaxed. */
2407 && opP->disp.pic_reloc == pic_none
2410 && !strchr ("~%&$?", s[0]))
2412 tmpreg = 0x3A; /* 7.2 */
2413 add_frag (adds (&opP->disp),
2415 TAB (ABSTOPCREL, SZ_UNDEF));
2418 /* Fall through into long */
2420 if (isvar (&opP->disp))
2421 add_fix ('l', &opP->disp, 0, 0);
2423 tmpreg = 0x39;/* 7.1 mode */
2424 addword (nextword >> 16);
2429 as_bad (_("unsupported byte value; use a different suffix"));
2431 case SIZE_WORD: /* Word */
2432 if (isvar (&opP->disp))
2433 add_fix ('w', &opP->disp, 0, 0);
2435 tmpreg = 0x38;/* 7.0 mode */
2443 as_bad (_("unknown/incorrect operand"));
2446 install_gen_operand (s[1], tmpreg);
2452 { /* JF: I hate floating point! */
2467 tmpreg = get_num (&opP->disp, tmpreg);
2468 if (isvar (&opP->disp))
2469 add_fix (s[1], &opP->disp, 0, 0);
2472 case 'b': /* Danger: These do no check for
2473 certain types of overflow.
2475 if (!isbyte (tmpreg))
2476 opP->error = _("out of range");
2477 insop (tmpreg, opcode);
2478 if (isvar (&opP->disp))
2479 the_ins.reloc[the_ins.nrel - 1].n =
2480 (opcode->m_codenum) * 2 + 1;
2483 if (!issbyte (tmpreg))
2484 opP->error = _("out of range");
2485 the_ins.opcode[the_ins.numo - 1] |= tmpreg & 0xff;
2486 if (isvar (&opP->disp))
2487 the_ins.reloc[the_ins.nrel - 1].n = opcode->m_codenum * 2 - 1;
2490 if (!isword (tmpreg))
2491 opP->error = _("out of range");
2492 insop (tmpreg, opcode);
2493 if (isvar (&opP->disp))
2494 the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
2497 if (!issword (tmpreg))
2498 opP->error = _("out of range");
2499 insop (tmpreg, opcode);
2500 if (isvar (&opP->disp))
2501 the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
2504 /* Because of the way insop works, we put these two out
2506 insop (tmpreg, opcode);
2507 insop (tmpreg >> 16, opcode);
2508 if (isvar (&opP->disp))
2509 the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
2516 install_operand (s[1], tmpreg);
2527 install_operand (s[1], opP->reg - ADDR);
2531 tmpreg = get_num (&opP->disp, 80);
2535 add_fix ('B', &opP->disp, 1, -1);
2538 add_fix ('w', &opP->disp, 1, 0);
2543 if (! HAVE_LONG_BRANCH (current_architecture))
2544 as_warn (_("Can't use long branches on 68000/68010/5200"));
2545 the_ins.opcode[0] |= 0xff;
2546 add_fix ('l', &opP->disp, 1, 0);
2551 if (subs (&opP->disp)) /* We can't relax it */
2555 /* If the displacement needs pic relocation it cannot be
2557 if (opP->disp.pic_reloc != pic_none)
2560 /* This could either be a symbol, or an absolute
2561 address. If it's an absolute address, turn it into
2562 an absolute jump right here and keep it out of the
2564 if (adds (&opP->disp) == 0)
2566 if (the_ins.opcode[0] == 0x6000) /* jbra */
2567 the_ins.opcode[0] = 0x4EF9;
2568 else if (the_ins.opcode[0] == 0x6100) /* jbsr */
2569 the_ins.opcode[0] = 0x4EB9;
2572 the_ins.opcode[0] ^= 0x0100;
2573 the_ins.opcode[0] |= 0x0006;
2576 add_fix ('l', &opP->disp, 0, 0);
2582 /* Now we know it's going into the relaxer. Now figure
2583 out which mode. We try in this order of preference:
2584 long branch, absolute jump, byte/word branches only. */
2585 if (HAVE_LONG_BRANCH (current_architecture))
2586 add_frag (adds (&opP->disp), offs (&opP->disp),
2587 TAB (BRANCHBWL, SZ_UNDEF));
2588 else if (! flag_keep_pcrel)
2590 if ((the_ins.opcode[0] == 0x6000)
2591 || (the_ins.opcode[0] == 0x6100))
2592 add_frag (adds (&opP->disp), offs (&opP->disp),
2593 TAB (BRABSJUNC, SZ_UNDEF));
2595 add_frag (adds (&opP->disp), offs (&opP->disp),
2596 TAB (BRABSJCOND, SZ_UNDEF));
2599 add_frag (adds (&opP->disp), offs (&opP->disp),
2600 TAB (BRANCHBW, SZ_UNDEF));
2603 if (isvar (&opP->disp))
2605 /* Check for DBcc instructions. We can relax them,
2606 but only if we have long branches and/or absolute
2608 if (((the_ins.opcode[0] & 0xf0f8) == 0x50c8)
2609 && (HAVE_LONG_BRANCH (current_architecture)
2610 || (! flag_keep_pcrel)))
2612 if (HAVE_LONG_BRANCH (current_architecture))
2613 add_frag (adds (&opP->disp), offs (&opP->disp),
2614 TAB (DBCCLBR, SZ_UNDEF));
2616 add_frag (adds (&opP->disp), offs (&opP->disp),
2617 TAB (DBCCABSJ, SZ_UNDEF));
2620 add_fix ('w', &opP->disp, 1, 0);
2624 case 'C': /* Fixed size LONG coproc branches */
2625 add_fix ('l', &opP->disp, 1, 0);
2629 case 'c': /* Var size Coprocesssor branches */
2630 if (subs (&opP->disp) || (adds (&opP->disp) == 0))
2632 the_ins.opcode[the_ins.numo - 1] |= 0x40;
2633 add_fix ('l', &opP->disp, 1, 0);
2638 add_frag (adds (&opP->disp), offs (&opP->disp),
2639 TAB (FBRANCH, SZ_UNDEF));
2646 case 'C': /* Ignore it */
2649 case 'd': /* JF this is a kludge */
2650 install_operand ('s', opP->reg - ADDR);
2651 tmpreg = get_num (&opP->disp, 80);
2652 if (!issword (tmpreg))
2654 as_warn (_("Expression out of range, using 0"));
2661 install_operand (s[1], opP->reg - DATA);
2664 case 'E': /* Ignore it */
2668 install_operand (s[1], opP->reg - FP0);
2671 case 'G': /* Ignore it */
2676 tmpreg = opP->reg - COP0;
2677 install_operand (s[1], tmpreg);
2680 case 'J': /* JF foo */
2753 install_operand (s[1], tmpreg);
2757 tmpreg = get_num (&opP->disp, 55);
2758 install_operand (s[1], tmpreg & 0x7f);
2765 if (tmpreg & 0x7FF0000)
2766 as_bad (_("Floating point register in register list"));
2767 insop (reverse_16_bits (tmpreg), opcode);
2771 if (tmpreg & 0x700FFFF)
2772 as_bad (_("Wrong register in floating-point reglist"));
2773 install_operand (s[1], reverse_8_bits (tmpreg >> 16));
2781 if (tmpreg & 0x7FF0000)
2782 as_bad (_("Floating point register in register list"));
2783 insop (tmpreg, opcode);
2785 else if (s[1] == '8')
2787 if (tmpreg & 0x0FFFFFF)
2788 as_bad (_("incorrect register in reglist"));
2789 install_operand (s[1], tmpreg >> 24);
2793 if (tmpreg & 0x700FFFF)
2794 as_bad (_("wrong register in floating-point reglist"));
2796 install_operand (s[1], tmpreg >> 16);
2801 install_operand (s[1], get_num (&opP->disp, 60));
2805 tmpreg = ((opP->mode == DREG)
2806 ? 0x20 + (int) (opP->reg - DATA)
2807 : (get_num (&opP->disp, 40) & 0x1F));
2808 install_operand (s[1], tmpreg);
2812 tmpreg = get_num (&opP->disp, 10);
2815 install_operand (s[1], tmpreg);
2819 /* This depends on the fact that ADDR registers are eight
2820 more than their corresponding DATA regs, so the result
2821 will have the ADDR_REG bit set */
2822 install_operand (s[1], opP->reg - DATA);
2826 if (opP->mode == AINDR)
2827 install_operand (s[1], opP->reg - DATA);
2829 install_operand (s[1], opP->index.reg - DATA);
2833 if (opP->reg == FPI)
2835 else if (opP->reg == FPS)
2837 else if (opP->reg == FPC)
2841 install_operand (s[1], tmpreg);
2844 case 'S': /* Ignore it */
2848 install_operand (s[1], get_num (&opP->disp, 30));
2851 case 'U': /* Ignore it */
2870 as_fatal (_("failed sanity check"));
2871 } /* switch on cache token */
2872 install_operand (s[1], tmpreg);
2875 /* JF: These are out of order, I fear. */
2888 install_operand (s[1], tmpreg);
2914 install_operand (s[1], tmpreg);
2918 if (opP->reg == VAL)
2937 install_operand (s[1], tmpreg);
2951 tmpreg = (4 << 10) | ((opP->reg - BAD) << 2);
2962 tmpreg = (5 << 10) | ((opP->reg - BAC) << 2);
2968 install_operand (s[1], tmpreg);
2971 know (opP->reg == PSR);
2974 know (opP->reg == PCSR);
2989 install_operand (s[1], tmpreg);
2992 tmpreg = get_num (&opP->disp, 20);
2993 install_operand (s[1], tmpreg);
2995 case '_': /* used only for move16 absolute 32-bit address */
2996 if (isvar (&opP->disp))
2997 add_fix ('l', &opP->disp, 0, 0);
2998 tmpreg = get_num (&opP->disp, 80);
2999 addword (tmpreg >> 16);
3000 addword (tmpreg & 0xFFFF);
3003 install_operand (s[1], opP->reg - DATA0L);
3004 opP->reg -= (DATA0L);
3005 opP->reg &= 0x0F; /* remove upper/lower bit */
3012 /* By the time whe get here (FINALLY) the_ins contains the complete
3013 instruction, ready to be emitted. . . */
3017 reverse_16_bits (in)
3023 static int mask[16] =
3025 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
3026 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000
3028 for (n = 0; n < 16; n++)
3031 out |= mask[15 - n];
3034 } /* reverse_16_bits() */
3043 static int mask[8] =
3045 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
3048 for (n = 0; n < 8; n++)
3054 } /* reverse_8_bits() */
3056 /* Cause an extra frag to be generated here, inserting up to 10 bytes
3057 (that value is chosen in the frag_var call in md_assemble). TYPE
3058 is the subtype of the frag to be generated; its primary type is
3059 rs_machine_dependent.
3061 The TYPE parameter is also used by md_convert_frag_1 and
3062 md_estimate_size_before_relax. The appropriate type of fixup will
3063 be emitted by md_convert_frag_1.
3065 ADD becomes the FR_SYMBOL field of the frag, and OFF the FR_OFFSET. */
3067 install_operand (mode, val)
3074 the_ins.opcode[0] |= val & 0xFF; /* JF FF is for M kludge */
3077 the_ins.opcode[0] |= val << 9;
3080 the_ins.opcode[1] |= val << 12;
3083 the_ins.opcode[1] |= val << 6;
3086 the_ins.opcode[1] |= val;
3089 the_ins.opcode[2] |= val << 12;
3092 the_ins.opcode[2] |= val << 6;
3095 /* DANGER! This is a hack to force cas2l and cas2w cmds to be
3096 three words long! */
3098 the_ins.opcode[2] |= val;
3101 the_ins.opcode[1] |= val << 7;
3104 the_ins.opcode[1] |= val << 10;
3108 the_ins.opcode[1] |= val << 5;
3113 the_ins.opcode[1] |= (val << 10) | (val << 7);
3116 the_ins.opcode[1] |= (val << 12) | val;
3119 the_ins.opcode[0] |= val = 0xff;
3122 the_ins.opcode[0] |= val << 9;
3125 the_ins.opcode[1] |= val;
3128 the_ins.opcode[1] |= val;
3129 the_ins.numo++; /* What a hack */
3132 the_ins.opcode[1] |= val << 4;
3140 the_ins.opcode[0] |= (val << 6);
3143 the_ins.opcode[1] = (val >> 16);
3144 the_ins.opcode[2] = val & 0xffff;
3147 the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
3148 the_ins.opcode[0] |= ((val & 0x7) << 9);
3149 the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
3152 the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
3153 the_ins.opcode[0] |= ((val & 0x7) << 9);
3156 the_ins.opcode[1] |= val << 12;
3157 the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
3160 the_ins.opcode[0] |= (val & 0xF);
3161 the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
3164 the_ins.opcode[1] |= (val & 0xF);
3165 the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
3168 the_ins.opcode[1] |= ((val != 1) << 10);
3172 as_fatal (_("failed sanity check."));
3174 } /* install_operand() */
3177 install_gen_operand (mode, val)
3184 the_ins.opcode[0] |= val;
3187 /* This is a kludge!!! */
3188 the_ins.opcode[0] |= (val & 0x07) << 9 | (val & 0x38) << 3;
3197 the_ins.opcode[0] |= val;
3199 /* more stuff goes here */
3201 as_fatal (_("failed sanity check."));
3203 } /* install_gen_operand() */
3206 * verify that we have some number of paren pairs, do m68k_ip_op(), and
3207 * then deal with the bitfield hack.
3211 crack_operand (str, opP)
3213 register struct m68k_op *opP;
3215 register int parens;
3217 register char *beg_str;
3225 for (parens = 0; *str && (parens > 0 || inquote || notend (str)); str++)
3231 else if (*str == ')')
3235 opP->error = _("Extra )");
3241 if (flag_mri && *str == '\'')
3242 inquote = ! inquote;
3244 if (!*str && parens)
3246 opP->error = _("Missing )");
3251 if (m68k_ip_op (beg_str, opP) != 0)
3258 c = *++str; /* JF bitfield hack */
3263 as_bad (_("Missing operand"));
3266 /* Detect MRI REG symbols and convert them to REGLSTs. */
3267 if (opP->mode == CONTROL && (int)opP->reg < 0)
3270 opP->mask = ~(int)opP->reg;
3277 /* This is the guts of the machine-dependent assembler. STR points to a
3278 machine dependent instruction. This function is supposed to emit
3279 the frags/bytes it assembles to.
3283 insert_reg (regname, regnum)
3284 const char *regname;
3290 #ifdef REGISTER_PREFIX
3291 if (!flag_reg_prefix_optional)
3293 buf[0] = REGISTER_PREFIX;
3294 strcpy (buf + 1, regname);
3299 symbol_table_insert (symbol_new (regname, reg_section, regnum,
3300 &zero_address_frag));
3302 for (i = 0; regname[i]; i++)
3303 buf[i] = TOUPPER (regname[i]);
3306 symbol_table_insert (symbol_new (buf, reg_section, regnum,
3307 &zero_address_frag));
3316 static const struct init_entry init_table[] =
3375 /* control registers */
3376 { "sfc", SFC }, /* Source Function Code */
3378 { "dfc", DFC }, /* Destination Function Code */
3380 { "cacr", CACR }, /* Cache Control Register */
3381 { "caar", CAAR }, /* Cache Address Register */
3383 { "usp", USP }, /* User Stack Pointer */
3384 { "vbr", VBR }, /* Vector Base Register */
3385 { "msp", MSP }, /* Master Stack Pointer */
3386 { "isp", ISP }, /* Interrupt Stack Pointer */
3388 { "itt0", ITT0 }, /* Instruction Transparent Translation Reg 0 */
3389 { "itt1", ITT1 }, /* Instruction Transparent Translation Reg 1 */
3390 { "dtt0", DTT0 }, /* Data Transparent Translation Register 0 */
3391 { "dtt1", DTT1 }, /* Data Transparent Translation Register 1 */
3393 /* 68ec040 versions of same */
3394 { "iacr0", ITT0 }, /* Instruction Access Control Register 0 */
3395 { "iacr1", ITT1 }, /* Instruction Access Control Register 0 */
3396 { "dacr0", DTT0 }, /* Data Access Control Register 0 */
3397 { "dacr1", DTT1 }, /* Data Access Control Register 0 */
3399 /* mcf5200 versions of same. The ColdFire programmer's reference
3400 manual indicated that the order is 2,3,0,1, but Ken Rose
3401 <rose@netcom.com> says that 0,1,2,3 is the correct order. */
3402 { "acr0", ITT0 }, /* Access Control Unit 0 */
3403 { "acr1", ITT1 }, /* Access Control Unit 1 */
3404 { "acr2", DTT0 }, /* Access Control Unit 2 */
3405 { "acr3", DTT1 }, /* Access Control Unit 3 */
3407 { "tc", TC }, /* MMU Translation Control Register */
3410 { "mmusr", MMUSR }, /* MMU Status Register */
3411 { "srp", SRP }, /* User Root Pointer */
3412 { "urp", URP }, /* Supervisor Root Pointer */
3417 { "rombar", ROMBAR }, /* ROM Base Address Register */
3418 { "rambar0", RAMBAR0 }, /* ROM Base Address Register */
3419 { "rambar1", RAMBAR1 }, /* ROM Base Address Register */
3420 { "mbar", MBAR }, /* Module Base Address Register */
3421 /* end of control registers */
3455 /* 68ec030 versions of same */
3458 /* 68ec030 access control unit, identical to 030 MMU status reg */
3461 /* Suppressed data and address registers. */
3479 /* Upper and lower data and address registers, used by macw and msacw. */
3523 for (i = 0; init_table[i].name; i++)
3524 insert_reg (init_table[i].name, init_table[i].number);
3527 static int no_68851, no_68881;
3530 /* a.out machine type. Default to 68020. */
3531 int m68k_aout_machtype = 2;
3543 int shorts_this_frag;
3546 /* In MRI mode, the instruction and operands are separated by a
3547 space. Anything following the operands is a comment. The label
3548 has already been removed. */
3556 for (s = str; *s != '\0'; s++)
3558 if ((*s == ' ' || *s == '\t') && ! inquote)
3576 inquote = ! inquote;
3581 memset ((char *) (&the_ins), '\0', sizeof (the_ins));
3586 for (n = 0; n < the_ins.numargs; n++)
3587 if (the_ins.operands[n].error)
3589 er = the_ins.operands[n].error;
3595 as_bad (_("%s -- statement `%s' ignored"), er, str);
3599 /* If there is a current label, record that it marks an instruction. */
3600 if (current_label != NULL)
3602 current_label->text = 1;
3603 current_label = NULL;
3607 /* Tie dwarf2 debug info to the address at the start of the insn. */
3608 dwarf2_emit_insn (0);
3611 if (the_ins.nfrag == 0)
3613 /* No frag hacking involved; just put it out */
3614 toP = frag_more (2 * the_ins.numo);
3615 fromP = &the_ins.opcode[0];
3616 for (m = the_ins.numo; m; --m)
3618 md_number_to_chars (toP, (long) (*fromP), 2);
3622 /* put out symbol-dependent info */
3623 for (m = 0; m < the_ins.nrel; m++)
3625 switch (the_ins.reloc[m].wid)
3644 as_fatal (_("Don't know how to figure width of %c in md_assemble()"),
3645 the_ins.reloc[m].wid);
3648 fixP = fix_new_exp (frag_now,
3649 ((toP - frag_now->fr_literal)
3650 - the_ins.numo * 2 + the_ins.reloc[m].n),
3652 &the_ins.reloc[m].exp,
3653 the_ins.reloc[m].pcrel,
3654 get_reloc_code (n, the_ins.reloc[m].pcrel,
3655 the_ins.reloc[m].pic_reloc));
3656 fixP->fx_pcrel_adjust = the_ins.reloc[m].pcrel_fix;
3657 if (the_ins.reloc[m].wid == 'B')
3658 fixP->fx_signed = 1;
3663 /* There's some frag hacking */
3665 /* Calculate the max frag size. */
3668 wid = 2 * the_ins.fragb[0].fragoff;
3669 for (n = 1; n < the_ins.nfrag; n++)
3670 wid += 2 * (the_ins.numo - the_ins.fragb[n - 1].fragoff);
3671 /* frag_var part. */
3673 /* Make sure the whole insn fits in one chunk, in particular that
3674 the var part is attached, as we access one byte before the
3675 variable frag for byte branches. */
3679 for (n = 0, fromP = &the_ins.opcode[0]; n < the_ins.nfrag; n++)
3684 wid = 2 * the_ins.fragb[n].fragoff;
3686 wid = 2 * (the_ins.numo - the_ins.fragb[n - 1].fragoff);
3687 toP = frag_more (wid);
3689 shorts_this_frag = 0;
3690 for (m = wid / 2; m; --m)
3692 md_number_to_chars (toP, (long) (*fromP), 2);
3697 for (m = 0; m < the_ins.nrel; m++)
3699 if ((the_ins.reloc[m].n) >= 2 * shorts_this_frag)
3701 the_ins.reloc[m].n -= 2 * shorts_this_frag;
3704 wid = the_ins.reloc[m].wid;
3707 the_ins.reloc[m].wid = 0;
3708 wid = (wid == 'b') ? 1 : (wid == 'w') ? 2 : (wid == 'l') ? 4 : 4000;
3710 fixP = fix_new_exp (frag_now,
3711 ((toP - frag_now->fr_literal)
3712 - the_ins.numo * 2 + the_ins.reloc[m].n),
3714 &the_ins.reloc[m].exp,
3715 the_ins.reloc[m].pcrel,
3716 get_reloc_code (wid, the_ins.reloc[m].pcrel,
3717 the_ins.reloc[m].pic_reloc));
3718 fixP->fx_pcrel_adjust = the_ins.reloc[m].pcrel_fix;
3720 (void) frag_var (rs_machine_dependent, 10, 0,
3721 (relax_substateT) (the_ins.fragb[n].fragty),
3722 the_ins.fragb[n].fadd, the_ins.fragb[n].foff, to_beg_P);
3724 n = (the_ins.numo - the_ins.fragb[n - 1].fragoff);
3725 shorts_this_frag = 0;
3728 toP = frag_more (n * sizeof (short));
3731 md_number_to_chars (toP, (long) (*fromP), 2);
3737 for (m = 0; m < the_ins.nrel; m++)
3741 wid = the_ins.reloc[m].wid;
3744 the_ins.reloc[m].wid = 0;
3745 wid = (wid == 'b') ? 1 : (wid == 'w') ? 2 : (wid == 'l') ? 4 : 4000;
3747 fixP = fix_new_exp (frag_now,
3748 ((the_ins.reloc[m].n + toP - frag_now->fr_literal)
3749 - shorts_this_frag * 2),
3751 &the_ins.reloc[m].exp,
3752 the_ins.reloc[m].pcrel,
3753 get_reloc_code (wid, the_ins.reloc[m].pcrel,
3754 the_ins.reloc[m].pic_reloc));
3755 fixP->fx_pcrel_adjust = the_ins.reloc[m].pcrel_fix;
3763 * md_begin -- set up hash tables with 68000 instructions.
3764 * similar to what the vax assembler does. ---phr
3766 /* RMS claims the thing to do is take the m68k-opcode.h table, and make
3767 a copy of it at runtime, adding in the information we want but isn't
3768 there. I think it'd be better to have an awk script hack the table
3769 at compile time. Or even just xstr the table and use it as-is. But
3770 my lord ghod hath spoken, so we do it this way. Excuse the ugly var
3773 const struct m68k_opcode *ins;
3774 struct m68k_incant *hack, *slak;
3775 const char *retval = 0; /* empty string, or error msg text */
3780 flag_reg_prefix_optional = 1;
3782 if (! m68k_rel32_from_cmdline)
3786 op_hash = hash_new ();
3788 obstack_begin (&robyn, 4000);
3789 for (i = 0; i < m68k_numopcodes; i++)
3791 hack = slak = (struct m68k_incant *) obstack_alloc (&robyn, sizeof (struct m68k_incant));
3794 ins = &m68k_opcodes[i];
3795 /* We *could* ignore insns that don't match our arch here
3796 but just leaving them out of the hash. */
3797 slak->m_operands = ins->args;
3798 slak->m_opnum = strlen (slak->m_operands) / 2;
3799 slak->m_arch = ins->arch;
3800 slak->m_opcode = ins->opcode;
3801 /* This is kludgey */
3802 slak->m_codenum = ((ins->match) & 0xffffL) ? 2 : 1;
3803 if (i + 1 != m68k_numopcodes
3804 && !strcmp (ins->name, m68k_opcodes[i + 1].name))
3806 slak->m_next = (struct m68k_incant *) obstack_alloc (&robyn, sizeof (struct m68k_incant));
3811 slak = slak->m_next;
3815 retval = hash_insert (op_hash, ins->name, (char *) hack);
3817 as_fatal (_("Internal Error: Can't hash %s: %s"), ins->name, retval);
3820 for (i = 0; i < m68k_numaliases; i++)
3822 const char *name = m68k_opcode_aliases[i].primary;
3823 const char *alias = m68k_opcode_aliases[i].alias;
3824 PTR val = hash_find (op_hash, name);
3826 as_fatal (_("Internal Error: Can't find %s in hash table"), name);
3827 retval = hash_insert (op_hash, alias, val);
3829 as_fatal (_("Internal Error: Can't hash %s: %s"), alias, retval);
3832 /* In MRI mode, all unsized branches are variable sized. Normally,
3833 they are word sized. */
3836 static struct m68k_opcode_alias mri_aliases[] =
3857 i < (int) (sizeof mri_aliases / sizeof mri_aliases[0]);
3860 const char *name = mri_aliases[i].primary;
3861 const char *alias = mri_aliases[i].alias;
3862 PTR val = hash_find (op_hash, name);
3864 as_fatal (_("Internal Error: Can't find %s in hash table"), name);
3865 retval = hash_jam (op_hash, alias, val);
3867 as_fatal (_("Internal Error: Can't hash %s: %s"), alias, retval);
3871 for (i = 0; i < (int) sizeof (notend_table); i++)
3873 notend_table[i] = 0;
3874 alt_notend_table[i] = 0;
3876 notend_table[','] = 1;
3877 notend_table['{'] = 1;
3878 notend_table['}'] = 1;
3879 alt_notend_table['a'] = 1;
3880 alt_notend_table['A'] = 1;
3881 alt_notend_table['d'] = 1;
3882 alt_notend_table['D'] = 1;
3883 alt_notend_table['#'] = 1;
3884 alt_notend_table['&'] = 1;
3885 alt_notend_table['f'] = 1;
3886 alt_notend_table['F'] = 1;
3887 #ifdef REGISTER_PREFIX
3888 alt_notend_table[REGISTER_PREFIX] = 1;
3891 /* We need to put '(' in alt_notend_table to handle
3892 cas2 %d0:%d2,%d3:%d4,(%a0):(%a1)
3894 alt_notend_table['('] = 1;
3896 /* We need to put '@' in alt_notend_table to handle
3897 cas2 %d0:%d2,%d3:%d4,@(%d0):@(%d1)
3899 alt_notend_table['@'] = 1;
3901 /* We need to put digits in alt_notend_table to handle
3902 bfextu %d0{24:1},%d0
3904 alt_notend_table['0'] = 1;
3905 alt_notend_table['1'] = 1;
3906 alt_notend_table['2'] = 1;
3907 alt_notend_table['3'] = 1;
3908 alt_notend_table['4'] = 1;
3909 alt_notend_table['5'] = 1;
3910 alt_notend_table['6'] = 1;
3911 alt_notend_table['7'] = 1;
3912 alt_notend_table['8'] = 1;
3913 alt_notend_table['9'] = 1;
3915 #ifndef MIT_SYNTAX_ONLY
3916 /* Insert pseudo ops, these have to go into the opcode table since
3917 gas expects pseudo ops to start with a dot */
3920 while (mote_pseudo_table[n].poc_name)
3922 hack = (struct m68k_incant *)
3923 obstack_alloc (&robyn, sizeof (struct m68k_incant));
3924 hash_insert (op_hash,
3925 mote_pseudo_table[n].poc_name, (char *) hack);
3926 hack->m_operands = 0;
3936 record_alignment (text_section, 2);
3937 record_alignment (data_section, 2);
3938 record_alignment (bss_section, 2);
3943 select_control_regs ()
3945 /* Note which set of "movec" control registers is available. */
3946 switch (cpu_of_arch (current_architecture))
3949 as_warn (_("architecture not yet selected: defaulting to 68020"));
3950 control_regs = m68020_control_regs;
3954 control_regs = m68000_control_regs;
3957 control_regs = m68010_control_regs;
3961 control_regs = m68020_control_regs;
3964 control_regs = m68040_control_regs;
3967 control_regs = m68060_control_regs;
3970 control_regs = cpu32_control_regs;
3976 control_regs = mcf_control_regs;
3984 m68k_init_after_args ()
3986 if (cpu_of_arch (current_architecture) == 0)
3989 const char *default_cpu = TARGET_CPU;
3991 if (*default_cpu == 'm')
3993 for (i = 0; i < n_archs; i++)
3994 if (strcasecmp (default_cpu, archs[i].name) == 0)
3998 as_bad (_("unrecognized default cpu `%s' ???"), TARGET_CPU);
3999 current_architecture |= m68020;
4002 current_architecture |= archs[i].arch;
4004 /* Permit m68881 specification with all cpus; those that can't work
4005 with a coprocessor could be doing emulation. */
4006 if (current_architecture & m68851)
4008 if (current_architecture & m68040)
4010 as_warn (_("68040 and 68851 specified; mmu instructions may assemble incorrectly"));
4013 /* What other incompatibilities could we check for? */
4015 /* Toss in some default assumptions about coprocessors. */
4017 && (cpu_of_arch (current_architecture)
4018 /* Can CPU32 have a 68881 coprocessor?? */
4019 & (m68020 | m68030 | cpu32)))
4021 current_architecture |= m68881;
4024 && (cpu_of_arch (current_architecture) & m68020up) != 0
4025 && (cpu_of_arch (current_architecture) & m68040up) == 0)
4027 current_architecture |= m68851;
4029 if (no_68881 && (current_architecture & m68881))
4030 as_bad (_("options for 68881 and no-68881 both given"));
4031 if (no_68851 && (current_architecture & m68851))
4032 as_bad (_("options for 68851 and no-68851 both given"));
4035 /* Work out the magic number. This isn't very general. */
4036 if (current_architecture & m68000)
4037 m68k_aout_machtype = 0;
4038 else if (current_architecture & m68010)
4039 m68k_aout_machtype = 1;
4040 else if (current_architecture & m68020)
4041 m68k_aout_machtype = 2;
4043 m68k_aout_machtype = 2;
4046 /* Note which set of "movec" control registers is available. */
4047 select_control_regs ();
4049 if (cpu_of_arch (current_architecture) < m68020
4050 || arch_coldfire_p (current_architecture))
4051 md_relax_table[TAB (PCINDEX, BYTE)].rlx_more = 0;
4054 /* This is called when a label is defined. */
4057 m68k_frob_label (sym)
4060 struct label_line *n;
4062 n = (struct label_line *) xmalloc (sizeof *n);
4065 as_where (&n->file, &n->line);
4071 /* This is called when a value that is not an instruction is emitted. */
4074 m68k_flush_pending_output ()
4076 current_label = NULL;
4079 /* This is called at the end of the assembly, when the final value of
4080 the label is known. We warn if this is a text symbol aligned at an
4084 m68k_frob_symbol (sym)
4087 if (S_GET_SEGMENT (sym) == reg_section
4088 && (int) S_GET_VALUE (sym) < 0)
4090 S_SET_SEGMENT (sym, absolute_section);
4091 S_SET_VALUE (sym, ~(int)S_GET_VALUE (sym));
4093 else if ((S_GET_VALUE (sym) & 1) != 0)
4095 struct label_line *l;
4097 for (l = labels; l != NULL; l = l->next)
4099 if (l->label == sym)
4102 as_warn_where (l->file, l->line,
4103 _("text label `%s' aligned to odd boundary"),
4111 /* This is called if we go in or out of MRI mode because of the .mri
4115 m68k_mri_mode_change (on)
4120 if (! flag_reg_prefix_optional)
4122 flag_reg_prefix_optional = 1;
4123 #ifdef REGISTER_PREFIX
4128 if (! m68k_rel32_from_cmdline)
4133 if (! reg_prefix_optional_seen)
4135 #ifdef REGISTER_PREFIX_OPTIONAL
4136 flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
4138 flag_reg_prefix_optional = 0;
4140 #ifdef REGISTER_PREFIX
4145 if (! m68k_rel32_from_cmdline)
4150 /* Equal to MAX_PRECISION in atof-ieee.c */
4151 #define MAX_LITTLENUMS 6
4153 /* Turn a string in input_line_pointer into a floating point constant
4154 of type TYPE, and store the appropriate bytes in *LITP. The number
4155 of LITTLENUMS emitted is stored in *SIZEP. An error message is
4156 returned, or NULL on OK. */
4159 md_atof (type, litP, sizeP)
4165 LITTLENUM_TYPE words[MAX_LITTLENUMS];
4166 LITTLENUM_TYPE *wordP;
4197 return _("Bad call to MD_ATOF()");
4199 t = atof_ieee (input_line_pointer, type, words);
4201 input_line_pointer = t;
4203 *sizeP = prec * sizeof (LITTLENUM_TYPE);
4204 for (wordP = words; prec--;)
4206 md_number_to_chars (litP, (long) (*wordP++), sizeof (LITTLENUM_TYPE));
4207 litP += sizeof (LITTLENUM_TYPE);
4213 md_number_to_chars (buf, val, n)
4218 number_to_chars_bigendian (buf, val, n);
4222 md_apply_fix3 (fixP, valP, seg)
4225 segT seg ATTRIBUTE_UNUSED;
4227 offsetT val = *valP;
4228 addressT upper_limit;
4229 offsetT lower_limit;
4231 /* This is unnecessary but it convinces the native rs6000 compiler
4232 to generate the code we want. */
4233 char *buf = fixP->fx_frag->fr_literal;
4234 buf += fixP->fx_where;
4235 /* end ibm compiler workaround */
4237 val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000;
4239 if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
4245 memset (buf, 0, fixP->fx_size);
4246 fixP->fx_addnumber = val; /* Remember value for emit_reloc */
4248 if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
4249 && !S_IS_DEFINED (fixP->fx_addsy)
4250 && !S_IS_WEAK (fixP->fx_addsy))
4251 S_SET_WEAK (fixP->fx_addsy);
4256 #ifdef BFD_ASSEMBLER
4257 if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
4258 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
4262 switch (fixP->fx_size)
4264 /* The cast to offsetT below are necessary to make code
4265 correct for machines where ints are smaller than offsetT. */
4269 lower_limit = - (offsetT) 0x80;
4272 *buf++ = (val >> 8);
4274 upper_limit = 0x7fff;
4275 lower_limit = - (offsetT) 0x8000;
4278 *buf++ = (val >> 24);
4279 *buf++ = (val >> 16);
4280 *buf++ = (val >> 8);
4282 upper_limit = 0x7fffffff;
4283 lower_limit = - (offsetT) 0x7fffffff - 1; /* avoid constant overflow */
4286 BAD_CASE (fixP->fx_size);
4289 /* Fix up a negative reloc. */
4290 if (fixP->fx_addsy == NULL && fixP->fx_subsy != NULL)
4292 fixP->fx_addsy = fixP->fx_subsy;
4293 fixP->fx_subsy = NULL;
4297 /* For non-pc-relative values, it's conceivable we might get something
4298 like "0xff" for a byte field. So extend the upper part of the range
4299 to accept such numbers. We arbitrarily disallow "-0xff" or "0xff+0xff",
4300 so that we can do any range checking at all. */
4301 if (! fixP->fx_pcrel && ! fixP->fx_signed)
4302 upper_limit = upper_limit * 2 + 1;
4304 if ((addressT) val > upper_limit
4305 && (val > 0 || val < lower_limit))
4306 as_bad_where (fixP->fx_file, fixP->fx_line, _("value out of range"));
4308 /* A one byte PC-relative reloc means a short branch. We can't use
4309 a short branch with a value of 0 or -1, because those indicate
4310 different opcodes (branches with longer offsets). fixup_segment
4311 in write.c may have clobbered fx_pcrel, so we need to examine the
4314 #ifdef BFD_ASSEMBLER
4315 || fixP->fx_r_type == BFD_RELOC_8_PCREL
4318 && fixP->fx_size == 1
4319 && (fixP->fx_addsy == NULL
4320 || S_IS_DEFINED (fixP->fx_addsy))
4321 && (val == 0 || val == -1))
4322 as_bad_where (fixP->fx_file, fixP->fx_line, _("invalid byte branch offset"));
4325 /* *fragP has been relaxed to its final size, and now needs to have
4326 the bytes inside it modified to conform to the new size There is UGLY
4330 md_convert_frag_1 (fragP)
4331 register fragS *fragP;
4336 /* Address in object code of the displacement. */
4337 register int object_address = fragP->fr_fix + fragP->fr_address;
4339 /* Address in gas core of the place to store the displacement. */
4340 /* This convinces the native rs6000 compiler to generate the code we
4342 register char *buffer_address = fragP->fr_literal;
4343 buffer_address += fragP->fr_fix;
4344 /* end ibm compiler workaround */
4346 /* The displacement of the address, from current location. */
4347 disp = fragP->fr_symbol ? S_GET_VALUE (fragP->fr_symbol) : 0;
4348 disp = (disp + fragP->fr_offset) - object_address;
4350 switch (fragP->fr_subtype)
4352 case TAB (BRANCHBWL, BYTE):
4353 case TAB (BRABSJUNC, BYTE):
4354 case TAB (BRABSJCOND, BYTE):
4355 case TAB (BRANCHBW, BYTE):
4356 know (issbyte (disp));
4358 as_bad_where (fragP->fr_file, fragP->fr_line,
4359 _("short branch with zero offset: use :w"));
4360 fixP = fix_new (fragP, fragP->fr_fix - 1, 1, fragP->fr_symbol,
4361 fragP->fr_offset, 1, RELAX_RELOC_PC8);
4362 fixP->fx_pcrel_adjust = -1;
4364 case TAB (BRANCHBWL, SHORT):
4365 case TAB (BRABSJUNC, SHORT):
4366 case TAB (BRABSJCOND, SHORT):
4367 case TAB (BRANCHBW, SHORT):
4368 fragP->fr_opcode[1] = 0x00;
4369 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4370 1, RELAX_RELOC_PC16);
4373 case TAB (BRANCHBWL, LONG):
4374 fragP->fr_opcode[1] = (char) 0xFF;
4375 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4376 1, RELAX_RELOC_PC32);
4379 case TAB (BRABSJUNC, LONG):
4380 if (fragP->fr_opcode[0] == 0x61) /* jbsr */
4382 fragP->fr_opcode[0] = 0x4E;
4383 fragP->fr_opcode[1] = (char) 0xB9; /* JSR with ABSL LONG operand */
4384 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4385 0, RELAX_RELOC_ABS32);
4388 else if (fragP->fr_opcode[0] == 0x60) /* jbra */
4390 fragP->fr_opcode[0] = 0x4E;
4391 fragP->fr_opcode[1] = (char) 0xF9; /* JMP with ABSL LONG operand */
4392 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4393 0, RELAX_RELOC_ABS32);
4398 /* This cannot happen, because jbsr and jbra are the only two
4399 unconditional branches. */
4403 case TAB (BRABSJCOND, LONG):
4404 /* Only Bcc 68000 instructions can come here. */
4405 /* Change bcc into b!cc/jmp absl long. */
4407 fragP->fr_opcode[0] ^= 0x01; /* invert bcc */
4408 fragP->fr_opcode[1] = 0x6;/* branch offset = 6 */
4410 /* JF: these used to be fr_opcode[2,3], but they may be in a
4411 different frag, in which case refering to them is a no-no.
4412 Only fr_opcode[0,1] are guaranteed to work. */
4413 *buffer_address++ = 0x4e; /* put in jmp long (0x4ef9) */
4414 *buffer_address++ = (char) 0xf9;
4415 fragP->fr_fix += 2; /* account for jmp instruction */
4416 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4417 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
4420 case TAB (FBRANCH, SHORT):
4421 know ((fragP->fr_opcode[1] & 0x40) == 0);
4422 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4423 1, RELAX_RELOC_PC16);
4426 case TAB (FBRANCH, LONG):
4427 fragP->fr_opcode[1] |= 0x40; /* Turn on LONG bit */
4428 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4429 1, RELAX_RELOC_PC32);
4432 case TAB (DBCCLBR, SHORT):
4433 case TAB (DBCCABSJ, SHORT):
4434 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4435 1, RELAX_RELOC_PC16);
4438 case TAB (DBCCLBR, LONG):
4439 /* only DBcc instructions can come here */
4440 /* Change dbcc into dbcc/bral. */
4442 /* JF: these used to be fr_opcode[2-7], but that's wrong */
4443 *buffer_address++ = 0x00; /* branch offset = 4 */
4444 *buffer_address++ = 0x04;
4445 *buffer_address++ = 0x60; /* put in bra pc+6 */
4446 *buffer_address++ = 0x06;
4447 *buffer_address++ = 0x60; /* Put in bral (0x60ff). */
4448 *buffer_address++ = (char) 0xff;
4450 fragP->fr_fix += 6; /* account for bra/jmp instructions */
4451 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset, 1,
4455 case TAB (DBCCABSJ, LONG):
4456 /* only DBcc instructions can come here */
4457 /* Change dbcc into dbcc/jmp. */
4459 /* JF: these used to be fr_opcode[2-7], but that's wrong */
4460 *buffer_address++ = 0x00; /* branch offset = 4 */
4461 *buffer_address++ = 0x04;
4462 *buffer_address++ = 0x60; /* put in bra pc+6 */
4463 *buffer_address++ = 0x06;
4464 *buffer_address++ = 0x4e; /* Put in jmp long (0x4ef9). */
4465 *buffer_address++ = (char) 0xf9;
4467 fragP->fr_fix += 6; /* account for bra/jmp instructions */
4468 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset, 0,
4472 case TAB (PCREL1632, SHORT):
4473 fragP->fr_opcode[1] &= ~0x3F;
4474 fragP->fr_opcode[1] |= 0x3A; /* 072 - mode 7.2 */
4475 fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
4476 fragP->fr_offset, 1, RELAX_RELOC_PC16);
4479 case TAB (PCREL1632, LONG):
4480 /* Already set to mode 7.3; this indicates: PC indirect with
4481 suppressed index, 32-bit displacement. */
4482 *buffer_address++ = 0x01;
4483 *buffer_address++ = 0x70;
4485 fixP = fix_new (fragP, (int) (fragP->fr_fix), 4, fragP->fr_symbol,
4486 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4487 fixP->fx_pcrel_adjust = 2;
4490 case TAB (PCINDEX, BYTE):
4491 assert (fragP->fr_fix >= 2);
4492 buffer_address[-2] &= ~1;
4493 fixP = fix_new (fragP, fragP->fr_fix - 1, 1, fragP->fr_symbol,
4494 fragP->fr_offset, 1, RELAX_RELOC_PC8);
4495 fixP->fx_pcrel_adjust = 1;
4497 case TAB (PCINDEX, SHORT):
4498 assert (fragP->fr_fix >= 2);
4499 buffer_address[-2] |= 0x1;
4500 buffer_address[-1] = 0x20;
4501 fixP = fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
4502 fragP->fr_offset, 1, RELAX_RELOC_PC16);
4503 fixP->fx_pcrel_adjust = 2;
4506 case TAB (PCINDEX, LONG):
4507 assert (fragP->fr_fix >= 2);
4508 buffer_address[-2] |= 0x1;
4509 buffer_address[-1] = 0x30;
4510 fixP = fix_new (fragP, (int) (fragP->fr_fix), 4, fragP->fr_symbol,
4511 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4512 fixP->fx_pcrel_adjust = 2;
4515 case TAB (ABSTOPCREL, SHORT):
4516 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4517 1, RELAX_RELOC_PC16);
4520 case TAB (ABSTOPCREL, LONG):
4521 /* The thing to do here is force it to ABSOLUTE LONG, since
4522 ABSTOPCREL is really trying to shorten an ABSOLUTE address anyway */
4523 if ((fragP->fr_opcode[1] & 0x3F) != 0x3A)
4525 fragP->fr_opcode[1] &= ~0x3F;
4526 fragP->fr_opcode[1] |= 0x39; /* Mode 7.1 */
4527 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4528 0, RELAX_RELOC_ABS32);
4534 #ifndef BFD_ASSEMBLER
4537 md_convert_frag (headers, sec, fragP)
4538 object_headers *headers ATTRIBUTE_UNUSED;
4539 segT sec ATTRIBUTE_UNUSED;
4542 md_convert_frag_1 (fragP);
4548 md_convert_frag (abfd, sec, fragP)
4549 bfd *abfd ATTRIBUTE_UNUSED;
4550 segT sec ATTRIBUTE_UNUSED;
4553 md_convert_frag_1 (fragP);
4557 /* Force truly undefined symbols to their maximum size, and generally set up
4558 the frag list to be relaxed
4561 md_estimate_size_before_relax (fragP, segment)
4562 register fragS *fragP;
4565 /* Handle SZ_UNDEF first, it can be changed to BYTE or SHORT. */
4566 switch (fragP->fr_subtype)
4568 case TAB (BRANCHBWL, SZ_UNDEF):
4569 case TAB (BRABSJUNC, SZ_UNDEF):
4570 case TAB (BRABSJCOND, SZ_UNDEF):
4572 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
4573 && relaxable_symbol (fragP->fr_symbol))
4575 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
4577 else if (flag_short_refs)
4579 /* Symbol is undefined and we want short ref. */
4580 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4584 /* Symbol is still undefined. Make it LONG. */
4585 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
4590 case TAB (BRANCHBW, SZ_UNDEF):
4592 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
4593 && relaxable_symbol (fragP->fr_symbol))
4595 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
4599 /* Symbol is undefined and we don't have long branches. */
4600 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4605 case TAB (FBRANCH, SZ_UNDEF):
4606 case TAB (DBCCLBR, SZ_UNDEF):
4607 case TAB (DBCCABSJ, SZ_UNDEF):
4608 case TAB (PCREL1632, SZ_UNDEF):
4610 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4611 && relaxable_symbol (fragP->fr_symbol))
4614 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4618 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
4623 case TAB (PCINDEX, SZ_UNDEF):
4624 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4625 && relaxable_symbol (fragP->fr_symbol)))
4627 fragP->fr_subtype = TAB (PCINDEX, BYTE);
4631 fragP->fr_subtype = TAB (PCINDEX, LONG);
4635 case TAB (ABSTOPCREL, SZ_UNDEF):
4637 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4638 && relaxable_symbol (fragP->fr_symbol)))
4640 fragP->fr_subtype = TAB (ABSTOPCREL, SHORT);
4644 fragP->fr_subtype = TAB (ABSTOPCREL, LONG);
4653 /* Now that SZ_UNDEF are taken care of, check others. */
4654 switch (fragP->fr_subtype)
4656 case TAB (BRANCHBWL, BYTE):
4657 case TAB (BRABSJUNC, BYTE):
4658 case TAB (BRABSJCOND, BYTE):
4659 case TAB (BRANCHBW, BYTE):
4660 /* We can't do a short jump to the next instruction, so in that
4661 case we force word mode. If the symbol is at the start of a
4662 frag, and it is the next frag with any data in it (usually
4663 this is just the next frag, but assembler listings may
4664 introduce empty frags), we must use word mode. */
4665 if (fragP->fr_symbol)
4669 sym_frag = symbol_get_frag (fragP->fr_symbol);
4670 if (S_GET_VALUE (fragP->fr_symbol) == sym_frag->fr_address)
4674 for (l = fragP->fr_next; l && l != sym_frag; l = l->fr_next)
4678 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4685 return md_relax_table[fragP->fr_subtype].rlx_length;
4688 #if defined(OBJ_AOUT) | defined(OBJ_BOUT)
4689 /* the bit-field entries in the relocation_info struct plays hell
4690 with the byte-order problems of cross-assembly. So as a hack,
4691 I added this mach. dependent ri twiddler. Ugly, but it gets
4693 /* on m68k: first 4 bytes are normal unsigned long, next three bytes
4694 are symbolnum, most sig. byte first. Last byte is broken up with
4695 bit 7 as pcrel, bits 6 & 5 as length, bit 4 as pcrel, and the lower
4696 nibble as nuthin. (on Sun 3 at least) */
4697 /* Translate the internal relocation information into target-specific
4701 md_ri_to_chars (the_bytes, ri)
4703 struct reloc_info_generic *ri;
4706 md_number_to_chars (the_bytes, ri->r_address, 4);
4707 /* now the fun stuff */
4708 the_bytes[4] = (ri->r_symbolnum >> 16) & 0x0ff;
4709 the_bytes[5] = (ri->r_symbolnum >> 8) & 0x0ff;
4710 the_bytes[6] = ri->r_symbolnum & 0x0ff;
4711 the_bytes[7] = (((ri->r_pcrel << 7) & 0x80) | ((ri->r_length << 5) & 0x60) |
4712 ((ri->r_extern << 4) & 0x10));
4715 #endif /* comment */
4717 #ifndef BFD_ASSEMBLER
4719 tc_aout_fix_to_chars (where, fixP, segment_address_in_file)
4722 relax_addressT segment_address_in_file;
4725 * In: length of relocation (or of address) in chars: 1, 2 or 4.
4726 * Out: GNU LD relocation length code: 0, 1, or 2.
4729 static const unsigned char nbytes_r_length[] = {42, 0, 1, 42, 2};
4732 know (fixP->fx_addsy != NULL);
4734 md_number_to_chars (where,
4735 fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file,
4738 r_symbolnum = (S_IS_DEFINED (fixP->fx_addsy)
4739 ? S_GET_TYPE (fixP->fx_addsy)
4740 : fixP->fx_addsy->sy_number);
4742 where[4] = (r_symbolnum >> 16) & 0x0ff;
4743 where[5] = (r_symbolnum >> 8) & 0x0ff;
4744 where[6] = r_symbolnum & 0x0ff;
4745 where[7] = (((fixP->fx_pcrel << 7) & 0x80) | ((nbytes_r_length[fixP->fx_size] << 5) & 0x60) |
4746 (((!S_IS_DEFINED (fixP->fx_addsy)) << 4) & 0x10));
4750 #endif /* OBJ_AOUT or OBJ_BOUT */
4752 #ifndef WORKING_DOT_WORD
4753 const int md_short_jump_size = 4;
4754 const int md_long_jump_size = 6;
4757 md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
4759 addressT from_addr, to_addr;
4760 fragS *frag ATTRIBUTE_UNUSED;
4761 symbolS *to_symbol ATTRIBUTE_UNUSED;
4765 offset = to_addr - (from_addr + 2);
4767 md_number_to_chars (ptr, (valueT) 0x6000, 2);
4768 md_number_to_chars (ptr + 2, (valueT) offset, 2);
4772 md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
4774 addressT from_addr, to_addr;
4780 if (!HAVE_LONG_BRANCH(current_architecture))
4782 offset = to_addr - S_GET_VALUE (to_symbol);
4783 md_number_to_chars (ptr, (valueT) 0x4EF9, 2);
4784 md_number_to_chars (ptr + 2, (valueT) offset, 4);
4785 fix_new (frag, (ptr + 2) - frag->fr_literal, 4, to_symbol, (offsetT) 0,
4790 offset = to_addr - (from_addr + 2);
4791 md_number_to_chars (ptr, (valueT) 0x60ff, 2);
4792 md_number_to_chars (ptr + 2, (valueT) offset, 4);
4798 /* Different values of OK tell what its OK to return. Things that
4799 aren't OK are an error (what a shock, no?)
4802 10: Absolute 1:8 only
4803 20: Absolute 0:7 only
4804 30: absolute 0:15 only
4805 40: Absolute 0:31 only
4806 50: absolute 0:127 only
4807 55: absolute -64:63 only
4808 60: absolute -128:127 only
4809 70: absolute 0:4095 only
4816 struct m68k_exp *exp;
4819 if (exp->exp.X_op == O_absent)
4821 /* Do the same thing the VAX asm does */
4822 op (exp) = O_constant;
4828 as_warn (_("expression out of range: defaulting to 1"));
4832 else if (exp->exp.X_op == O_constant)
4837 if (offs (exp) < 1 || offs (exp) > 8)
4839 as_warn (_("expression out of range: defaulting to 1"));
4844 if (offs (exp) < 0 || offs (exp) > 7)
4848 if (offs (exp) < 0 || offs (exp) > 15)
4852 if (offs (exp) < 0 || offs (exp) > 32)
4856 if (offs (exp) < 0 || offs (exp) > 127)
4860 if (offs (exp) < -64 || offs (exp) > 63)
4864 if (offs (exp) < -128 || offs (exp) > 127)
4868 if (offs (exp) < 0 || offs (exp) > 4095)
4871 as_warn (_("expression out of range: defaulting to 0"));
4879 else if (exp->exp.X_op == O_big)
4881 if (offs (exp) <= 0 /* flonum */
4882 && (ok == 80 /* no bignums */
4883 || (ok > 10 /* small-int ranges including 0 ok */
4884 /* If we have a flonum zero, a zero integer should
4885 do as well (e.g., in moveq). */
4886 && generic_floating_point_number.exponent == 0
4887 && generic_floating_point_number.low[0] == 0)))
4889 /* HACK! Turn it into a long */
4890 LITTLENUM_TYPE words[6];
4892 gen_to_words (words, 2, 8L); /* These numbers are magic! */
4893 op (exp) = O_constant;
4896 offs (exp) = words[1] | (words[0] << 16);
4900 op (exp) = O_constant;
4903 offs (exp) = (ok == 10) ? 1 : 0;
4904 as_warn (_("Can't deal with expression; defaulting to %ld"),
4910 if (ok >= 10 && ok <= 70)
4912 op (exp) = O_constant;
4915 offs (exp) = (ok == 10) ? 1 : 0;
4916 as_warn (_("Can't deal with expression; defaulting to %ld"),
4921 if (exp->size != SIZE_UNSPEC)
4929 if (!isbyte (offs (exp)))
4930 as_warn (_("expression doesn't fit in BYTE"));
4933 if (!isword (offs (exp)))
4934 as_warn (_("expression doesn't fit in WORD"));
4942 /* These are the back-ends for the various machine dependent pseudo-ops. */
4946 int ignore ATTRIBUTE_UNUSED;
4948 subseg_set (data_section, 1);
4949 demand_empty_rest_of_line ();
4954 int ignore ATTRIBUTE_UNUSED;
4956 subseg_set (data_section, 2);
4957 demand_empty_rest_of_line ();
4962 int ignore ATTRIBUTE_UNUSED;
4964 /* We don't support putting frags in the BSS segment, we fake it
4965 by marking in_bss, then looking at s_skip for clues. */
4967 subseg_set (bss_section, 0);
4968 demand_empty_rest_of_line ();
4973 int ignore ATTRIBUTE_UNUSED;
4976 register long temp_fill;
4978 temp = 1; /* JF should be 2? */
4979 temp_fill = get_absolute_expression ();
4980 if (!need_pass_2) /* Never make frag if expect extra pass. */
4981 frag_align (temp, (int) temp_fill, 0);
4982 demand_empty_rest_of_line ();
4983 record_alignment (now_seg, temp);
4988 int ignore ATTRIBUTE_UNUSED;
4990 demand_empty_rest_of_line ();
4993 /* Pseudo-ops handled for MRI compatibility. */
4995 /* This function returns non-zero if the argument is a conditional
4996 pseudo-op. This is called when checking whether a pending
4997 alignment is needed. */
5000 m68k_conditional_pseudoop (pop)
5003 return (pop->poc_handler == s_mri_if
5004 || pop->poc_handler == s_mri_else);
5007 /* Handle an MRI style chip specification. */
5016 s = input_line_pointer;
5017 /* We can't use get_symbol_end since the processor names are not proper
5019 while (is_part_of_name (c = *input_line_pointer++))
5021 *--input_line_pointer = 0;
5022 for (i = 0; i < n_archs; i++)
5023 if (strcasecmp (s, archs[i].name) == 0)
5027 as_bad (_("%s: unrecognized processor name"), s);
5028 *input_line_pointer = c;
5029 ignore_rest_of_line ();
5032 *input_line_pointer = c;
5034 if (*input_line_pointer == '/')
5035 current_architecture = 0;
5037 current_architecture &= m68881 | m68851;
5038 current_architecture |= archs[i].arch;
5040 while (*input_line_pointer == '/')
5042 ++input_line_pointer;
5043 s = input_line_pointer;
5044 /* We can't use get_symbol_end since the processor names are not
5046 while (is_part_of_name (c = *input_line_pointer++))
5048 *--input_line_pointer = 0;
5049 if (strcmp (s, "68881") == 0)
5050 current_architecture |= m68881;
5051 else if (strcmp (s, "68851") == 0)
5052 current_architecture |= m68851;
5053 *input_line_pointer = c;
5056 /* Update info about available control registers. */
5057 select_control_regs ();
5060 /* The MRI CHIP pseudo-op. */
5064 int ignore ATTRIBUTE_UNUSED;
5070 stop = mri_comment_field (&stopc);
5073 mri_comment_end (stop, stopc);
5074 demand_empty_rest_of_line ();
5077 /* The MRI FOPT pseudo-op. */
5081 int ignore ATTRIBUTE_UNUSED;
5085 if (strncasecmp (input_line_pointer, "ID=", 3) == 0)
5089 input_line_pointer += 3;
5090 temp = get_absolute_expression ();
5091 if (temp < 0 || temp > 7)
5092 as_bad (_("bad coprocessor id"));
5094 m68k_float_copnum = COP0 + temp;
5098 as_bad (_("unrecognized fopt option"));
5099 ignore_rest_of_line ();
5103 demand_empty_rest_of_line ();
5106 /* The structure used to handle the MRI OPT pseudo-op. */
5110 /* The name of the option. */
5113 /* If this is not NULL, just call this function. The first argument
5114 is the ARG field of this structure, the second argument is
5115 whether the option was negated. */
5116 void (*pfn) PARAMS ((int arg, int on));
5118 /* If this is not NULL, and the PFN field is NULL, set the variable
5119 this points to. Set it to the ARG field if the option was not
5120 negated, and the NOTARG field otherwise. */
5123 /* The value to pass to PFN or to assign to *PVAR. */
5126 /* The value to assign to *PVAR if the option is negated. If PFN is
5127 NULL, and PVAR is not NULL, and ARG and NOTARG are the same, then
5128 the option may not be negated. */
5132 /* The table used to handle the MRI OPT pseudo-op. */
5134 static void skip_to_comma PARAMS ((int, int));
5135 static void opt_nest PARAMS ((int, int));
5136 static void opt_chip PARAMS ((int, int));
5137 static void opt_list PARAMS ((int, int));
5138 static void opt_list_symbols PARAMS ((int, int));
5140 static const struct opt_action opt_table[] =
5142 { "abspcadd", 0, &m68k_abspcadd, 1, 0 },
5144 /* We do relaxing, so there is little use for these options. */
5145 { "b", 0, 0, 0, 0 },
5146 { "brs", 0, 0, 0, 0 },
5147 { "brb", 0, 0, 0, 0 },
5148 { "brl", 0, 0, 0, 0 },
5149 { "brw", 0, 0, 0, 0 },
5151 { "c", 0, 0, 0, 0 },
5152 { "cex", 0, 0, 0, 0 },
5153 { "case", 0, &symbols_case_sensitive, 1, 0 },
5154 { "cl", 0, 0, 0, 0 },
5155 { "cre", 0, 0, 0, 0 },
5156 { "d", 0, &flag_keep_locals, 1, 0 },
5157 { "e", 0, 0, 0, 0 },
5158 { "f", 0, &flag_short_refs, 1, 0 },
5159 { "frs", 0, &flag_short_refs, 1, 0 },
5160 { "frl", 0, &flag_short_refs, 0, 1 },
5161 { "g", 0, 0, 0, 0 },
5162 { "i", 0, 0, 0, 0 },
5163 { "m", 0, 0, 0, 0 },
5164 { "mex", 0, 0, 0, 0 },
5165 { "mc", 0, 0, 0, 0 },
5166 { "md", 0, 0, 0, 0 },
5167 { "nest", opt_nest, 0, 0, 0 },
5168 { "next", skip_to_comma, 0, 0, 0 },
5169 { "o", 0, 0, 0, 0 },
5170 { "old", 0, 0, 0, 0 },
5171 { "op", skip_to_comma, 0, 0, 0 },
5172 { "pco", 0, 0, 0, 0 },
5173 { "p", opt_chip, 0, 0, 0 },
5174 { "pcr", 0, 0, 0, 0 },
5175 { "pcs", 0, 0, 0, 0 },
5176 { "r", 0, 0, 0, 0 },
5177 { "quick", 0, &m68k_quick, 1, 0 },
5178 { "rel32", 0, &m68k_rel32, 1, 0 },
5179 { "s", opt_list, 0, 0, 0 },
5180 { "t", opt_list_symbols, 0, 0, 0 },
5181 { "w", 0, &flag_no_warnings, 0, 1 },
5185 #define OPTCOUNT ((int) (sizeof opt_table / sizeof opt_table[0]))
5187 /* The MRI OPT pseudo-op. */
5191 int ignore ATTRIBUTE_UNUSED;
5199 const struct opt_action *o;
5204 if (*input_line_pointer == '-')
5206 ++input_line_pointer;
5209 else if (strncasecmp (input_line_pointer, "NO", 2) == 0)
5211 input_line_pointer += 2;
5215 s = input_line_pointer;
5216 c = get_symbol_end ();
5218 for (i = 0, o = opt_table; i < OPTCOUNT; i++, o++)
5220 if (strcasecmp (s, o->name) == 0)
5224 /* Restore input_line_pointer now in case the option
5226 *input_line_pointer = c;
5227 (*o->pfn) (o->arg, t);
5229 else if (o->pvar != NULL)
5231 if (! t && o->arg == o->notarg)
5232 as_bad (_("option `%s' may not be negated"), s);
5233 *input_line_pointer = c;
5234 *o->pvar = t ? o->arg : o->notarg;
5237 *input_line_pointer = c;
5243 as_bad (_("option `%s' not recognized"), s);
5244 *input_line_pointer = c;
5247 while (*input_line_pointer++ == ',');
5249 /* Move back to terminating character. */
5250 --input_line_pointer;
5251 demand_empty_rest_of_line ();
5254 /* Skip ahead to a comma. This is used for OPT options which we do
5255 not suppor tand which take arguments. */
5258 skip_to_comma (arg, on)
5259 int arg ATTRIBUTE_UNUSED;
5260 int on ATTRIBUTE_UNUSED;
5262 while (*input_line_pointer != ','
5263 && ! is_end_of_line[(unsigned char) *input_line_pointer])
5264 ++input_line_pointer;
5267 /* Handle the OPT NEST=depth option. */
5271 int arg ATTRIBUTE_UNUSED;
5272 int on ATTRIBUTE_UNUSED;
5274 if (*input_line_pointer != '=')
5276 as_bad (_("bad format of OPT NEST=depth"));
5280 ++input_line_pointer;
5281 max_macro_nest = get_absolute_expression ();
5284 /* Handle the OPT P=chip option. */
5288 int arg ATTRIBUTE_UNUSED;
5289 int on ATTRIBUTE_UNUSED;
5291 if (*input_line_pointer != '=')
5293 /* This is just OPT P, which we do not support. */
5297 ++input_line_pointer;
5301 /* Handle the OPT S option. */
5305 int arg ATTRIBUTE_UNUSED;
5311 /* Handle the OPT T option. */
5314 opt_list_symbols (arg, on)
5315 int arg ATTRIBUTE_UNUSED;
5319 listing |= LISTING_SYMBOLS;
5321 listing &= ~LISTING_SYMBOLS;
5324 /* Handle the MRI REG pseudo-op. */
5328 int ignore ATTRIBUTE_UNUSED;
5337 if (line_label == NULL)
5339 as_bad (_("missing label"));
5340 ignore_rest_of_line ();
5345 stop = mri_comment_field (&stopc);
5349 s = input_line_pointer;
5350 while (ISALNUM (*input_line_pointer)
5351 #ifdef REGISTER_PREFIX
5352 || *input_line_pointer == REGISTER_PREFIX
5354 || *input_line_pointer == '/'
5355 || *input_line_pointer == '-')
5356 ++input_line_pointer;
5357 c = *input_line_pointer;
5358 *input_line_pointer = '\0';
5360 if (m68k_ip_op (s, &rop) != 0)
5362 if (rop.error == NULL)
5363 as_bad (_("bad register list"));
5365 as_bad (_("bad register list: %s"), rop.error);
5366 *input_line_pointer = c;
5367 ignore_rest_of_line ();
5371 *input_line_pointer = c;
5373 if (rop.mode == REGLST)
5375 else if (rop.mode == DREG)
5376 mask = 1 << (rop.reg - DATA0);
5377 else if (rop.mode == AREG)
5378 mask = 1 << (rop.reg - ADDR0 + 8);
5379 else if (rop.mode == FPREG)
5380 mask = 1 << (rop.reg - FP0 + 16);
5381 else if (rop.mode == CONTROL
5384 else if (rop.mode == CONTROL
5387 else if (rop.mode == CONTROL
5392 as_bad (_("bad register list"));
5393 ignore_rest_of_line ();
5397 S_SET_SEGMENT (line_label, reg_section);
5398 S_SET_VALUE (line_label, ~mask);
5399 symbol_set_frag (line_label, &zero_address_frag);
5402 mri_comment_end (stop, stopc);
5404 demand_empty_rest_of_line ();
5407 /* This structure is used for the MRI SAVE and RESTORE pseudo-ops. */
5411 struct save_opts *next;
5413 int symbols_case_sensitive;
5421 /* FIXME: We don't save OPT S. */
5424 /* This variable holds the stack of saved options. */
5426 static struct save_opts *save_stack;
5428 /* The MRI SAVE pseudo-op. */
5432 int ignore ATTRIBUTE_UNUSED;
5434 struct save_opts *s;
5436 s = (struct save_opts *) xmalloc (sizeof (struct save_opts));
5437 s->abspcadd = m68k_abspcadd;
5438 s->symbols_case_sensitive = symbols_case_sensitive;
5439 s->keep_locals = flag_keep_locals;
5440 s->short_refs = flag_short_refs;
5441 s->architecture = current_architecture;
5442 s->quick = m68k_quick;
5443 s->rel32 = m68k_rel32;
5444 s->listing = listing;
5445 s->no_warnings = flag_no_warnings;
5447 s->next = save_stack;
5450 demand_empty_rest_of_line ();
5453 /* The MRI RESTORE pseudo-op. */
5457 int ignore ATTRIBUTE_UNUSED;
5459 struct save_opts *s;
5461 if (save_stack == NULL)
5463 as_bad (_("restore without save"));
5464 ignore_rest_of_line ();
5469 save_stack = s->next;
5471 m68k_abspcadd = s->abspcadd;
5472 symbols_case_sensitive = s->symbols_case_sensitive;
5473 flag_keep_locals = s->keep_locals;
5474 flag_short_refs = s->short_refs;
5475 current_architecture = s->architecture;
5476 m68k_quick = s->quick;
5477 m68k_rel32 = s->rel32;
5478 listing = s->listing;
5479 flag_no_warnings = s->no_warnings;
5483 demand_empty_rest_of_line ();
5486 /* Types of MRI structured control directives. */
5488 enum mri_control_type
5496 /* This structure is used to stack the MRI structured control
5499 struct mri_control_info
5501 /* The directive within which this one is enclosed. */
5502 struct mri_control_info *outer;
5504 /* The type of directive. */
5505 enum mri_control_type type;
5507 /* Whether an ELSE has been in an IF. */
5510 /* The add or sub statement at the end of a FOR. */
5513 /* The label of the top of a FOR or REPEAT loop. */
5516 /* The label to jump to for the next iteration, or the else
5517 expression of a conditional. */
5520 /* The label to jump to to break out of the loop, or the label past
5521 the end of a conditional. */
5525 /* The stack of MRI structured control directives. */
5527 static struct mri_control_info *mri_control_stack;
5529 /* The current MRI structured control directive index number, used to
5530 generate label names. */
5532 static int mri_control_index;
5534 /* Some function prototypes. */
5536 static void mri_assemble PARAMS ((char *));
5537 static char *mri_control_label PARAMS ((void));
5538 static struct mri_control_info *push_mri_control
5539 PARAMS ((enum mri_control_type));
5540 static void pop_mri_control PARAMS ((void));
5541 static int parse_mri_condition PARAMS ((int *));
5542 static int parse_mri_control_operand
5543 PARAMS ((int *, char **, char **, char **, char **));
5544 static int swap_mri_condition PARAMS ((int));
5545 static int reverse_mri_condition PARAMS ((int));
5546 static void build_mri_control_operand
5547 PARAMS ((int, int, char *, char *, char *, char *, const char *,
5548 const char *, int));
5549 static void parse_mri_control_expression
5550 PARAMS ((char *, int, const char *, const char *, int));
5552 /* Assemble an instruction for an MRI structured control directive. */
5560 /* md_assemble expects the opcode to be in lower case. */
5561 for (s = str; *s != ' ' && *s != '\0'; s++)
5567 /* Generate a new MRI label structured control directive label name. */
5570 mri_control_label ()
5574 n = (char *) xmalloc (20);
5575 sprintf (n, "%smc%d", FAKE_LABEL_NAME, mri_control_index);
5576 ++mri_control_index;
5580 /* Create a new MRI structured control directive. */
5582 static struct mri_control_info *
5583 push_mri_control (type)
5584 enum mri_control_type type;
5586 struct mri_control_info *n;
5588 n = (struct mri_control_info *) xmalloc (sizeof (struct mri_control_info));
5592 if (type == mri_if || type == mri_while)
5595 n->top = mri_control_label ();
5596 n->next = mri_control_label ();
5597 n->bottom = mri_control_label ();
5599 n->outer = mri_control_stack;
5600 mri_control_stack = n;
5605 /* Pop off the stack of MRI structured control directives. */
5610 struct mri_control_info *n;
5612 n = mri_control_stack;
5613 mri_control_stack = n->outer;
5621 /* Recognize a condition code in an MRI structured control expression. */
5624 parse_mri_condition (pcc)
5629 know (*input_line_pointer == '<');
5631 ++input_line_pointer;
5632 c1 = *input_line_pointer++;
5633 c2 = *input_line_pointer++;
5635 if (*input_line_pointer != '>')
5637 as_bad (_("syntax error in structured control directive"));
5641 ++input_line_pointer;
5647 *pcc = (c1 << 8) | c2;
5652 /* Parse a single operand in an MRI structured control expression. */
5655 parse_mri_control_operand (pcc, leftstart, leftstop, rightstart, rightstop)
5672 if (*input_line_pointer == '<')
5674 /* It's just a condition code. */
5675 return parse_mri_condition (pcc);
5678 /* Look ahead for the condition code. */
5679 for (s = input_line_pointer; *s != '\0'; ++s)
5681 if (*s == '<' && s[1] != '\0' && s[2] != '\0' && s[3] == '>')
5686 as_bad (_("missing condition code in structured control directive"));
5690 *leftstart = input_line_pointer;
5692 if (*leftstop > *leftstart
5693 && ((*leftstop)[-1] == ' ' || (*leftstop)[-1] == '\t'))
5696 input_line_pointer = s;
5697 if (! parse_mri_condition (pcc))
5700 /* Look ahead for AND or OR or end of line. */
5701 for (s = input_line_pointer; *s != '\0'; ++s)
5703 /* We must make sure we don't misinterpret AND/OR at the end of labels!
5704 if d0 <eq> #FOOAND and d1 <ne> #BAROR then
5706 if ((s == input_line_pointer
5709 && ((strncasecmp (s, "AND", 3) == 0
5710 && (s[3] == '.' || ! is_part_of_name (s[3])))
5711 || (strncasecmp (s, "OR", 2) == 0
5712 && (s[2] == '.' || ! is_part_of_name (s[2])))))
5716 *rightstart = input_line_pointer;
5718 if (*rightstop > *rightstart
5719 && ((*rightstop)[-1] == ' ' || (*rightstop)[-1] == '\t'))
5722 input_line_pointer = s;
5727 #define MCC(b1, b2) (((b1) << 8) | (b2))
5729 /* Swap the sense of a condition. This changes the condition so that
5730 it generates the same result when the operands are swapped. */
5733 swap_mri_condition (cc)
5738 case MCC ('h', 'i'): return MCC ('c', 's');
5739 case MCC ('l', 's'): return MCC ('c', 'c');
5740 /* <HS> is an alias for <CC> */
5741 case MCC ('h', 's'):
5742 case MCC ('c', 'c'): return MCC ('l', 's');
5743 /* <LO> is an alias for <CS> */
5744 case MCC ('l', 'o'):
5745 case MCC ('c', 's'): return MCC ('h', 'i');
5746 case MCC ('p', 'l'): return MCC ('m', 'i');
5747 case MCC ('m', 'i'): return MCC ('p', 'l');
5748 case MCC ('g', 'e'): return MCC ('l', 'e');
5749 case MCC ('l', 't'): return MCC ('g', 't');
5750 case MCC ('g', 't'): return MCC ('l', 't');
5751 case MCC ('l', 'e'): return MCC ('g', 'e');
5752 /* issue a warning for conditions we can not swap */
5753 case MCC ('n', 'e'): return MCC ('n', 'e'); // no problem here
5754 case MCC ('e', 'q'): return MCC ('e', 'q'); // also no problem
5755 case MCC ('v', 'c'):
5756 case MCC ('v', 's'):
5758 as_warn (_("Condition <%c%c> in structured control directive can not be encoded correctly"),
5759 (char) (cc >> 8), (char) (cc));
5765 /* Reverse the sense of a condition. */
5768 reverse_mri_condition (cc)
5773 case MCC ('h', 'i'): return MCC ('l', 's');
5774 case MCC ('l', 's'): return MCC ('h', 'i');
5775 /* <HS> is an alias for <CC> */
5776 case MCC ('h', 's'): return MCC ('l', 'o');
5777 case MCC ('c', 'c'): return MCC ('c', 's');
5778 /* <LO> is an alias for <CS> */
5779 case MCC ('l', 'o'): return MCC ('h', 's');
5780 case MCC ('c', 's'): return MCC ('c', 'c');
5781 case MCC ('n', 'e'): return MCC ('e', 'q');
5782 case MCC ('e', 'q'): return MCC ('n', 'e');
5783 case MCC ('v', 'c'): return MCC ('v', 's');
5784 case MCC ('v', 's'): return MCC ('v', 'c');
5785 case MCC ('p', 'l'): return MCC ('m', 'i');
5786 case MCC ('m', 'i'): return MCC ('p', 'l');
5787 case MCC ('g', 'e'): return MCC ('l', 't');
5788 case MCC ('l', 't'): return MCC ('g', 'e');
5789 case MCC ('g', 't'): return MCC ('l', 'e');
5790 case MCC ('l', 'e'): return MCC ('g', 't');
5795 /* Build an MRI structured control expression. This generates test
5796 and branch instructions. It goes to TRUELAB if the condition is
5797 true, and to FALSELAB if the condition is false. Exactly one of
5798 TRUELAB and FALSELAB will be NULL, meaning to fall through. QUAL
5799 is the size qualifier for the expression. EXTENT is the size to
5800 use for the branch. */
5803 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
5804 rightstop, truelab, falselab, extent)
5811 const char *truelab;
5812 const char *falselab;
5818 if (leftstart != NULL)
5820 struct m68k_op leftop, rightop;
5823 /* Swap the compare operands, if necessary, to produce a legal
5824 m68k compare instruction. Comparing a register operand with
5825 a non-register operand requires the register to be on the
5826 right (cmp, cmpa). Comparing an immediate value with
5827 anything requires the immediate value to be on the left
5832 (void) m68k_ip_op (leftstart, &leftop);
5837 (void) m68k_ip_op (rightstart, &rightop);
5840 if (rightop.mode == IMMED
5841 || ((leftop.mode == DREG || leftop.mode == AREG)
5842 && (rightop.mode != DREG && rightop.mode != AREG)))
5846 /* Correct conditional handling:
5847 if #1 <lt> d0 then ;means if (1 < d0)
5853 cmp #1,d0 if we do *not* swap the operands
5854 bgt true we need the swapped condition!
5861 leftstart = rightstart;
5864 leftstop = rightstop;
5869 cc = swap_mri_condition (cc);
5873 if (truelab == NULL)
5875 cc = reverse_mri_condition (cc);
5879 if (leftstart != NULL)
5881 buf = (char *) xmalloc (20
5882 + (leftstop - leftstart)
5883 + (rightstop - rightstart));
5889 *s++ = TOLOWER (qual);
5891 memcpy (s, leftstart, leftstop - leftstart);
5892 s += leftstop - leftstart;
5894 memcpy (s, rightstart, rightstop - rightstart);
5895 s += rightstop - rightstart;
5901 buf = (char *) xmalloc (20 + strlen (truelab));
5907 *s++ = TOLOWER (extent);
5909 strcpy (s, truelab);
5914 /* Parse an MRI structured control expression. This generates test
5915 and branch instructions. STOP is where the expression ends. It
5916 goes to TRUELAB if the condition is true, and to FALSELAB if the
5917 condition is false. Exactly one of TRUELAB and FALSELAB will be
5918 NULL, meaning to fall through. QUAL is the size qualifier for the
5919 expression. EXTENT is the size to use for the branch. */
5922 parse_mri_control_expression (stop, qual, truelab, falselab, extent)
5925 const char *truelab;
5926 const char *falselab;
5939 if (! parse_mri_control_operand (&cc, &leftstart, &leftstop,
5940 &rightstart, &rightstop))
5946 if (strncasecmp (input_line_pointer, "AND", 3) == 0)
5950 if (falselab != NULL)
5953 flab = mri_control_label ();
5955 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
5956 rightstop, (const char *) NULL, flab, extent);
5958 input_line_pointer += 3;
5959 if (*input_line_pointer != '.'
5960 || input_line_pointer[1] == '\0')
5964 qual = input_line_pointer[1];
5965 input_line_pointer += 2;
5968 if (! parse_mri_control_operand (&cc, &leftstart, &leftstop,
5969 &rightstart, &rightstop))
5975 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
5976 rightstop, truelab, falselab, extent);
5978 if (falselab == NULL)
5981 else if (strncasecmp (input_line_pointer, "OR", 2) == 0)
5985 if (truelab != NULL)
5988 tlab = mri_control_label ();
5990 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
5991 rightstop, tlab, (const char *) NULL, extent);
5993 input_line_pointer += 2;
5994 if (*input_line_pointer != '.'
5995 || input_line_pointer[1] == '\0')
5999 qual = input_line_pointer[1];
6000 input_line_pointer += 2;
6003 if (! parse_mri_control_operand (&cc, &leftstart, &leftstop,
6004 &rightstart, &rightstop))
6010 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6011 rightstop, truelab, falselab, extent);
6013 if (truelab == NULL)
6018 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6019 rightstop, truelab, falselab, extent);
6023 if (input_line_pointer != stop)
6024 as_bad (_("syntax error in structured control directive"));
6027 /* Handle the MRI IF pseudo-op. This may be a structured control
6028 directive, or it may be a regular assembler conditional, depending
6037 struct mri_control_info *n;
6039 /* A structured control directive must end with THEN with an
6040 optional qualifier. */
6041 s = input_line_pointer;
6042 /* We only accept '*' as introduction of comments if preceded by white space
6043 or at first column of a line (I think this can't actually happen here?)
6044 This is important when assembling:
6045 if d0 <ne> 12(a0,d0*2) then
6046 if d0 <ne> #CONST*20 then */
6047 while ( ! ( is_end_of_line[(unsigned char) *s]
6050 && ( s == input_line_pointer
6052 || *(s-1) == '\t'))))
6055 while (s > input_line_pointer && (*s == ' ' || *s == '\t'))
6058 if (s - input_line_pointer > 1
6062 if (s - input_line_pointer < 3
6063 || strncasecmp (s - 3, "THEN", 4) != 0)
6067 as_bad (_("missing then"));
6068 ignore_rest_of_line ();
6072 /* It's a conditional. */
6077 /* Since this might be a conditional if, this pseudo-op will be
6078 called even if we are supported to be ignoring input. Double
6079 check now. Clobber *input_line_pointer so that ignore_input
6080 thinks that this is not a special pseudo-op. */
6081 c = *input_line_pointer;
6082 *input_line_pointer = 0;
6083 if (ignore_input ())
6085 *input_line_pointer = c;
6086 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6087 ++input_line_pointer;
6088 demand_empty_rest_of_line ();
6091 *input_line_pointer = c;
6093 n = push_mri_control (mri_if);
6095 parse_mri_control_expression (s - 3, qual, (const char *) NULL,
6096 n->next, s[1] == '.' ? s[2] : '\0');
6099 input_line_pointer = s + 3;
6101 input_line_pointer = s + 1;
6105 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6106 ++input_line_pointer;
6109 demand_empty_rest_of_line ();
6112 /* Handle the MRI else pseudo-op. If we are currently doing an MRI
6113 structured IF, associate the ELSE with the IF. Otherwise, assume
6114 it is a conditional else. */
6125 && (mri_control_stack == NULL
6126 || mri_control_stack->type != mri_if
6127 || mri_control_stack->else_seen))
6133 c = *input_line_pointer;
6134 *input_line_pointer = 0;
6135 if (ignore_input ())
6137 *input_line_pointer = c;
6138 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6139 ++input_line_pointer;
6140 demand_empty_rest_of_line ();
6143 *input_line_pointer = c;
6145 if (mri_control_stack == NULL
6146 || mri_control_stack->type != mri_if
6147 || mri_control_stack->else_seen)
6149 as_bad (_("else without matching if"));
6150 ignore_rest_of_line ();
6154 mri_control_stack->else_seen = 1;
6156 buf = (char *) xmalloc (20 + strlen (mri_control_stack->bottom));
6157 q[0] = TOLOWER (qual);
6159 sprintf (buf, "bra%s %s", q, mri_control_stack->bottom);
6163 colon (mri_control_stack->next);
6167 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6168 ++input_line_pointer;
6171 demand_empty_rest_of_line ();
6174 /* Handle the MRI ENDI pseudo-op. */
6178 int ignore ATTRIBUTE_UNUSED;
6180 if (mri_control_stack == NULL
6181 || mri_control_stack->type != mri_if)
6183 as_bad (_("endi without matching if"));
6184 ignore_rest_of_line ();
6188 /* ignore_input will not return true for ENDI, so we don't need to
6189 worry about checking it again here. */
6191 if (! mri_control_stack->else_seen)
6192 colon (mri_control_stack->next);
6193 colon (mri_control_stack->bottom);
6199 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6200 ++input_line_pointer;
6203 demand_empty_rest_of_line ();
6206 /* Handle the MRI BREAK pseudo-op. */
6209 s_mri_break (extent)
6212 struct mri_control_info *n;
6216 n = mri_control_stack;
6218 && n->type != mri_for
6219 && n->type != mri_repeat
6220 && n->type != mri_while)
6224 as_bad (_("break outside of structured loop"));
6225 ignore_rest_of_line ();
6229 buf = (char *) xmalloc (20 + strlen (n->bottom));
6230 ex[0] = TOLOWER (extent);
6232 sprintf (buf, "bra%s %s", ex, n->bottom);
6238 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6239 ++input_line_pointer;
6242 demand_empty_rest_of_line ();
6245 /* Handle the MRI NEXT pseudo-op. */
6251 struct mri_control_info *n;
6255 n = mri_control_stack;
6257 && n->type != mri_for
6258 && n->type != mri_repeat
6259 && n->type != mri_while)
6263 as_bad (_("next outside of structured loop"));
6264 ignore_rest_of_line ();
6268 buf = (char *) xmalloc (20 + strlen (n->next));
6269 ex[0] = TOLOWER (extent);
6271 sprintf (buf, "bra%s %s", ex, n->next);
6277 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6278 ++input_line_pointer;
6281 demand_empty_rest_of_line ();
6284 /* Handle the MRI FOR pseudo-op. */
6290 const char *varstart, *varstop;
6291 const char *initstart, *initstop;
6292 const char *endstart, *endstop;
6293 const char *bystart, *bystop;
6297 struct mri_control_info *n;
6303 FOR.q var = init { TO | DOWNTO } end [ BY by ] DO.e
6307 varstart = input_line_pointer;
6309 /* Look for the '='. */
6310 while (! is_end_of_line[(unsigned char) *input_line_pointer]
6311 && *input_line_pointer != '=')
6312 ++input_line_pointer;
6313 if (*input_line_pointer != '=')
6315 as_bad (_("missing ="));
6316 ignore_rest_of_line ();
6320 varstop = input_line_pointer;
6321 if (varstop > varstart
6322 && (varstop[-1] == ' ' || varstop[-1] == '\t'))
6325 ++input_line_pointer;
6327 initstart = input_line_pointer;
6329 /* Look for TO or DOWNTO. */
6332 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6334 if (strncasecmp (input_line_pointer, "TO", 2) == 0
6335 && ! is_part_of_name (input_line_pointer[2]))
6337 initstop = input_line_pointer;
6338 input_line_pointer += 2;
6341 if (strncasecmp (input_line_pointer, "DOWNTO", 6) == 0
6342 && ! is_part_of_name (input_line_pointer[6]))
6344 initstop = input_line_pointer;
6346 input_line_pointer += 6;
6349 ++input_line_pointer;
6351 if (initstop == NULL)
6353 as_bad (_("missing to or downto"));
6354 ignore_rest_of_line ();
6357 if (initstop > initstart
6358 && (initstop[-1] == ' ' || initstop[-1] == '\t'))
6362 endstart = input_line_pointer;
6364 /* Look for BY or DO. */
6367 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6369 if (strncasecmp (input_line_pointer, "BY", 2) == 0
6370 && ! is_part_of_name (input_line_pointer[2]))
6372 endstop = input_line_pointer;
6374 input_line_pointer += 2;
6377 if (strncasecmp (input_line_pointer, "DO", 2) == 0
6378 && (input_line_pointer[2] == '.'
6379 || ! is_part_of_name (input_line_pointer[2])))
6381 endstop = input_line_pointer;
6382 input_line_pointer += 2;
6385 ++input_line_pointer;
6387 if (endstop == NULL)
6389 as_bad (_("missing do"));
6390 ignore_rest_of_line ();
6393 if (endstop > endstart
6394 && (endstop[-1] == ' ' || endstop[-1] == '\t'))
6400 bystop = bystart + 2;
6405 bystart = input_line_pointer;
6409 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6411 if (strncasecmp (input_line_pointer, "DO", 2) == 0
6412 && (input_line_pointer[2] == '.'
6413 || ! is_part_of_name (input_line_pointer[2])))
6415 bystop = input_line_pointer;
6416 input_line_pointer += 2;
6419 ++input_line_pointer;
6423 as_bad (_("missing do"));
6424 ignore_rest_of_line ();
6427 if (bystop > bystart
6428 && (bystop[-1] == ' ' || bystop[-1] == '\t'))
6432 if (*input_line_pointer != '.')
6436 extent = input_line_pointer[1];
6437 input_line_pointer += 2;
6440 /* We have fully parsed the FOR operands. Now build the loop. */
6442 n = push_mri_control (mri_for);
6444 buf = (char *) xmalloc (50 + (input_line_pointer - varstart));
6453 *s++ = TOLOWER (qual);
6455 memcpy (s, initstart, initstop - initstart);
6456 s += initstop - initstart;
6458 memcpy (s, varstart, varstop - varstart);
6459 s += varstop - varstart;
6471 *s++ = TOLOWER (qual);
6473 memcpy (s, endstart, endstop - endstart);
6474 s += endstop - endstart;
6476 memcpy (s, varstart, varstop - varstart);
6477 s += varstop - varstart;
6482 ex[0] = TOLOWER (extent);
6485 sprintf (buf, "blt%s %s", ex, n->bottom);
6487 sprintf (buf, "bgt%s %s", ex, n->bottom);
6490 /* Put together the add or sub instruction used by ENDF. */
6498 *s++ = TOLOWER (qual);
6500 memcpy (s, bystart, bystop - bystart);
6501 s += bystop - bystart;
6503 memcpy (s, varstart, varstop - varstart);
6504 s += varstop - varstart;
6510 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6511 ++input_line_pointer;
6514 demand_empty_rest_of_line ();
6517 /* Handle the MRI ENDF pseudo-op. */
6521 int ignore ATTRIBUTE_UNUSED;
6523 if (mri_control_stack == NULL
6524 || mri_control_stack->type != mri_for)
6526 as_bad (_("endf without for"));
6527 ignore_rest_of_line ();
6531 colon (mri_control_stack->next);
6533 mri_assemble (mri_control_stack->incr);
6535 sprintf (mri_control_stack->incr, "bra %s", mri_control_stack->top);
6536 mri_assemble (mri_control_stack->incr);
6538 free (mri_control_stack->incr);
6540 colon (mri_control_stack->bottom);
6546 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6547 ++input_line_pointer;
6550 demand_empty_rest_of_line ();
6553 /* Handle the MRI REPEAT pseudo-op. */
6556 s_mri_repeat (ignore)
6557 int ignore ATTRIBUTE_UNUSED;
6559 struct mri_control_info *n;
6561 n = push_mri_control (mri_repeat);
6565 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6566 ++input_line_pointer;
6568 demand_empty_rest_of_line ();
6571 /* Handle the MRI UNTIL pseudo-op. */
6579 if (mri_control_stack == NULL
6580 || mri_control_stack->type != mri_repeat)
6582 as_bad (_("until without repeat"));
6583 ignore_rest_of_line ();
6587 colon (mri_control_stack->next);
6589 for (s = input_line_pointer; ! is_end_of_line[(unsigned char) *s]; s++)
6592 parse_mri_control_expression (s, qual, (const char *) NULL,
6593 mri_control_stack->top, '\0');
6595 colon (mri_control_stack->bottom);
6597 input_line_pointer = s;
6603 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6604 ++input_line_pointer;
6607 demand_empty_rest_of_line ();
6610 /* Handle the MRI WHILE pseudo-op. */
6618 struct mri_control_info *n;
6620 s = input_line_pointer;
6621 /* We only accept '*' as introduction of comments if preceded by white space
6622 or at first column of a line (I think this can't actually happen here?)
6623 This is important when assembling:
6624 while d0 <ne> 12(a0,d0*2) do
6625 while d0 <ne> #CONST*20 do */
6626 while (! (is_end_of_line[(unsigned char) *s]
6629 && (s == input_line_pointer
6631 || *(s-1) == '\t'))))
6634 while (*s == ' ' || *s == '\t')
6636 if (s - input_line_pointer > 1
6639 if (s - input_line_pointer < 2
6640 || strncasecmp (s - 1, "DO", 2) != 0)
6642 as_bad (_("missing do"));
6643 ignore_rest_of_line ();
6647 n = push_mri_control (mri_while);
6651 parse_mri_control_expression (s - 1, qual, (const char *) NULL, n->bottom,
6652 s[1] == '.' ? s[2] : '\0');
6654 input_line_pointer = s + 1;
6655 if (*input_line_pointer == '.')
6656 input_line_pointer += 2;
6660 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6661 ++input_line_pointer;
6664 demand_empty_rest_of_line ();
6667 /* Handle the MRI ENDW pseudo-op. */
6671 int ignore ATTRIBUTE_UNUSED;
6675 if (mri_control_stack == NULL
6676 || mri_control_stack->type != mri_while)
6678 as_bad (_("endw without while"));
6679 ignore_rest_of_line ();
6683 buf = (char *) xmalloc (20 + strlen (mri_control_stack->next));
6684 sprintf (buf, "bra %s", mri_control_stack->next);
6688 colon (mri_control_stack->bottom);
6694 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6695 ++input_line_pointer;
6698 demand_empty_rest_of_line ();
6703 * Invocation line includes a switch not recognized by the base assembler.
6704 * See if it's a processor-specific option. These are:
6706 * -[A]m[c]68000, -[A]m[c]68008, -[A]m[c]68010, -[A]m[c]68020, -[A]m[c]68030, -[A]m[c]68040
6707 * -[A]m[c]68881, -[A]m[c]68882, -[A]m[c]68851
6708 * Select the architecture. Instructions or features not
6709 * supported by the selected architecture cause fatal
6710 * errors. More than one may be specified. The default is
6711 * -m68020 -m68851 -m68881. Note that -m68008 is a synonym
6712 * for -m68000, and -m68882 is a synonym for -m68881.
6713 * -[A]m[c]no-68851, -[A]m[c]no-68881
6714 * Don't accept 688?1 instructions. (The "c" is kind of silly,
6715 * so don't use or document it, but that's the way the parsing
6718 * -pic Indicates PIC.
6719 * -k Indicates PIC. (Sun 3 only.)
6720 * --pcrel Never turn PC-relative branches into absolute jumps.
6723 * Permit `|' to be used in expressions.
6728 const char *md_shortopts = "lSA:m:kQ:V";
6730 const char *md_shortopts = "lSA:m:k";
6733 struct option md_longopts[] = {
6734 #define OPTION_PIC (OPTION_MD_BASE)
6735 {"pic", no_argument, NULL, OPTION_PIC},
6736 #define OPTION_REGISTER_PREFIX_OPTIONAL (OPTION_MD_BASE + 1)
6737 {"register-prefix-optional", no_argument, NULL,
6738 OPTION_REGISTER_PREFIX_OPTIONAL},
6739 #define OPTION_BITWISE_OR (OPTION_MD_BASE + 2)
6740 {"bitwise-or", no_argument, NULL, OPTION_BITWISE_OR},
6741 #define OPTION_BASE_SIZE_DEFAULT_16 (OPTION_MD_BASE + 3)
6742 {"base-size-default-16", no_argument, NULL, OPTION_BASE_SIZE_DEFAULT_16},
6743 #define OPTION_BASE_SIZE_DEFAULT_32 (OPTION_MD_BASE + 4)
6744 {"base-size-default-32", no_argument, NULL, OPTION_BASE_SIZE_DEFAULT_32},
6745 #define OPTION_DISP_SIZE_DEFAULT_16 (OPTION_MD_BASE + 5)
6746 {"disp-size-default-16", no_argument, NULL, OPTION_DISP_SIZE_DEFAULT_16},
6747 #define OPTION_DISP_SIZE_DEFAULT_32 (OPTION_MD_BASE + 6)
6748 {"disp-size-default-32", no_argument, NULL, OPTION_DISP_SIZE_DEFAULT_32},
6749 #define OPTION_PCREL (OPTION_MD_BASE + 7)
6750 {"pcrel", no_argument, NULL, OPTION_PCREL},
6751 {NULL, no_argument, NULL, 0}
6753 size_t md_longopts_size = sizeof (md_longopts);
6756 md_parse_option (c, arg)
6762 case 'l': /* -l means keep external to 2 bit offset
6763 rather than 16 bit one */
6764 flag_short_refs = 1;
6767 case 'S': /* -S means that jbsr's always turn into
6769 flag_long_jumps = 1;
6772 case OPTION_PCREL: /* --pcrel means never turn PC-relative
6773 branches into absolute jumps. */
6774 flag_keep_pcrel = 1;
6780 /* intentional fall-through */
6783 if (arg[0] == 'n' && arg[1] == 'o' && arg[2] == '-')
6787 const char *oarg = arg;
6793 if (arg[0] == 'c' && arg[1] == '6')
6796 for (i = 0; i < n_archs; i++)
6797 if (!strcmp (arg, archs[i].name))
6802 as_bad (_("unrecognized option `%s'"), oarg);
6805 arch = archs[i].arch;
6808 else if (arch == m68851)
6817 if (arg[0] == 'c' && arg[1] == '6')
6820 for (i = 0; i < n_archs; i++)
6821 if (!strcmp (arg, archs[i].name))
6823 unsigned long arch = archs[i].arch;
6824 if (cpu_of_arch (arch))
6825 /* It's a cpu spec. */
6827 current_architecture &= ~m68000up;
6828 current_architecture |= arch;
6830 else if (arch == m68881)
6832 current_architecture |= m68881;
6835 else if (arch == m68851)
6837 current_architecture |= m68851;
6847 as_bad (_("unrecognized architecture specification `%s'"), arg);
6856 break; /* -pic, Position Independent Code */
6858 case OPTION_REGISTER_PREFIX_OPTIONAL:
6859 flag_reg_prefix_optional = 1;
6860 reg_prefix_optional_seen = 1;
6863 /* -V: SVR4 argument to print version ID. */
6865 print_version_id ();
6868 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
6869 should be emitted or not. FIXME: Not implemented. */
6873 case OPTION_BITWISE_OR:
6878 n = (char *) xmalloc (strlen (m68k_comment_chars) + 1);
6880 for (s = m68k_comment_chars; *s != '\0'; s++)
6884 m68k_comment_chars = n;
6888 case OPTION_BASE_SIZE_DEFAULT_16:
6889 m68k_index_width_default = SIZE_WORD;
6892 case OPTION_BASE_SIZE_DEFAULT_32:
6893 m68k_index_width_default = SIZE_LONG;
6896 case OPTION_DISP_SIZE_DEFAULT_16:
6898 m68k_rel32_from_cmdline = 1;
6901 case OPTION_DISP_SIZE_DEFAULT_32:
6903 m68k_rel32_from_cmdline = 1;
6914 md_show_usage (stream)
6917 const char *default_cpu = TARGET_CPU;
6919 unsigned int default_arch;
6921 /* Get the canonical name for the default target CPU. */
6922 if (*default_cpu == 'm')
6924 for (i = 0; i < n_archs; i++)
6926 if (strcasecmp (default_cpu, archs[i].name) == 0)
6928 default_arch = archs[i].arch;
6929 for (i = 0; i < n_archs; i++)
6931 if (archs[i].arch == default_arch
6934 default_cpu = archs[i].name;
6941 fprintf (stream, _("\
6943 -l use 1 word for refs to undefined symbols [default 2]\n\
6944 -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060 |\n\
6945 -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -m68360 | -mcpu32 |\n\
6946 -m5200 | -m5202 | -m5204 | -m5206 | -m5206e | -m5307 | -m5407\n\
6947 specify variant of 680X0 architecture [default %s]\n\
6948 -m68881 | -m68882 | -mno-68881 | -mno-68882\n\
6949 target has/lacks floating-point coprocessor\n\
6950 [default yes for 68020, 68030, and cpu32]\n"),
6952 fprintf (stream, _("\
6953 -m68851 | -mno-68851\n\
6954 target has/lacks memory-management unit coprocessor\n\
6955 [default yes for 68020 and up]\n\
6956 -pic, -k generate position independent code\n\
6957 -S turn jbsr into jsr\n\
6958 --pcrel never turn PC-relative branches into absolute jumps\n\
6959 --register-prefix-optional\n\
6960 recognize register names without prefix character\n\
6961 --bitwise-or do not treat `|' as a comment character\n"));
6962 fprintf (stream, _("\
6963 --base-size-default-16 base reg without size is 16 bits\n\
6964 --base-size-default-32 base reg without size is 32 bits (default)\n\
6965 --disp-size-default-16 displacement with unknown size is 16 bits\n\
6966 --disp-size-default-32 displacement with unknown size is 32 bits (default)\n"));
6971 /* TEST2: Test md_assemble() */
6972 /* Warning, this routine probably doesn't work anymore */
6976 struct m68k_it the_ins;
6984 if (!gets (buf) || !*buf)
6986 if (buf[0] == '|' || buf[1] == '.')
6988 for (cp = buf; *cp; cp++)
6993 memset (&the_ins, '\0', sizeof (the_ins));
6994 m68k_ip (&the_ins, buf);
6997 printf (_("Error %s in %s\n"), the_ins.error, buf);
7001 printf (_("Opcode(%d.%s): "), the_ins.numo, the_ins.args);
7002 for (n = 0; n < the_ins.numo; n++)
7003 printf (" 0x%x", the_ins.opcode[n] & 0xffff);
7005 print_the_insn (&the_ins.opcode[0], stdout);
7006 (void) putchar ('\n');
7008 for (n = 0; n < strlen (the_ins.args) / 2; n++)
7010 if (the_ins.operands[n].error)
7012 printf ("op%d Error %s in %s\n", n, the_ins.operands[n].error, buf);
7015 printf ("mode %d, reg %d, ", the_ins.operands[n].mode, the_ins.operands[n].reg);
7016 if (the_ins.operands[n].b_const)
7017 printf ("Constant: '%.*s', ", 1 + the_ins.operands[n].e_const - the_ins.operands[n].b_const, the_ins.operands[n].b_const);
7018 printf ("ireg %d, isiz %d, imul %d, ", the_ins.operands[n].ireg, the_ins.operands[n].isiz, the_ins.operands[n].imul);
7019 if (the_ins.operands[n].b_iadd)
7020 printf ("Iadd: '%.*s',", 1 + the_ins.operands[n].e_iadd - the_ins.operands[n].b_iadd, the_ins.operands[n].b_iadd);
7021 (void) putchar ('\n');
7033 while (*str && *str != ' ')
7035 if (str[-1] == ':' || str[1] == '=')
7042 /* Possible states for relaxation:
7044 0 0 branch offset byte (bra, etc)
7048 1 0 indexed offsets byte a0@(32,d4:w:1) etc
7052 2 0 two-offset index word-word a0@(32,d4)@(45) etc
7059 /* We have no need to default values of symbols. */
7062 md_undefined_symbol (name)
7063 char *name ATTRIBUTE_UNUSED;
7068 /* Round up a section size to the appropriate boundary. */
7070 md_section_align (segment, size)
7071 segT segment ATTRIBUTE_UNUSED;
7075 #ifdef BFD_ASSEMBLER
7076 /* For a.out, force the section size to be aligned. If we don't do
7077 this, BFD will align it for us, but it will not write out the
7078 final bytes of the section. This may be a bug in BFD, but it is
7079 easier to fix it here since that is how the other a.out targets
7083 align = bfd_get_section_alignment (stdoutput, segment);
7084 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
7091 /* Exactly what point is a PC-relative offset relative TO?
7092 On the 68k, it is relative to the address of the first extension
7093 word. The difference between the addresses of the offset and the
7094 first extension word is stored in fx_pcrel_adjust. */
7096 md_pcrel_from (fixP)
7101 /* Because fx_pcrel_adjust is a char, and may be unsigned, we explicitly
7102 sign extend the value here. */
7103 adjust = ((fixP->fx_pcrel_adjust & 0xff) ^ 0x80) - 0x80;
7106 return fixP->fx_where + fixP->fx_frag->fr_address - adjust;
7109 #ifndef BFD_ASSEMBLER
7113 tc_coff_symbol_emit_hook (ignore)
7114 symbolS *ignore ATTRIBUTE_UNUSED;
7119 tc_coff_sizemachdep (frag)
7122 switch (frag->fr_subtype & 0x3)
7140 m68k_elf_final_processing ()
7142 /* Set file-specific flags if this is a cpu32 processor */
7143 if (cpu_of_arch (current_architecture) & cpu32)
7144 elf_elfheader (stdoutput)->e_flags |= EF_CPU32;
7145 else if ((cpu_of_arch (current_architecture) & m68000up)
7146 && !(cpu_of_arch (current_architecture) & m68020up))
7147 elf_elfheader (stdoutput)->e_flags |= EF_M68000;
7152 tc_m68k_regname_to_dw2regnum (const char *regname)
7154 unsigned int regnum;
7155 static const char *const regnames[] =
7157 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
7158 "a0", "a1", "a2", "a3", "a4", "a5", "a6", "sp",
7159 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
7163 for (regnum = 0; regnum < ARRAY_SIZE (regnames); regnum++)
7164 if (strcmp (regname, regnames[regnum]) == 0)
7171 tc_m68k_frame_initial_instructions (void)
7173 static int sp_regno = -1;
7176 sp_regno = tc_m68k_regname_to_dw2regnum ("sp");
7178 cfi_add_CFA_def_cfa (sp_regno, -DWARF2_CIE_DATA_ALIGNMENT);
7179 cfi_add_CFA_offset (DWARF2_DEFAULT_RETURN_COLUMN, DWARF2_CIE_DATA_ALIGNMENT);