1 /* tc-m68k.c -- Assemble for the m68k family
2 Copyright (C) 1987, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
3 Free Software Foundation, Inc.
5 This file is part of GAS, the GNU Assembler.
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
27 #include "opcode/m68k.h"
28 #include "m68k-parse.h"
34 /* This string holds the chars that always start a comment. If the
35 pre-processor is disabled, these aren't very useful. The macro
36 tc_comment_chars points to this. We use this, rather than the
37 usual comment_chars, so that the --bitwise-or option will work. */
38 #if defined (TE_SVR4) || defined (TE_DELTA)
39 const char *m68k_comment_chars = "|#";
41 const char *m68k_comment_chars = "|";
44 /* This array holds the chars that only start a comment at the beginning of
45 a line. If the line seems to have the form '# 123 filename'
46 .line and .file directives will appear in the pre-processed output */
47 /* Note that input_file.c hand checks for '#' at the beginning of the
48 first line of the input file. This is because the compiler outputs
49 #NO_APP at the beginning of its output. */
50 /* Also note that comments like this one will always work. */
51 const char line_comment_chars[] = "#*";
53 const char line_separator_chars[] = ";";
55 /* Chars that can be used to separate mant from exp in floating point nums */
56 CONST char EXP_CHARS[] = "eE";
58 /* Chars that mean this number is a floating point constant, as
59 in "0f12.456" or "0d1.2345e12". */
61 CONST char FLT_CHARS[] = "rRsSfFdDxXeEpP";
63 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
64 changed in read.c . Ideally it shouldn't have to know about it at all,
65 but nothing is ideal around here. */
67 const int md_reloc_size = 8; /* Size of relocation record */
69 /* Are we trying to generate PIC code? If so, absolute references
70 ought to be made into linkage table references or pc-relative
71 references. Not implemented. For ELF there are other means
72 to denote pic relocations. */
75 static int flag_short_refs; /* -l option */
76 static int flag_long_jumps; /* -S option */
77 static int flag_keep_pcrel; /* --pcrel option. */
79 #ifdef REGISTER_PREFIX_OPTIONAL
80 int flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
82 int flag_reg_prefix_optional;
85 /* Whether --register-prefix-optional was used on the command line. */
86 static int reg_prefix_optional_seen;
88 /* The floating point coprocessor to use by default. */
89 static enum m68k_register m68k_float_copnum = COP1;
91 /* If this is non-zero, then references to number(%pc) will be taken
92 to refer to number, rather than to %pc + number. */
93 static int m68k_abspcadd;
95 /* If this is non-zero, then the quick forms of the move, add, and sub
96 instructions are used when possible. */
97 static int m68k_quick = 1;
99 /* If this is non-zero, then if the size is not specified for a base
100 or outer displacement, the assembler assumes that the size should
102 static int m68k_rel32 = 1;
104 /* This is non-zero if m68k_rel32 was set from the command line. */
105 static int m68k_rel32_from_cmdline;
107 /* The default width to use for an index register when using a base
109 static enum m68k_size m68k_index_width_default = SIZE_LONG;
111 /* We want to warn if any text labels are misaligned. In order to get
112 the right line number, we need to record the line number for each
117 struct label_line *next;
124 /* The list of labels. */
126 static struct label_line *labels;
128 /* The current label. */
130 static struct label_line *current_label;
132 /* Its an arbitrary name: This means I don't approve of it */
133 /* See flames below */
134 static struct obstack robyn;
138 const char *m_operands;
139 unsigned long m_opcode;
143 struct m68k_incant *m_next;
146 #define getone(x) ((((x)->m_opcode)>>16)&0xffff)
147 #define gettwo(x) (((x)->m_opcode)&0xffff)
149 static const enum m68k_register m68000_control_regs[] = { 0 };
150 static const enum m68k_register m68010_control_regs[] = {
154 static const enum m68k_register m68020_control_regs[] = {
155 SFC, DFC, USP, VBR, CACR, CAAR, MSP, ISP,
158 static const enum m68k_register m68040_control_regs[] = {
159 SFC, DFC, CACR, TC, ITT0, ITT1, DTT0, DTT1,
160 USP, VBR, MSP, ISP, MMUSR, URP, SRP,
163 static const enum m68k_register m68060_control_regs[] = {
164 SFC, DFC, CACR, TC, ITT0, ITT1, DTT0, DTT1, BUSCR,
165 USP, VBR, URP, SRP, PCR,
168 static const enum m68k_register mcf_control_regs[] = {
169 CACR, TC, ITT0, ITT1, DTT0, DTT1, VBR, ROMBAR,
170 RAMBAR0, RAMBAR1, MBAR,
173 #define cpu32_control_regs m68010_control_regs
175 static const enum m68k_register *control_regs;
177 /* internal form of a 68020 instruction */
181 const char *args; /* list of opcode info */
184 int numo; /* Number of shorts in opcode */
187 struct m68k_op operands[6];
189 int nexp; /* number of exprs in use */
190 struct m68k_exp exprs[4];
192 int nfrag; /* Number of frags we have to produce */
195 int fragoff; /* Where in the current opcode the frag ends */
202 int nrel; /* Num of reloc strucs in use */
209 /* In a pc relative address the difference between the address
210 of the offset and the address that the offset is relative
211 to. This depends on the addressing mode. Basically this
212 is the value to put in the offset field to address the
213 first byte of the offset, without regarding the special
214 significance of some values (in the branch instruction, for
218 /* Whether this expression needs special pic relocation, and if
220 enum pic_relocation pic_reloc;
223 reloc[5]; /* Five is enough??? */
226 #define cpu_of_arch(x) ((x) & (m68000up|mcf))
227 #define float_of_arch(x) ((x) & mfloat)
228 #define mmu_of_arch(x) ((x) & mmmu)
229 #define arch_coldfire_p(x) (((x) & mcf) != 0)
231 /* Macros for determining if cpu supports a specific addressing mode */
232 #define HAVE_LONG_BRANCH(x) ((x) & (m68020|m68030|m68040|m68060|cpu32|mcf5407))
234 static struct m68k_it the_ins; /* the instruction being assembled */
236 #define op(ex) ((ex)->exp.X_op)
237 #define adds(ex) ((ex)->exp.X_add_symbol)
238 #define subs(ex) ((ex)->exp.X_op_symbol)
239 #define offs(ex) ((ex)->exp.X_add_number)
241 /* Macros for adding things to the m68k_it struct */
243 #define addword(w) the_ins.opcode[the_ins.numo++]=(w)
245 /* Static functions. */
247 static void insop PARAMS ((int, const struct m68k_incant *));
248 static void add_fix PARAMS ((int, struct m68k_exp *, int, int));
249 static void add_frag PARAMS ((symbolS *, offsetT, int));
251 /* Like addword, but goes BEFORE general operands */
255 const struct m68k_incant *opcode;
258 for(z=the_ins.numo;z>opcode->m_codenum;--z)
259 the_ins.opcode[z]=the_ins.opcode[z-1];
260 for(z=0;z<the_ins.nrel;z++)
261 the_ins.reloc[z].n+=2;
262 for (z = 0; z < the_ins.nfrag; z++)
263 the_ins.fragb[z].fragoff++;
264 the_ins.opcode[opcode->m_codenum]=w;
268 /* The numo+1 kludge is so we can hit the low order byte of the prev word.
271 add_fix (width, exp, pc_rel, pc_fix)
273 struct m68k_exp *exp;
277 the_ins.reloc[the_ins.nrel].n = ((width == 'B' || width == '3')
281 : (the_ins.numo*2)));
282 the_ins.reloc[the_ins.nrel].exp = exp->exp;
283 the_ins.reloc[the_ins.nrel].wid = width;
284 the_ins.reloc[the_ins.nrel].pcrel_fix = pc_fix;
286 the_ins.reloc[the_ins.nrel].pic_reloc = exp->pic_reloc;
288 the_ins.reloc[the_ins.nrel++].pcrel = pc_rel;
291 /* Cause an extra frag to be generated here, inserting up to 10 bytes
292 (that value is chosen in the frag_var call in md_assemble). TYPE
293 is the subtype of the frag to be generated; its primary type is
294 rs_machine_dependent.
296 The TYPE parameter is also used by md_convert_frag_1 and
297 md_estimate_size_before_relax. The appropriate type of fixup will
298 be emitted by md_convert_frag_1.
300 ADD becomes the FR_SYMBOL field of the frag, and OFF the FR_OFFSET. */
302 add_frag (add, off, type)
307 the_ins.fragb[the_ins.nfrag].fragoff=the_ins.numo;
308 the_ins.fragb[the_ins.nfrag].fadd=add;
309 the_ins.fragb[the_ins.nfrag].foff=off;
310 the_ins.fragb[the_ins.nfrag++].fragty=type;
314 (op (ex) != O_constant && op (ex) != O_big)
316 static char *crack_operand PARAMS ((char *str, struct m68k_op *opP));
317 static int get_num PARAMS ((struct m68k_exp *exp, int ok));
318 static void m68k_ip PARAMS ((char *));
319 static void insert_reg PARAMS ((const char *, int));
320 static void select_control_regs PARAMS ((void));
321 static void init_regtable PARAMS ((void));
322 static int reverse_16_bits PARAMS ((int in));
323 static int reverse_8_bits PARAMS ((int in));
324 static void install_gen_operand PARAMS ((int mode, int val));
325 static void install_operand PARAMS ((int mode, int val));
326 static void s_bss PARAMS ((int));
327 static void s_data1 PARAMS ((int));
328 static void s_data2 PARAMS ((int));
329 static void s_even PARAMS ((int));
330 static void s_proc PARAMS ((int));
331 static void mri_chip PARAMS ((void));
332 static void s_chip PARAMS ((int));
333 static void s_fopt PARAMS ((int));
334 static void s_opt PARAMS ((int));
335 static void s_reg PARAMS ((int));
336 static void s_restore PARAMS ((int));
337 static void s_save PARAMS ((int));
338 static void s_mri_if PARAMS ((int));
339 static void s_mri_else PARAMS ((int));
340 static void s_mri_endi PARAMS ((int));
341 static void s_mri_break PARAMS ((int));
342 static void s_mri_next PARAMS ((int));
343 static void s_mri_for PARAMS ((int));
344 static void s_mri_endf PARAMS ((int));
345 static void s_mri_repeat PARAMS ((int));
346 static void s_mri_until PARAMS ((int));
347 static void s_mri_while PARAMS ((int));
348 static void s_mri_endw PARAMS ((int));
349 static void md_apply_fix_2 PARAMS ((fixS *, offsetT));
350 static void md_convert_frag_1 PARAMS ((fragS *));
352 static int current_architecture;
361 static const struct m68k_cpu archs[] =
363 { m68000, "68000", 0 },
364 { m68010, "68010", 0 },
365 { m68020, "68020", 0 },
366 { m68030, "68030", 0 },
367 { m68040, "68040", 0 },
368 { m68060, "68060", 0 },
369 { cpu32, "cpu32", 0 },
370 { m68881, "68881", 0 },
371 { m68851, "68851", 0 },
372 { mcf5200, "5200", 0 },
373 { mcf5206e, "5206e", 0 },
374 { mcf5307, "5307", 0},
375 { mcf5407, "5407", 0},
376 /* Aliases (effectively, so far as gas is concerned) for the above
378 { m68020, "68k", 1 },
379 { m68000, "68008", 1 },
380 { m68000, "68302", 1 },
381 { m68000, "68306", 1 },
382 { m68000, "68307", 1 },
383 { m68000, "68322", 1 },
384 { m68000, "68356", 1 },
385 { m68000, "68ec000", 1 },
386 { m68000, "68hc000", 1 },
387 { m68000, "68hc001", 1 },
388 { m68020, "68ec020", 1 },
389 { m68030, "68ec030", 1 },
390 { m68040, "68ec040", 1 },
391 { m68060, "68ec060", 1 },
392 { cpu32, "68330", 1 },
393 { cpu32, "68331", 1 },
394 { cpu32, "68332", 1 },
395 { cpu32, "68333", 1 },
396 { cpu32, "68334", 1 },
397 { cpu32, "68336", 1 },
398 { cpu32, "68340", 1 },
399 { cpu32, "68341", 1 },
400 { cpu32, "68349", 1 },
401 { cpu32, "68360", 1 },
402 { m68881, "68882", 1 },
403 { mcf5200, "5202", 1 },
404 { mcf5200, "5204", 1 },
405 { mcf5200, "5206", 1 },
408 static const int n_archs = sizeof (archs) / sizeof (archs[0]);
410 /* This is the assembler relaxation table for m68k. m68k is a rich CISC
411 architecture and we have a lot of relaxation modes. */
413 /* Macros used in the relaxation code. */
414 #define TAB(x,y) (((x) << 2) + (y))
415 #define TABTYPE(x) ((x) >> 2)
417 /* Relaxation states. */
423 /* Here are all the relaxation modes we support. First we can relax ordinary
424 branches. On 68020 and higher and on CPU32 all branch instructions take
425 three forms, so on these CPUs all branches always remain as such. When we
426 have to expand to the LONG form on a 68000, though, we substitute an
427 absolute jump instead. This is a direct replacement for unconditional
428 branches and a branch over a jump for conditional branches. However, if the
429 user requires PIC and disables this with --pcrel, we can only relax between
430 BYTE and SHORT forms, punting if that isn't enough. This gives us four
431 different relaxation modes for branches: */
433 #define BRANCHBWL 1 /* branch byte, word, or long */
434 #define BRABSJUNC 2 /* absolute jump for LONG, unconditional */
435 #define BRABSJCOND 3 /* absolute jump for LONG, conditional */
436 #define BRANCHBW 4 /* branch byte or word */
438 /* We also relax coprocessor branches and DBcc's. All CPUs that support
439 coprocessor branches support them in word and long forms, so we have only
440 one relaxation mode for them. DBcc's are word only on all CPUs. We can
441 relax them to the LONG form with a branch-around sequence. This sequence
442 can use a long branch (if available) or an absolute jump (if acceptable).
443 This gives us two relaxation modes. If long branches are not available and
444 absolute jumps are not acceptable, we don't relax DBcc's. */
446 #define FBRANCH 5 /* coprocessor branch */
447 #define DBCCLBR 6 /* DBcc relaxable with a long branch */
448 #define DBCCABSJ 7 /* DBcc relaxable with an absolute jump */
450 /* That's all for instruction relaxation. However, we also relax PC-relative
451 operands. Specifically, we have three operand relaxation modes. On the
452 68000 PC-relative operands can only be 16-bit, but on 68020 and higher and
453 on CPU32 they may be 16-bit or 32-bit. For the latter we relax between the
454 two. Also PC+displacement+index operands in their simple form (with a non-
455 suppressed index without memory indirection) are supported on all CPUs, but
456 on the 68000 the displacement can be 8-bit only, whereas on 68020 and higher
457 and on CPU32 we relax it to SHORT and LONG forms as well using the extended
458 form of the PC+displacement+index operand. Finally, some absolute operands
459 can be relaxed down to 16-bit PC-relative. */
461 #define PCREL1632 8 /* 16-bit or 32-bit PC-relative */
462 #define PCINDEX 9 /* PC+displacement+index */
463 #define ABSTOPCREL 10 /* absolute relax down to 16-bit PC-relative */
465 /* Note that calls to frag_var need to specify the maximum expansion
466 needed; this is currently 10 bytes for DBCC. */
469 How far Forward this mode will reach:
470 How far Backward this mode will reach:
471 How many bytes this mode will add to the size of the frag
472 Which mode to go to if the offset won't fit in this one
474 relax_typeS md_relax_table[] =
476 {1, 1, 0, 0}, /* First entries aren't used */
477 {1, 1, 0, 0}, /* For no good reason except */
478 {1, 1, 0, 0}, /* that the VAX doesn't either */
481 {(127), (-128), 0, TAB (BRANCHBWL, SHORT)},
482 {(32767), (-32768), 2, TAB (BRANCHBWL, LONG)},
486 {(127), (-128), 0, TAB (BRABSJUNC, SHORT)},
487 {(32767), (-32768), 2, TAB (BRABSJUNC, LONG)},
491 {(127), (-128), 0, TAB (BRABSJCOND, SHORT)},
492 {(32767), (-32768), 2, TAB (BRABSJCOND, LONG)},
496 {(127), (-128), 0, TAB (BRANCHBW, SHORT)},
501 {1, 1, 0, 0}, /* FBRANCH doesn't come BYTE */
502 {(32767), (-32768), 2, TAB (FBRANCH, LONG)},
506 {1, 1, 0, 0}, /* DBCC doesn't come BYTE */
507 {(32767), (-32768), 2, TAB (DBCCLBR, LONG)},
511 {1, 1, 0, 0}, /* DBCC doesn't come BYTE */
512 {(32767), (-32768), 2, TAB (DBCCABSJ, LONG)},
516 {1, 1, 0, 0}, /* PCREL1632 doesn't come BYTE */
517 {32767, -32768, 2, TAB (PCREL1632, LONG)},
521 {125, -130, 0, TAB (PCINDEX, SHORT)},
522 {32765, -32770, 2, TAB (PCINDEX, LONG)},
526 {1, 1, 0, 0}, /* ABSTOPCREL doesn't come BYTE */
527 {(32767), (-32768), 2, TAB (ABSTOPCREL, LONG)},
532 /* These are the machine dependent pseudo-ops. These are included so
533 the assembler can work on the output from the SUN C compiler, which
537 /* This table describes all the machine specific pseudo-ops the assembler
538 has to support. The fields are:
539 pseudo-op name without dot
540 function to call to execute this pseudo-op
541 Integer arg to pass to the function
543 const pseudo_typeS md_pseudo_table[] =
545 {"data1", s_data1, 0},
546 {"data2", s_data2, 0},
549 {"skip", s_space, 0},
551 #if defined (TE_SUN3) || defined (OBJ_ELF)
552 {"align", s_align_bytes, 0},
555 {"swbeg", s_ignore, 0},
557 {"extend", float_cons, 'x'},
558 {"ldouble", float_cons, 'x'},
560 /* The following pseudo-ops are supported for MRI compatibility. */
562 {"comline", s_space, 1},
564 {"mask2", s_ignore, 0},
567 {"restore", s_restore, 0},
571 {"if.b", s_mri_if, 'b'},
572 {"if.w", s_mri_if, 'w'},
573 {"if.l", s_mri_if, 'l'},
574 {"else", s_mri_else, 0},
575 {"else.s", s_mri_else, 's'},
576 {"else.l", s_mri_else, 'l'},
577 {"endi", s_mri_endi, 0},
578 {"break", s_mri_break, 0},
579 {"break.s", s_mri_break, 's'},
580 {"break.l", s_mri_break, 'l'},
581 {"next", s_mri_next, 0},
582 {"next.s", s_mri_next, 's'},
583 {"next.l", s_mri_next, 'l'},
584 {"for", s_mri_for, 0},
585 {"for.b", s_mri_for, 'b'},
586 {"for.w", s_mri_for, 'w'},
587 {"for.l", s_mri_for, 'l'},
588 {"endf", s_mri_endf, 0},
589 {"repeat", s_mri_repeat, 0},
590 {"until", s_mri_until, 0},
591 {"until.b", s_mri_until, 'b'},
592 {"until.w", s_mri_until, 'w'},
593 {"until.l", s_mri_until, 'l'},
594 {"while", s_mri_while, 0},
595 {"while.b", s_mri_while, 'b'},
596 {"while.w", s_mri_while, 'w'},
597 {"while.l", s_mri_while, 'l'},
598 {"endw", s_mri_endw, 0},
603 /* The mote pseudo ops are put into the opcode table, since they
604 don't start with a . they look like opcodes to gas.
608 extern void obj_coff_section PARAMS ((int));
611 CONST pseudo_typeS mote_pseudo_table[] =
624 {"xdef", s_globl, 0},
626 {"align", s_align_bytes, 0},
628 {"align", s_align_ptwo, 0},
631 {"sect", obj_coff_section, 0},
632 {"section", obj_coff_section, 0},
637 #define issbyte(x) ((x)>=-128 && (x)<=127)
638 #define isubyte(x) ((x)>=0 && (x)<=255)
639 #define issword(x) ((x)>=-32768 && (x)<=32767)
640 #define isuword(x) ((x)>=0 && (x)<=65535)
642 #define isbyte(x) ((x)>= -255 && (x)<=255)
643 #define isword(x) ((x)>=-65536 && (x)<=65535)
644 #define islong(x) (1)
646 extern char *input_line_pointer;
648 static char mklower_table[256];
649 #define mklower(c) (mklower_table[(unsigned char) (c)])
650 static char notend_table[256];
651 static char alt_notend_table[256];
653 (! (notend_table[(unsigned char) *s] \
655 && alt_notend_table[(unsigned char) s[1]])))
657 #if defined (M68KCOFF) && !defined (BFD_ASSEMBLER)
659 #ifdef NO_PCREL_RELOCS
662 make_pcrel_absolute(fixP, add_number)
666 register unsigned char *opcode = fixP->fx_frag->fr_opcode;
668 /* rewrite the PC relative instructions to absolute address ones.
669 * these are rumoured to be faster, and the apollo linker refuses
670 * to deal with the PC relative relocations.
672 if (opcode[0] == 0x60 && opcode[1] == 0xff) /* BRA -> JMP */
677 else if (opcode[0] == 0x61 && opcode[1] == 0xff) /* BSR -> JSR */
683 as_fatal (_("Unknown PC relative instruction"));
688 #endif /* NO_PCREL_RELOCS */
691 tc_coff_fix2rtype (fixP)
694 if (fixP->fx_tcbit && fixP->fx_size == 4)
695 return R_RELLONG_NEG;
696 #ifdef NO_PCREL_RELOCS
697 know (fixP->fx_pcrel == 0);
698 return (fixP->fx_size == 1 ? R_RELBYTE
699 : fixP->fx_size == 2 ? R_DIR16
702 return (fixP->fx_pcrel ?
703 (fixP->fx_size == 1 ? R_PCRBYTE :
704 fixP->fx_size == 2 ? R_PCRWORD :
706 (fixP->fx_size == 1 ? R_RELBYTE :
707 fixP->fx_size == 2 ? R_RELWORD :
716 /* Compute the relocation code for a fixup of SIZE bytes, using pc
717 relative relocation if PCREL is non-zero. PIC says whether a special
718 pic relocation was requested. */
720 static bfd_reloc_code_real_type get_reloc_code
721 PARAMS ((int, int, enum pic_relocation));
723 static bfd_reloc_code_real_type
724 get_reloc_code (size, pcrel, pic)
727 enum pic_relocation pic;
735 return BFD_RELOC_8_GOT_PCREL;
737 return BFD_RELOC_16_GOT_PCREL;
739 return BFD_RELOC_32_GOT_PCREL;
747 return BFD_RELOC_8_GOTOFF;
749 return BFD_RELOC_16_GOTOFF;
751 return BFD_RELOC_32_GOTOFF;
759 return BFD_RELOC_8_PLT_PCREL;
761 return BFD_RELOC_16_PLT_PCREL;
763 return BFD_RELOC_32_PLT_PCREL;
771 return BFD_RELOC_8_PLTOFF;
773 return BFD_RELOC_16_PLTOFF;
775 return BFD_RELOC_32_PLTOFF;
785 return BFD_RELOC_8_PCREL;
787 return BFD_RELOC_16_PCREL;
789 return BFD_RELOC_32_PCREL;
809 as_bad (_("Can not do %d byte pc-relative relocation"), size);
811 as_bad (_("Can not do %d byte pc-relative pic relocation"), size);
816 as_bad (_("Can not do %d byte relocation"), size);
818 as_bad (_("Can not do %d byte pic relocation"), size);
821 return BFD_RELOC_NONE;
824 /* Here we decide which fixups can be adjusted to make them relative
825 to the beginning of the section instead of the symbol. Basically
826 we need to make sure that the dynamic relocations are done
827 correctly, so in some cases we force the original symbol to be
830 tc_m68k_fix_adjustable (fixP)
833 /* Prevent all adjustments to global symbols. */
834 if (S_IS_EXTERNAL (fixP->fx_addsy)
835 || S_IS_WEAK (fixP->fx_addsy))
838 /* adjust_reloc_syms doesn't know about the GOT */
839 switch (fixP->fx_r_type)
841 case BFD_RELOC_8_GOT_PCREL:
842 case BFD_RELOC_16_GOT_PCREL:
843 case BFD_RELOC_32_GOT_PCREL:
844 case BFD_RELOC_8_GOTOFF:
845 case BFD_RELOC_16_GOTOFF:
846 case BFD_RELOC_32_GOTOFF:
847 case BFD_RELOC_8_PLT_PCREL:
848 case BFD_RELOC_16_PLT_PCREL:
849 case BFD_RELOC_32_PLT_PCREL:
850 case BFD_RELOC_8_PLTOFF:
851 case BFD_RELOC_16_PLTOFF:
852 case BFD_RELOC_32_PLTOFF:
855 case BFD_RELOC_VTABLE_INHERIT:
856 case BFD_RELOC_VTABLE_ENTRY:
866 #define get_reloc_code(SIZE,PCREL,OTHER) NO_RELOC
873 tc_gen_reloc (section, fixp)
878 bfd_reloc_code_real_type code;
880 /* If the tcbit is set, then this was a fixup of a negative value
881 that was never resolved. We do not have a reloc to handle this,
882 so just return. We assume that other code will have detected this
883 situation and produced a helpful error message, so we just tell the
884 user that the reloc cannot be produced. */
888 as_bad (_("Unable to produce reloc against symbol '%s'"),
889 S_GET_NAME (fixp->fx_addsy));
893 if (fixp->fx_r_type != BFD_RELOC_NONE)
895 code = fixp->fx_r_type;
897 /* Since DIFF_EXPR_OK is defined in tc-m68k.h, it is possible
898 that fixup_segment converted a non-PC relative reloc into a
899 PC relative reloc. In such a case, we need to convert the
906 code = BFD_RELOC_8_PCREL;
909 code = BFD_RELOC_16_PCREL;
912 code = BFD_RELOC_32_PCREL;
914 case BFD_RELOC_8_PCREL:
915 case BFD_RELOC_16_PCREL:
916 case BFD_RELOC_32_PCREL:
917 case BFD_RELOC_8_GOT_PCREL:
918 case BFD_RELOC_16_GOT_PCREL:
919 case BFD_RELOC_32_GOT_PCREL:
920 case BFD_RELOC_8_GOTOFF:
921 case BFD_RELOC_16_GOTOFF:
922 case BFD_RELOC_32_GOTOFF:
923 case BFD_RELOC_8_PLT_PCREL:
924 case BFD_RELOC_16_PLT_PCREL:
925 case BFD_RELOC_32_PLT_PCREL:
926 case BFD_RELOC_8_PLTOFF:
927 case BFD_RELOC_16_PLTOFF:
928 case BFD_RELOC_32_PLTOFF:
931 as_bad_where (fixp->fx_file, fixp->fx_line,
932 _("Cannot make %s relocation PC relative"),
933 bfd_get_reloc_code_name (code));
939 #define F(SZ,PCREL) (((SZ) << 1) + (PCREL))
940 switch (F (fixp->fx_size, fixp->fx_pcrel))
942 #define MAP(SZ,PCREL,TYPE) case F(SZ,PCREL): code = (TYPE); break
943 MAP (1, 0, BFD_RELOC_8);
944 MAP (2, 0, BFD_RELOC_16);
945 MAP (4, 0, BFD_RELOC_32);
946 MAP (1, 1, BFD_RELOC_8_PCREL);
947 MAP (2, 1, BFD_RELOC_16_PCREL);
948 MAP (4, 1, BFD_RELOC_32_PCREL);
956 reloc = (arelent *) xmalloc (sizeof (arelent));
957 reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
958 *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
959 reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
962 reloc->addend = fixp->fx_addnumber;
967 reloc->addend = fixp->fx_addnumber;
969 reloc->addend = (section->vma
970 + (fixp->fx_pcrel_adjust == 64
971 ? -1 : fixp->fx_pcrel_adjust)
973 + md_pcrel_from (fixp));
976 reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
977 assert (reloc->howto != 0);
982 #endif /* BFD_ASSEMBLER */
984 /* Return zero if the reference to SYMBOL from within the same segment may
988 /* On an ELF system, we can't relax an externally visible symbol,
989 because it may be overridden by a shared library. However, if
990 TARGET_OS is "elf", then we presume that we are assembling for an
991 embedded system, in which case we don't have to worry about shared
992 libraries, and we can relax anything. */
994 #define relaxable_symbol(symbol) \
995 (strcmp (TARGET_OS, "elf") == 0 \
996 || (! S_IS_EXTERNAL (symbol) \
997 && ! S_IS_WEAK (symbol)))
1001 #define relaxable_symbol(symbol) 1
1005 /* Handle of the OPCODE hash table. NULL means any use before
1006 m68k_ip_begin() will crash. */
1007 static struct hash_control *op_hash;
1009 /* Assemble an m68k instruction. */
1016 register struct m68k_op *opP;
1017 register const struct m68k_incant *opcode;
1018 register const char *s;
1019 register int tmpreg = 0, baseo = 0, outro = 0, nextword;
1020 char *pdot, *pdotmove;
1021 enum m68k_size siz1, siz2;
1025 LITTLENUM_TYPE words[6];
1026 LITTLENUM_TYPE *wordp;
1027 unsigned long ok_arch = 0;
1029 if (*instring == ' ')
1030 instring++; /* skip leading whitespace */
1032 /* Scan up to end of operation-code, which MUST end in end-of-string
1033 or exactly 1 space. */
1035 for (p = instring; *p != '\0'; p++)
1045 the_ins.error = _("No operator");
1049 /* p now points to the end of the opcode name, probably whitespace.
1050 Make sure the name is null terminated by clobbering the
1051 whitespace, look it up in the hash table, then fix it back.
1052 Remove a dot, first, since the opcode tables have none. */
1055 for (pdotmove = pdot; pdotmove < p; pdotmove++)
1056 *pdotmove = pdotmove[1];
1062 opcode = (const struct m68k_incant *) hash_find (op_hash, instring);
1067 for (pdotmove = p; pdotmove > pdot; pdotmove--)
1068 *pdotmove = pdotmove[-1];
1075 the_ins.error = _("Unknown operator");
1079 /* found a legitimate opcode, start matching operands */
1083 if (opcode->m_operands == 0)
1085 char *old = input_line_pointer;
1087 input_line_pointer = p;
1088 /* Ahh - it's a motorola style psuedo op */
1089 mote_pseudo_table[opcode->m_opnum].poc_handler
1090 (mote_pseudo_table[opcode->m_opnum].poc_val);
1091 input_line_pointer = old;
1097 if (flag_mri && opcode->m_opnum == 0)
1099 /* In MRI mode, random garbage is allowed after an instruction
1100 which accepts no operands. */
1101 the_ins.args = opcode->m_operands;
1102 the_ins.numargs = opcode->m_opnum;
1103 the_ins.numo = opcode->m_codenum;
1104 the_ins.opcode[0] = getone (opcode);
1105 the_ins.opcode[1] = gettwo (opcode);
1109 for (opP = &the_ins.operands[0]; *p; opP++)
1111 p = crack_operand (p, opP);
1115 the_ins.error = opP->error;
1120 opsfound = opP - &the_ins.operands[0];
1122 /* This ugly hack is to support the floating pt opcodes in their
1123 standard form. Essentially, we fake a first enty of type COP#1 */
1124 if (opcode->m_operands[0] == 'I')
1128 for (n = opsfound; n > 0; --n)
1129 the_ins.operands[n] = the_ins.operands[n - 1];
1131 memset ((char *) (&the_ins.operands[0]), '\0',
1132 sizeof (the_ins.operands[0]));
1133 the_ins.operands[0].mode = CONTROL;
1134 the_ins.operands[0].reg = m68k_float_copnum;
1138 /* We've got the operands. Find an opcode that'll accept them */
1141 /* If we didn't get the right number of ops, or we have no
1142 common model with this pattern then reject this pattern. */
1144 ok_arch |= opcode->m_arch;
1145 if (opsfound != opcode->m_opnum
1146 || ((opcode->m_arch & current_architecture) == 0))
1150 for (s = opcode->m_operands, opP = &the_ins.operands[0];
1154 /* Warning: this switch is huge! */
1155 /* I've tried to organize the cases into this order:
1156 non-alpha first, then alpha by letter. Lower-case
1157 goes directly before uppercase counterpart. */
1158 /* Code with multiple case ...: gets sorted by the lowest
1159 case ... it belongs to. I hope this makes sense. */
1265 if (opP->reg == PC || opP->reg == ZPC)
1282 if (opP->reg == PC || opP->reg == ZPC)
1301 if (opP->reg == PC || opP->reg == ZPC)
1311 if (opP->mode != IMMED)
1313 else if (s[1] == 'b'
1314 && ! isvar (&opP->disp)
1315 && (opP->disp.exp.X_op != O_constant
1316 || ! isbyte (opP->disp.exp.X_add_number)))
1318 else if (s[1] == 'B'
1319 && ! isvar (&opP->disp)
1320 && (opP->disp.exp.X_op != O_constant
1321 || ! issbyte (opP->disp.exp.X_add_number)))
1323 else if (s[1] == 'w'
1324 && ! isvar (&opP->disp)
1325 && (opP->disp.exp.X_op != O_constant
1326 || ! isword (opP->disp.exp.X_add_number)))
1328 else if (s[1] == 'W'
1329 && ! isvar (&opP->disp)
1330 && (opP->disp.exp.X_op != O_constant
1331 || ! issword (opP->disp.exp.X_add_number)))
1337 if (opP->mode != IMMED)
1342 if (opP->mode == AREG
1343 || opP->mode == CONTROL
1344 || opP->mode == FPREG
1345 || opP->mode == IMMED
1346 || opP->mode == REGLST
1347 || (opP->mode != ABSL
1349 || opP->reg == ZPC)))
1354 if (opP->mode == CONTROL
1355 || opP->mode == FPREG
1356 || opP->mode == REGLST
1357 || opP->mode == IMMED
1358 || (opP->mode != ABSL
1360 || opP->reg == ZPC)))
1388 if (opP->mode == CONTROL
1389 || opP->mode == FPREG
1390 || opP->mode == REGLST)
1395 if (opP->mode != AINC)
1400 if (opP->mode != ADEC)
1450 if (opP->reg == PC || opP->reg == ZPC)
1471 case '~': /* For now! (JF FOO is this right?) */
1493 if (opP->mode != CONTROL
1494 || (opP->reg != TT0 && opP->reg != TT1))
1499 if (opP->mode != AREG)
1504 if (opP->mode != AINDR)
1509 if (opP->mode != ABSL
1511 && strncmp (instring, "jbsr", 4) == 0))
1516 if (opP->mode != CONTROL || opP->reg != CCR)
1521 if (opP->mode != DISP
1523 || opP->reg > ADDR7)
1528 if (opP->mode != DREG)
1533 if (opP->reg != ACC)
1538 if (opP->mode != FPREG)
1543 if (opP->reg != MACSR)
1548 if (opP->reg != MASK)
1553 if (opP->mode != CONTROL
1560 if (opP->mode != CONTROL
1562 || opP->reg > last_movec_reg)
1566 const enum m68k_register *rp;
1567 for (rp = control_regs; *rp; rp++)
1568 if (*rp == opP->reg)
1576 if (opP->mode != IMMED)
1582 if (opP->mode == DREG
1583 || opP->mode == AREG
1584 || opP->mode == FPREG)
1593 opP->mask = 1 << (opP->reg - DATA0);
1596 opP->mask = 1 << (opP->reg - ADDR0 + 8);
1599 opP->mask = 1 << (opP->reg - FP0 + 16);
1607 else if (opP->mode == CONTROL)
1616 opP->mask = 1 << 24;
1619 opP->mask = 1 << 25;
1622 opP->mask = 1 << 26;
1631 else if (opP->mode != REGLST)
1633 else if (s[1] == '8' && (opP->mask & 0x0ffffff) != 0)
1635 else if (s[1] == '3' && (opP->mask & 0x7000000) != 0)
1640 if (opP->mode != IMMED)
1642 else if (opP->disp.exp.X_op != O_constant
1643 || ! issbyte (opP->disp.exp.X_add_number))
1645 else if (! m68k_quick
1646 && instring[3] != 'q'
1647 && instring[4] != 'q')
1652 if (opP->mode != DREG
1653 && opP->mode != IMMED
1654 && opP->mode != ABSL)
1659 if (opP->mode != IMMED)
1661 else if (opP->disp.exp.X_op != O_constant
1662 || opP->disp.exp.X_add_number < 1
1663 || opP->disp.exp.X_add_number > 8)
1665 else if (! m68k_quick
1666 && (strncmp (instring, "add", 3) == 0
1667 || strncmp (instring, "sub", 3) == 0)
1668 && instring[3] != 'q')
1673 if (opP->mode != DREG && opP->mode != AREG)
1678 if (opP->mode != AINDR
1679 && (opP->mode != BASE
1681 && opP->reg != ZADDR0)
1682 || opP->disp.exp.X_op != O_absent
1683 || ((opP->index.reg < DATA0
1684 || opP->index.reg > DATA7)
1685 && (opP->index.reg < ADDR0
1686 || opP->index.reg > ADDR7))
1687 || opP->index.size != SIZE_UNSPEC
1688 || opP->index.scale != 1))
1693 if (opP->mode != CONTROL
1694 || ! (opP->reg == FPI
1696 || opP->reg == FPC))
1701 if (opP->mode != CONTROL || opP->reg != SR)
1706 if (opP->mode != IMMED)
1708 else if (opP->disp.exp.X_op != O_constant
1709 || opP->disp.exp.X_add_number < 0
1710 || opP->disp.exp.X_add_number > 7)
1715 if (opP->mode != CONTROL || opP->reg != USP)
1719 /* JF these are out of order. We could put them
1720 in order if we were willing to put up with
1721 bunches of #ifdef m68851s in the code.
1723 Don't forget that you need these operands
1724 to use 68030 MMU instructions. */
1726 /* Memory addressing mode used by pflushr */
1728 if (opP->mode == CONTROL
1729 || opP->mode == FPREG
1730 || opP->mode == DREG
1731 || opP->mode == AREG
1732 || opP->mode == REGLST)
1734 /* We should accept immediate operands, but they
1735 supposedly have to be quad word, and we don't
1736 handle that. I would like to see what a Motorola
1737 assembler does before doing something here. */
1738 if (opP->mode == IMMED)
1743 if (opP->mode != CONTROL
1744 || (opP->reg != SFC && opP->reg != DFC))
1749 if (opP->mode != CONTROL || opP->reg != TC)
1754 if (opP->mode != CONTROL || opP->reg != AC)
1759 if (opP->mode != CONTROL
1762 && opP->reg != SCC))
1767 if (opP->mode != CONTROL
1773 if (opP->mode != CONTROL
1776 && opP->reg != CRP))
1781 if (opP->mode != CONTROL
1782 || (!(opP->reg >= BAD && opP->reg <= BAD + 7)
1783 && !(opP->reg >= BAC && opP->reg <= BAC + 7)))
1788 if (opP->mode != CONTROL || opP->reg != PSR)
1793 if (opP->mode != CONTROL || opP->reg != PCSR)
1798 if (opP->mode != CONTROL
1805 } /* not a cache specifier. */
1809 if (opP->mode != ABSL)
1814 if (opP->reg < DATA0L || opP->reg > ADDR7U)
1816 /* FIXME: kludge instead of fixing parser:
1817 upper/lower registers are *not* CONTROL
1818 registers, but ordinary ones. */
1819 if ((opP->reg >= DATA0L && opP->reg <= DATA7L)
1820 || (opP->reg >= DATA0U && opP->reg <= DATA7U))
1828 } /* switch on type of operand */
1832 } /* for each operand */
1833 } /* if immediately wrong */
1840 opcode = opcode->m_next;
1845 && !(ok_arch & current_architecture))
1850 _("invalid instruction for this architecture; needs "));
1851 cp = buf + strlen (buf);
1855 strcpy (cp, _("fpu (68040, 68060 or 68881/68882)"));
1858 strcpy (cp, _("mmu (68030 or 68851)"));
1861 strcpy (cp, _("68020 or higher"));
1864 strcpy (cp, _("68000 or higher"));
1867 strcpy (cp, _("68010 or higher"));
1871 int got_one = 0, idx;
1873 idx < (int) (sizeof (archs) / sizeof (archs[0]));
1876 if ((archs[idx].arch & ok_arch)
1877 && ! archs[idx].alias)
1881 strcpy (cp, " or ");
1885 strcpy (cp, archs[idx].name);
1891 cp = xmalloc (strlen (buf) + 1);
1896 the_ins.error = _("operands mismatch");
1898 } /* Fell off the end */
1903 /* now assemble it */
1905 the_ins.args = opcode->m_operands;
1906 the_ins.numargs = opcode->m_opnum;
1907 the_ins.numo = opcode->m_codenum;
1908 the_ins.opcode[0] = getone (opcode);
1909 the_ins.opcode[1] = gettwo (opcode);
1911 for (s = the_ins.args, opP = &the_ins.operands[0]; *s; s += 2, opP++)
1913 /* This switch is a doozy.
1914 Watch the first step; its a big one! */
1942 tmpreg = 0x3c; /* 7.4 */
1943 if (strchr ("bwl", s[1]))
1944 nextword = get_num (&opP->disp, 80);
1946 nextword = get_num (&opP->disp, 0);
1947 if (isvar (&opP->disp))
1948 add_fix (s[1], &opP->disp, 0, 0);
1952 if (!isbyte (nextword))
1953 opP->error = _("operand out of range");
1958 if (!isword (nextword))
1959 opP->error = _("operand out of range");
1964 if (!issword (nextword))
1965 opP->error = _("operand out of range");
1970 addword (nextword >> 16);
1997 /* We gotta put out some float */
1998 if (op (&opP->disp) != O_big)
2003 /* Can other cases happen here? */
2004 if (op (&opP->disp) != O_constant)
2007 val = (valueT) offs (&opP->disp);
2011 generic_bignum[gencnt] = (LITTLENUM_TYPE) val;
2012 val >>= LITTLENUM_NUMBER_OF_BITS;
2016 offs (&opP->disp) = gencnt;
2018 if (offs (&opP->disp) > 0)
2020 if (offs (&opP->disp) > baseo)
2022 as_warn (_("Bignum too big for %c format; truncated"),
2024 offs (&opP->disp) = baseo;
2026 baseo -= offs (&opP->disp);
2029 for (wordp = generic_bignum + offs (&opP->disp) - 1;
2030 offs (&opP->disp)--;
2035 gen_to_words (words, baseo, (long) outro);
2036 for (wordp = words; baseo--; wordp++)
2040 tmpreg = opP->reg - DATA; /* 0.dreg */
2043 tmpreg = 0x08 + opP->reg - ADDR; /* 1.areg */
2046 tmpreg = 0x10 + opP->reg - ADDR; /* 2.areg */
2049 tmpreg = 0x20 + opP->reg - ADDR; /* 4.areg */
2052 tmpreg = 0x18 + opP->reg - ADDR; /* 3.areg */
2056 nextword = get_num (&opP->disp, 80);
2059 && ! isvar (&opP->disp)
2062 opP->disp.exp.X_op = O_symbol;
2063 #ifndef BFD_ASSEMBLER
2064 opP->disp.exp.X_add_symbol = &abs_symbol;
2066 opP->disp.exp.X_add_symbol =
2067 section_symbol (absolute_section);
2071 /* Force into index mode. Hope this works */
2073 /* We do the first bit for 32-bit displacements, and the
2074 second bit for 16 bit ones. It is possible that we
2075 should make the default be WORD instead of LONG, but
2076 I think that'd break GCC, so we put up with a little
2077 inefficiency for the sake of working output. */
2079 if (!issword (nextword)
2080 || (isvar (&opP->disp)
2081 && ((opP->disp.size == SIZE_UNSPEC
2082 && flag_short_refs == 0
2083 && cpu_of_arch (current_architecture) >= m68020
2084 && ! arch_coldfire_p (current_architecture))
2085 || opP->disp.size == SIZE_LONG)))
2087 if (cpu_of_arch (current_architecture) < m68020
2088 || arch_coldfire_p (current_architecture))
2090 _("displacement too large for this architecture; needs 68020 or higher");
2092 tmpreg = 0x3B; /* 7.3 */
2094 tmpreg = 0x30 + opP->reg - ADDR; /* 6.areg */
2095 if (isvar (&opP->disp))
2099 if (opP->disp.size == SIZE_LONG
2101 /* If the displacement needs pic
2102 relocation it cannot be relaxed. */
2103 || opP->disp.pic_reloc != pic_none
2108 add_fix ('l', &opP->disp, 1, 2);
2112 add_frag (adds (&opP->disp),
2114 TAB (PCREL1632, SZ_UNDEF));
2121 add_fix ('l', &opP->disp, 0, 0);
2126 addword (nextword >> 16);
2131 tmpreg = 0x3A; /* 7.2 */
2133 tmpreg = 0x28 + opP->reg - ADDR; /* 5.areg */
2135 if (isvar (&opP->disp))
2139 add_fix ('w', &opP->disp, 1, 0);
2142 add_fix ('w', &opP->disp, 0, 0);
2152 baseo = get_num (&opP->disp, 80);
2153 if (opP->mode == POST || opP->mode == PRE)
2154 outro = get_num (&opP->odisp, 80);
2155 /* Figure out the `addressing mode'.
2156 Also turn on the BASE_DISABLE bit, if needed. */
2157 if (opP->reg == PC || opP->reg == ZPC)
2159 tmpreg = 0x3b; /* 7.3 */
2160 if (opP->reg == ZPC)
2163 else if (opP->reg == 0)
2166 tmpreg = 0x30; /* 6.garbage */
2168 else if (opP->reg >= ZADDR0 && opP->reg <= ZADDR7)
2171 tmpreg = 0x30 + opP->reg - ZADDR0;
2174 tmpreg = 0x30 + opP->reg - ADDR; /* 6.areg */
2176 siz1 = opP->disp.size;
2177 if (opP->mode == POST || opP->mode == PRE)
2178 siz2 = opP->odisp.size;
2182 /* Index register stuff */
2183 if (opP->index.reg != 0
2184 && opP->index.reg >= DATA
2185 && opP->index.reg <= ADDR7)
2187 nextword |= (opP->index.reg - DATA) << 12;
2189 if (opP->index.size == SIZE_LONG
2190 || (opP->index.size == SIZE_UNSPEC
2191 && m68k_index_width_default == SIZE_LONG))
2194 if ((opP->index.scale != 1
2195 && cpu_of_arch (current_architecture) < m68020)
2196 || (opP->index.scale == 8
2197 && arch_coldfire_p (current_architecture)))
2200 _("scale factor invalid on this architecture; needs cpu32 or 68020 or higher");
2203 if (arch_coldfire_p (current_architecture)
2204 && opP->index.size == SIZE_WORD)
2205 opP->error = _("invalid index size for coldfire");
2207 switch (opP->index.scale)
2224 GET US OUT OF HERE! */
2226 /* Must be INDEX, with an index register. Address
2227 register cannot be ZERO-PC, and either :b was
2228 forced, or we know it will fit. For a 68000 or
2229 68010, force this mode anyways, because the
2230 larger modes aren't supported. */
2231 if (opP->mode == BASE
2232 && ((opP->reg >= ADDR0
2233 && opP->reg <= ADDR7)
2236 if (siz1 == SIZE_BYTE
2237 || cpu_of_arch (current_architecture) < m68020
2238 || arch_coldfire_p (current_architecture)
2239 || (siz1 == SIZE_UNSPEC
2240 && ! isvar (&opP->disp)
2241 && issbyte (baseo)))
2243 nextword += baseo & 0xff;
2245 if (isvar (&opP->disp))
2247 /* Do a byte relocation. If it doesn't
2248 fit (possible on m68000) let the
2249 fixup processing complain later. */
2251 add_fix ('B', &opP->disp, 1, 1);
2253 add_fix ('B', &opP->disp, 0, 0);
2255 else if (siz1 != SIZE_BYTE)
2257 if (siz1 != SIZE_UNSPEC)
2258 as_warn (_("Forcing byte displacement"));
2259 if (! issbyte (baseo))
2260 opP->error = _("byte displacement out of range");
2265 else if (siz1 == SIZE_UNSPEC
2267 && isvar (&opP->disp)
2268 && subs (&opP->disp) == NULL
2270 /* If the displacement needs pic
2271 relocation it cannot be relaxed. */
2272 && opP->disp.pic_reloc == pic_none
2276 /* The code in md_convert_frag_1 needs to be
2277 able to adjust nextword. Call frag_grow
2278 to ensure that we have enough space in
2279 the frag obstack to make all the bytes
2282 nextword += baseo & 0xff;
2284 add_frag (adds (&opP->disp), offs (&opP->disp),
2285 TAB (PCINDEX, SZ_UNDEF));
2293 nextword |= 0x40; /* No index reg */
2294 if (opP->index.reg >= ZDATA0
2295 && opP->index.reg <= ZDATA7)
2296 nextword |= (opP->index.reg - ZDATA0) << 12;
2297 else if (opP->index.reg >= ZADDR0
2298 || opP->index.reg <= ZADDR7)
2299 nextword |= (opP->index.reg - ZADDR0 + 8) << 12;
2302 /* It isn't simple. */
2304 if (cpu_of_arch (current_architecture) < m68020
2305 || arch_coldfire_p (current_architecture))
2307 _("invalid operand mode for this architecture; needs 68020 or higher");
2310 /* If the guy specified a width, we assume that it is
2311 wide enough. Maybe it isn't. If so, we lose. */
2315 if (isvar (&opP->disp)
2317 : ! issword (baseo))
2322 else if (! isvar (&opP->disp) && baseo == 0)
2331 as_warn (_(":b not permitted; defaulting to :w"));
2341 /* Figure out innner displacement stuff */
2342 if (opP->mode == POST || opP->mode == PRE)
2344 if (cpu_of_arch (current_architecture) & cpu32)
2345 opP->error = _("invalid operand mode for this architecture; needs 68020 or higher");
2349 if (isvar (&opP->odisp)
2351 : ! issword (outro))
2356 else if (! isvar (&opP->odisp) && outro == 0)
2365 as_warn (_(":b not permitted; defaulting to :w"));
2374 if (opP->mode == POST
2375 && (nextword & 0x40) == 0)
2380 if (siz1 != SIZE_UNSPEC && isvar (&opP->disp))
2382 if (opP->reg == PC || opP->reg == ZPC)
2383 add_fix (siz1 == SIZE_LONG ? 'l' : 'w', &opP->disp, 1, 2);
2385 add_fix (siz1 == SIZE_LONG ? 'l' : 'w', &opP->disp, 0, 0);
2387 if (siz1 == SIZE_LONG)
2388 addword (baseo >> 16);
2389 if (siz1 != SIZE_UNSPEC)
2392 if (siz2 != SIZE_UNSPEC && isvar (&opP->odisp))
2393 add_fix (siz2 == SIZE_LONG ? 'l' : 'w', &opP->odisp, 0, 0);
2394 if (siz2 == SIZE_LONG)
2395 addword (outro >> 16);
2396 if (siz2 != SIZE_UNSPEC)
2402 nextword = get_num (&opP->disp, 80);
2403 switch (opP->disp.size)
2408 if (!isvar (&opP->disp) && issword (offs (&opP->disp)))
2410 tmpreg = 0x38; /* 7.0 */
2414 if (isvar (&opP->disp)
2415 && !subs (&opP->disp)
2416 && adds (&opP->disp)
2418 /* If the displacement needs pic relocation it
2419 cannot be relaxed. */
2420 && opP->disp.pic_reloc == pic_none
2423 && !strchr ("~%&$?", s[0]))
2425 tmpreg = 0x3A; /* 7.2 */
2426 add_frag (adds (&opP->disp),
2428 TAB (ABSTOPCREL, SZ_UNDEF));
2431 /* Fall through into long */
2433 if (isvar (&opP->disp))
2434 add_fix ('l', &opP->disp, 0, 0);
2436 tmpreg = 0x39;/* 7.1 mode */
2437 addword (nextword >> 16);
2442 as_bad (_("unsupported byte value; use a different suffix"));
2444 case SIZE_WORD: /* Word */
2445 if (isvar (&opP->disp))
2446 add_fix ('w', &opP->disp, 0, 0);
2448 tmpreg = 0x38;/* 7.0 mode */
2456 as_bad (_("unknown/incorrect operand"));
2459 install_gen_operand (s[1], tmpreg);
2465 { /* JF: I hate floating point! */
2480 tmpreg = get_num (&opP->disp, tmpreg);
2481 if (isvar (&opP->disp))
2482 add_fix (s[1], &opP->disp, 0, 0);
2485 case 'b': /* Danger: These do no check for
2486 certain types of overflow.
2488 if (!isbyte (tmpreg))
2489 opP->error = _("out of range");
2490 insop (tmpreg, opcode);
2491 if (isvar (&opP->disp))
2492 the_ins.reloc[the_ins.nrel - 1].n =
2493 (opcode->m_codenum) * 2 + 1;
2496 if (!issbyte (tmpreg))
2497 opP->error = _("out of range");
2498 the_ins.opcode[the_ins.numo - 1] |= tmpreg & 0xff;
2499 if (isvar (&opP->disp))
2500 the_ins.reloc[the_ins.nrel - 1].n = opcode->m_codenum * 2 - 1;
2503 if (!isword (tmpreg))
2504 opP->error = _("out of range");
2505 insop (tmpreg, opcode);
2506 if (isvar (&opP->disp))
2507 the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
2510 if (!issword (tmpreg))
2511 opP->error = _("out of range");
2512 insop (tmpreg, opcode);
2513 if (isvar (&opP->disp))
2514 the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
2517 /* Because of the way insop works, we put these two out
2519 insop (tmpreg, opcode);
2520 insop (tmpreg >> 16, opcode);
2521 if (isvar (&opP->disp))
2522 the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
2529 install_operand (s[1], tmpreg);
2540 install_operand (s[1], opP->reg - ADDR);
2544 tmpreg = get_num (&opP->disp, 80);
2548 /* The pc_fix argument winds up in fx_pcrel_adjust,
2549 which is a char, and may therefore be unsigned. We
2550 want to pass -1, but we pass 64 instead, and convert
2551 back in md_pcrel_from. */
2552 add_fix ('B', &opP->disp, 1, 64);
2555 add_fix ('w', &opP->disp, 1, 0);
2560 if (! HAVE_LONG_BRANCH (current_architecture))
2561 as_warn (_("Can't use long branches on 68000/68010/5200"));
2562 the_ins.opcode[0] |= 0xff;
2563 add_fix ('l', &opP->disp, 1, 0);
2568 if (subs (&opP->disp)) /* We can't relax it */
2572 /* If the displacement needs pic relocation it cannot be
2574 if (opP->disp.pic_reloc != pic_none)
2577 /* This could either be a symbol, or an absolute
2578 address. If it's an absolute address, turn it into
2579 an absolute jump right here and keep it out of the
2581 if (adds (&opP->disp) == 0)
2583 if (the_ins.opcode[0] == 0x6000) /* jbra */
2584 the_ins.opcode[0] = 0x4EF1;
2585 else if (the_ins.opcode[0] == 0x6100) /* jbsr */
2586 the_ins.opcode[0] = 0x4EB1;
2589 the_ins.opcode[0] ^= 0x0100;
2590 the_ins.opcode[0] |= 0x0006;
2593 add_fix ('l', &opP->disp, 0, 0);
2599 /* Now we know it's going into the relaxer. Now figure
2600 out which mode. We try in this order of preference:
2601 long branch, absolute jump, byte/word branches only. */
2602 if (HAVE_LONG_BRANCH (current_architecture))
2603 add_frag (adds (&opP->disp), offs (&opP->disp),
2604 TAB (BRANCHBWL, SZ_UNDEF));
2605 else if (! flag_keep_pcrel)
2607 if ((the_ins.opcode[0] == 0x6000)
2608 || (the_ins.opcode[0] == 0x6100))
2609 add_frag (adds (&opP->disp), offs (&opP->disp),
2610 TAB (BRABSJUNC, SZ_UNDEF));
2612 add_frag (adds (&opP->disp), offs (&opP->disp),
2613 TAB (BRABSJCOND, SZ_UNDEF));
2616 add_frag (adds (&opP->disp), offs (&opP->disp),
2617 TAB (BRANCHBW, SZ_UNDEF));
2620 if (isvar (&opP->disp))
2622 /* Check for DBcc instructions. We can relax them,
2623 but only if we have long branches and/or absolute
2625 if (((the_ins.opcode[0] & 0xf0f8) == 0x50c8)
2626 && (HAVE_LONG_BRANCH (current_architecture)
2627 || (! flag_keep_pcrel)))
2629 if (HAVE_LONG_BRANCH (current_architecture))
2630 add_frag (adds (&opP->disp), offs (&opP->disp),
2631 TAB (DBCCLBR, SZ_UNDEF));
2633 add_frag (adds (&opP->disp), offs (&opP->disp),
2634 TAB (DBCCABSJ, SZ_UNDEF));
2637 add_fix ('w', &opP->disp, 1, 0);
2641 case 'C': /* Fixed size LONG coproc branches */
2642 add_fix ('l', &opP->disp, 1, 0);
2646 case 'c': /* Var size Coprocesssor branches */
2647 if (subs (&opP->disp) || (adds (&opP->disp) == 0))
2649 the_ins.opcode[the_ins.numo - 1] |= 0x40;
2650 add_fix ('l', &opP->disp, 1, 0);
2655 add_frag (adds (&opP->disp), offs (&opP->disp),
2656 TAB (FBRANCH, SZ_UNDEF));
2663 case 'C': /* Ignore it */
2666 case 'd': /* JF this is a kludge */
2667 install_operand ('s', opP->reg - ADDR);
2668 tmpreg = get_num (&opP->disp, 80);
2669 if (!issword (tmpreg))
2671 as_warn (_("Expression out of range, using 0"));
2678 install_operand (s[1], opP->reg - DATA);
2681 case 'E': /* Ignore it */
2685 install_operand (s[1], opP->reg - FP0);
2688 case 'G': /* Ignore it */
2693 tmpreg = opP->reg - COP0;
2694 install_operand (s[1], tmpreg);
2697 case 'J': /* JF foo */
2770 install_operand (s[1], tmpreg);
2774 tmpreg = get_num (&opP->disp, 55);
2775 install_operand (s[1], tmpreg & 0x7f);
2782 if (tmpreg & 0x7FF0000)
2783 as_bad (_("Floating point register in register list"));
2784 insop (reverse_16_bits (tmpreg), opcode);
2788 if (tmpreg & 0x700FFFF)
2789 as_bad (_("Wrong register in floating-point reglist"));
2790 install_operand (s[1], reverse_8_bits (tmpreg >> 16));
2798 if (tmpreg & 0x7FF0000)
2799 as_bad (_("Floating point register in register list"));
2800 insop (tmpreg, opcode);
2802 else if (s[1] == '8')
2804 if (tmpreg & 0x0FFFFFF)
2805 as_bad (_("incorrect register in reglist"));
2806 install_operand (s[1], tmpreg >> 24);
2810 if (tmpreg & 0x700FFFF)
2811 as_bad (_("wrong register in floating-point reglist"));
2813 install_operand (s[1], tmpreg >> 16);
2818 install_operand (s[1], get_num (&opP->disp, 60));
2822 tmpreg = ((opP->mode == DREG)
2823 ? 0x20 + (int) (opP->reg - DATA)
2824 : (get_num (&opP->disp, 40) & 0x1F));
2825 install_operand (s[1], tmpreg);
2829 tmpreg = get_num (&opP->disp, 10);
2832 install_operand (s[1], tmpreg);
2836 /* This depends on the fact that ADDR registers are eight
2837 more than their corresponding DATA regs, so the result
2838 will have the ADDR_REG bit set */
2839 install_operand (s[1], opP->reg - DATA);
2843 if (opP->mode == AINDR)
2844 install_operand (s[1], opP->reg - DATA);
2846 install_operand (s[1], opP->index.reg - DATA);
2850 if (opP->reg == FPI)
2852 else if (opP->reg == FPS)
2854 else if (opP->reg == FPC)
2858 install_operand (s[1], tmpreg);
2861 case 'S': /* Ignore it */
2865 install_operand (s[1], get_num (&opP->disp, 30));
2868 case 'U': /* Ignore it */
2887 as_fatal (_("failed sanity check"));
2888 } /* switch on cache token */
2889 install_operand (s[1], tmpreg);
2892 /* JF: These are out of order, I fear. */
2905 install_operand (s[1], tmpreg);
2931 install_operand (s[1], tmpreg);
2935 if (opP->reg == VAL)
2954 install_operand (s[1], tmpreg);
2968 tmpreg = (4 << 10) | ((opP->reg - BAD) << 2);
2979 tmpreg = (5 << 10) | ((opP->reg - BAC) << 2);
2985 install_operand (s[1], tmpreg);
2988 know (opP->reg == PSR);
2991 know (opP->reg == PCSR);
3006 install_operand (s[1], tmpreg);
3009 tmpreg = get_num (&opP->disp, 20);
3010 install_operand (s[1], tmpreg);
3012 case '_': /* used only for move16 absolute 32-bit address */
3013 if (isvar (&opP->disp))
3014 add_fix ('l', &opP->disp, 0, 0);
3015 tmpreg = get_num (&opP->disp, 80);
3016 addword (tmpreg >> 16);
3017 addword (tmpreg & 0xFFFF);
3020 install_operand (s[1], opP->reg - DATA0L);
3021 opP->reg -= (DATA0L);
3022 opP->reg &= 0x0F; /* remove upper/lower bit */
3029 /* By the time whe get here (FINALLY) the_ins contains the complete
3030 instruction, ready to be emitted. . . */
3034 reverse_16_bits (in)
3040 static int mask[16] =
3042 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
3043 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000
3045 for (n = 0; n < 16; n++)
3048 out |= mask[15 - n];
3051 } /* reverse_16_bits() */
3060 static int mask[8] =
3062 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
3065 for (n = 0; n < 8; n++)
3071 } /* reverse_8_bits() */
3073 /* Cause an extra frag to be generated here, inserting up to 10 bytes
3074 (that value is chosen in the frag_var call in md_assemble). TYPE
3075 is the subtype of the frag to be generated; its primary type is
3076 rs_machine_dependent.
3078 The TYPE parameter is also used by md_convert_frag_1 and
3079 md_estimate_size_before_relax. The appropriate type of fixup will
3080 be emitted by md_convert_frag_1.
3082 ADD becomes the FR_SYMBOL field of the frag, and OFF the FR_OFFSET. */
3084 install_operand (mode, val)
3091 the_ins.opcode[0] |= val & 0xFF; /* JF FF is for M kludge */
3094 the_ins.opcode[0] |= val << 9;
3097 the_ins.opcode[1] |= val << 12;
3100 the_ins.opcode[1] |= val << 6;
3103 the_ins.opcode[1] |= val;
3106 the_ins.opcode[2] |= val << 12;
3109 the_ins.opcode[2] |= val << 6;
3112 /* DANGER! This is a hack to force cas2l and cas2w cmds to be
3113 three words long! */
3115 the_ins.opcode[2] |= val;
3118 the_ins.opcode[1] |= val << 7;
3121 the_ins.opcode[1] |= val << 10;
3125 the_ins.opcode[1] |= val << 5;
3130 the_ins.opcode[1] |= (val << 10) | (val << 7);
3133 the_ins.opcode[1] |= (val << 12) | val;
3136 the_ins.opcode[0] |= val = 0xff;
3139 the_ins.opcode[0] |= val << 9;
3142 the_ins.opcode[1] |= val;
3145 the_ins.opcode[1] |= val;
3146 the_ins.numo++; /* What a hack */
3149 the_ins.opcode[1] |= val << 4;
3157 the_ins.opcode[0] |= (val << 6);
3160 the_ins.opcode[1] = (val >> 16);
3161 the_ins.opcode[2] = val & 0xffff;
3164 the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
3165 the_ins.opcode[0] |= ((val & 0x7) << 9);
3166 the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
3169 the_ins.opcode[0] |= ((val & 0x8) << (6 - 3));
3170 the_ins.opcode[0] |= ((val & 0x7) << 9);
3173 the_ins.opcode[1] |= val << 12;
3174 the_ins.opcode[1] |= ((val & 0x10) << (7 - 4));
3177 the_ins.opcode[0] |= (val & 0xF);
3178 the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
3181 the_ins.opcode[1] |= (val & 0xF);
3182 the_ins.opcode[1] |= ((val & 0x10) << (6 - 4));
3185 the_ins.opcode[1] |= ((val != 1) << 10);
3189 as_fatal (_("failed sanity check."));
3191 } /* install_operand() */
3194 install_gen_operand (mode, val)
3201 the_ins.opcode[0] |= val;
3204 /* This is a kludge!!! */
3205 the_ins.opcode[0] |= (val & 0x07) << 9 | (val & 0x38) << 3;
3214 the_ins.opcode[0] |= val;
3216 /* more stuff goes here */
3218 as_fatal (_("failed sanity check."));
3220 } /* install_gen_operand() */
3223 * verify that we have some number of paren pairs, do m68k_ip_op(), and
3224 * then deal with the bitfield hack.
3228 crack_operand (str, opP)
3230 register struct m68k_op *opP;
3232 register int parens;
3234 register char *beg_str;
3242 for (parens = 0; *str && (parens > 0 || inquote || notend (str)); str++)
3248 else if (*str == ')')
3252 opP->error = _("Extra )");
3258 if (flag_mri && *str == '\'')
3259 inquote = ! inquote;
3261 if (!*str && parens)
3263 opP->error = _("Missing )");
3268 if (m68k_ip_op (beg_str, opP) != 0)
3275 c = *++str; /* JF bitfield hack */
3280 as_bad (_("Missing operand"));
3283 /* Detect MRI REG symbols and convert them to REGLSTs. */
3284 if (opP->mode == CONTROL && (int)opP->reg < 0)
3287 opP->mask = ~(int)opP->reg;
3294 /* This is the guts of the machine-dependent assembler. STR points to a
3295 machine dependent instruction. This function is supposed to emit
3296 the frags/bytes it assembles to.
3300 insert_reg (regname, regnum)
3301 const char *regname;
3307 #ifdef REGISTER_PREFIX
3308 if (!flag_reg_prefix_optional)
3310 buf[0] = REGISTER_PREFIX;
3311 strcpy (buf + 1, regname);
3316 symbol_table_insert (symbol_new (regname, reg_section, regnum,
3317 &zero_address_frag));
3319 for (i = 0; regname[i]; i++)
3320 buf[i] = islower (regname[i]) ? toupper (regname[i]) : regname[i];
3323 symbol_table_insert (symbol_new (buf, reg_section, regnum,
3324 &zero_address_frag));
3333 static const struct init_entry init_table[] =
3392 /* control registers */
3393 { "sfc", SFC }, /* Source Function Code */
3395 { "dfc", DFC }, /* Destination Function Code */
3397 { "cacr", CACR }, /* Cache Control Register */
3398 { "caar", CAAR }, /* Cache Address Register */
3400 { "usp", USP }, /* User Stack Pointer */
3401 { "vbr", VBR }, /* Vector Base Register */
3402 { "msp", MSP }, /* Master Stack Pointer */
3403 { "isp", ISP }, /* Interrupt Stack Pointer */
3405 { "itt0", ITT0 }, /* Instruction Transparent Translation Reg 0 */
3406 { "itt1", ITT1 }, /* Instruction Transparent Translation Reg 1 */
3407 { "dtt0", DTT0 }, /* Data Transparent Translation Register 0 */
3408 { "dtt1", DTT1 }, /* Data Transparent Translation Register 1 */
3410 /* 68ec040 versions of same */
3411 { "iacr0", ITT0 }, /* Instruction Access Control Register 0 */
3412 { "iacr1", ITT1 }, /* Instruction Access Control Register 0 */
3413 { "dacr0", DTT0 }, /* Data Access Control Register 0 */
3414 { "dacr1", DTT1 }, /* Data Access Control Register 0 */
3416 /* mcf5200 versions of same. The ColdFire programmer's reference
3417 manual indicated that the order is 2,3,0,1, but Ken Rose
3418 <rose@netcom.com> says that 0,1,2,3 is the correct order. */
3419 { "acr0", ITT0 }, /* Access Control Unit 0 */
3420 { "acr1", ITT1 }, /* Access Control Unit 1 */
3421 { "acr2", DTT0 }, /* Access Control Unit 2 */
3422 { "acr3", DTT1 }, /* Access Control Unit 3 */
3424 { "tc", TC }, /* MMU Translation Control Register */
3427 { "mmusr", MMUSR }, /* MMU Status Register */
3428 { "srp", SRP }, /* User Root Pointer */
3429 { "urp", URP }, /* Supervisor Root Pointer */
3434 { "rombar", ROMBAR }, /* ROM Base Address Register */
3435 { "rambar0", RAMBAR0 }, /* ROM Base Address Register */
3436 { "rambar1", RAMBAR1 }, /* ROM Base Address Register */
3437 { "mbar", MBAR }, /* Module Base Address Register */
3438 /* end of control registers */
3472 /* 68ec030 versions of same */
3475 /* 68ec030 access control unit, identical to 030 MMU status reg */
3478 /* Suppressed data and address registers. */
3496 /* Upper and lower data and address registers, used by macw and msacw. */
3540 for (i = 0; init_table[i].name; i++)
3541 insert_reg (init_table[i].name, init_table[i].number);
3544 static int no_68851, no_68881;
3547 /* a.out machine type. Default to 68020. */
3548 int m68k_aout_machtype = 2;
3560 int shorts_this_frag;
3563 /* In MRI mode, the instruction and operands are separated by a
3564 space. Anything following the operands is a comment. The label
3565 has already been removed. */
3573 for (s = str; *s != '\0'; s++)
3575 if ((*s == ' ' || *s == '\t') && ! inquote)
3593 inquote = ! inquote;
3598 memset ((char *) (&the_ins), '\0', sizeof (the_ins));
3603 for (n = 0; n < the_ins.numargs; n++)
3604 if (the_ins.operands[n].error)
3606 er = the_ins.operands[n].error;
3612 as_bad (_("%s -- statement `%s' ignored"), er, str);
3616 /* If there is a current label, record that it marks an instruction. */
3617 if (current_label != NULL)
3619 current_label->text = 1;
3620 current_label = NULL;
3623 if (the_ins.nfrag == 0)
3625 /* No frag hacking involved; just put it out */
3626 toP = frag_more (2 * the_ins.numo);
3627 fromP = &the_ins.opcode[0];
3628 for (m = the_ins.numo; m; --m)
3630 md_number_to_chars (toP, (long) (*fromP), 2);
3634 /* put out symbol-dependent info */
3635 for (m = 0; m < the_ins.nrel; m++)
3637 switch (the_ins.reloc[m].wid)
3656 as_fatal (_("Don't know how to figure width of %c in md_assemble()"),
3657 the_ins.reloc[m].wid);
3660 fixP = fix_new_exp (frag_now,
3661 ((toP - frag_now->fr_literal)
3662 - the_ins.numo * 2 + the_ins.reloc[m].n),
3664 &the_ins.reloc[m].exp,
3665 the_ins.reloc[m].pcrel,
3666 get_reloc_code (n, the_ins.reloc[m].pcrel,
3667 the_ins.reloc[m].pic_reloc));
3668 fixP->fx_pcrel_adjust = the_ins.reloc[m].pcrel_fix;
3669 if (the_ins.reloc[m].wid == 'B')
3670 fixP->fx_signed = 1;
3675 /* There's some frag hacking */
3676 for (n = 0, fromP = &the_ins.opcode[0]; n < the_ins.nfrag; n++)
3681 wid = 2 * the_ins.fragb[n].fragoff;
3683 wid = 2 * (the_ins.numo - the_ins.fragb[n - 1].fragoff);
3684 toP = frag_more (wid);
3686 shorts_this_frag = 0;
3687 for (m = wid / 2; m; --m)
3689 md_number_to_chars (toP, (long) (*fromP), 2);
3694 for (m = 0; m < the_ins.nrel; m++)
3696 if ((the_ins.reloc[m].n) >= 2 * shorts_this_frag)
3698 the_ins.reloc[m].n -= 2 * shorts_this_frag;
3701 wid = the_ins.reloc[m].wid;
3704 the_ins.reloc[m].wid = 0;
3705 wid = (wid == 'b') ? 1 : (wid == 'w') ? 2 : (wid == 'l') ? 4 : 4000;
3707 fixP = fix_new_exp (frag_now,
3708 ((toP - frag_now->fr_literal)
3709 - the_ins.numo * 2 + the_ins.reloc[m].n),
3711 &the_ins.reloc[m].exp,
3712 the_ins.reloc[m].pcrel,
3713 get_reloc_code (wid, the_ins.reloc[m].pcrel,
3714 the_ins.reloc[m].pic_reloc));
3715 fixP->fx_pcrel_adjust = the_ins.reloc[m].pcrel_fix;
3717 (void) frag_var (rs_machine_dependent, 10, 0,
3718 (relax_substateT) (the_ins.fragb[n].fragty),
3719 the_ins.fragb[n].fadd, the_ins.fragb[n].foff, to_beg_P);
3721 n = (the_ins.numo - the_ins.fragb[n - 1].fragoff);
3722 shorts_this_frag = 0;
3725 toP = frag_more (n * sizeof (short));
3728 md_number_to_chars (toP, (long) (*fromP), 2);
3734 for (m = 0; m < the_ins.nrel; m++)
3738 wid = the_ins.reloc[m].wid;
3741 the_ins.reloc[m].wid = 0;
3742 wid = (wid == 'b') ? 1 : (wid == 'w') ? 2 : (wid == 'l') ? 4 : 4000;
3744 fixP = fix_new_exp (frag_now,
3745 ((the_ins.reloc[m].n + toP - frag_now->fr_literal)
3746 - shorts_this_frag * 2),
3748 &the_ins.reloc[m].exp,
3749 the_ins.reloc[m].pcrel,
3750 get_reloc_code (wid, the_ins.reloc[m].pcrel,
3751 the_ins.reloc[m].pic_reloc));
3752 fixP->fx_pcrel_adjust = the_ins.reloc[m].pcrel_fix;
3760 * md_begin -- set up hash tables with 68000 instructions.
3761 * similar to what the vax assembler does. ---phr
3763 /* RMS claims the thing to do is take the m68k-opcode.h table, and make
3764 a copy of it at runtime, adding in the information we want but isn't
3765 there. I think it'd be better to have an awk script hack the table
3766 at compile time. Or even just xstr the table and use it as-is. But
3767 my lord ghod hath spoken, so we do it this way. Excuse the ugly var
3770 register const struct m68k_opcode *ins;
3771 register struct m68k_incant *hack, *slak;
3772 register const char *retval = 0; /* empty string, or error msg text */
3778 flag_reg_prefix_optional = 1;
3780 if (! m68k_rel32_from_cmdline)
3784 op_hash = hash_new ();
3786 obstack_begin (&robyn, 4000);
3787 for (i = 0; i < m68k_numopcodes; i++)
3789 hack = slak = (struct m68k_incant *) obstack_alloc (&robyn, sizeof (struct m68k_incant));
3792 ins = &m68k_opcodes[i];
3793 /* We *could* ignore insns that don't match our arch here
3794 but just leaving them out of the hash. */
3795 slak->m_operands = ins->args;
3796 slak->m_opnum = strlen (slak->m_operands) / 2;
3797 slak->m_arch = ins->arch;
3798 slak->m_opcode = ins->opcode;
3799 /* This is kludgey */
3800 slak->m_codenum = ((ins->match) & 0xffffL) ? 2 : 1;
3801 if (i + 1 != m68k_numopcodes
3802 && !strcmp (ins->name, m68k_opcodes[i + 1].name))
3804 slak->m_next = (struct m68k_incant *) obstack_alloc (&robyn, sizeof (struct m68k_incant));
3809 slak = slak->m_next;
3813 retval = hash_insert (op_hash, ins->name, (char *) hack);
3815 as_fatal (_("Internal Error: Can't hash %s: %s"), ins->name, retval);
3818 for (i = 0; i < m68k_numaliases; i++)
3820 const char *name = m68k_opcode_aliases[i].primary;
3821 const char *alias = m68k_opcode_aliases[i].alias;
3822 PTR val = hash_find (op_hash, name);
3824 as_fatal (_("Internal Error: Can't find %s in hash table"), name);
3825 retval = hash_insert (op_hash, alias, val);
3827 as_fatal (_("Internal Error: Can't hash %s: %s"), alias, retval);
3830 /* In MRI mode, all unsized branches are variable sized. Normally,
3831 they are word sized. */
3834 static struct m68k_opcode_alias mri_aliases[] =
3855 i < (int) (sizeof mri_aliases / sizeof mri_aliases[0]);
3858 const char *name = mri_aliases[i].primary;
3859 const char *alias = mri_aliases[i].alias;
3860 PTR val = hash_find (op_hash, name);
3862 as_fatal (_("Internal Error: Can't find %s in hash table"), name);
3863 retval = hash_jam (op_hash, alias, val);
3865 as_fatal (_("Internal Error: Can't hash %s: %s"), alias, retval);
3869 for (i = 0; i < (int) sizeof (mklower_table); i++)
3870 mklower_table[i] = (isupper (c = (char) i)) ? tolower (c) : c;
3872 for (i = 0; i < (int) sizeof (notend_table); i++)
3874 notend_table[i] = 0;
3875 alt_notend_table[i] = 0;
3877 notend_table[','] = 1;
3878 notend_table['{'] = 1;
3879 notend_table['}'] = 1;
3880 alt_notend_table['a'] = 1;
3881 alt_notend_table['A'] = 1;
3882 alt_notend_table['d'] = 1;
3883 alt_notend_table['D'] = 1;
3884 alt_notend_table['#'] = 1;
3885 alt_notend_table['&'] = 1;
3886 alt_notend_table['f'] = 1;
3887 alt_notend_table['F'] = 1;
3888 #ifdef REGISTER_PREFIX
3889 alt_notend_table[REGISTER_PREFIX] = 1;
3892 /* We need to put '(' in alt_notend_table to handle
3893 cas2 %d0:%d2,%d3:%d4,(%a0):(%a1)
3895 alt_notend_table['('] = 1;
3897 /* We need to put '@' in alt_notend_table to handle
3898 cas2 %d0:%d2,%d3:%d4,@(%d0):@(%d1)
3900 alt_notend_table['@'] = 1;
3902 /* We need to put digits in alt_notend_table to handle
3903 bfextu %d0{24:1},%d0
3905 alt_notend_table['0'] = 1;
3906 alt_notend_table['1'] = 1;
3907 alt_notend_table['2'] = 1;
3908 alt_notend_table['3'] = 1;
3909 alt_notend_table['4'] = 1;
3910 alt_notend_table['5'] = 1;
3911 alt_notend_table['6'] = 1;
3912 alt_notend_table['7'] = 1;
3913 alt_notend_table['8'] = 1;
3914 alt_notend_table['9'] = 1;
3916 #ifndef MIT_SYNTAX_ONLY
3917 /* Insert pseudo ops, these have to go into the opcode table since
3918 gas expects pseudo ops to start with a dot */
3921 while (mote_pseudo_table[n].poc_name)
3923 hack = (struct m68k_incant *)
3924 obstack_alloc (&robyn, sizeof (struct m68k_incant));
3925 hash_insert (op_hash,
3926 mote_pseudo_table[n].poc_name, (char *) hack);
3927 hack->m_operands = 0;
3937 record_alignment (text_section, 2);
3938 record_alignment (data_section, 2);
3939 record_alignment (bss_section, 2);
3944 select_control_regs ()
3946 /* Note which set of "movec" control registers is available. */
3947 switch (cpu_of_arch (current_architecture))
3950 control_regs = m68000_control_regs;
3953 control_regs = m68010_control_regs;
3957 control_regs = m68020_control_regs;
3960 control_regs = m68040_control_regs;
3963 control_regs = m68060_control_regs;
3966 control_regs = cpu32_control_regs;
3972 control_regs = mcf_control_regs;
3980 m68k_init_after_args ()
3982 if (cpu_of_arch (current_architecture) == 0)
3985 const char *default_cpu = TARGET_CPU;
3987 if (*default_cpu == 'm')
3989 for (i = 0; i < n_archs; i++)
3990 if (strcasecmp (default_cpu, archs[i].name) == 0)
3994 as_bad (_("unrecognized default cpu `%s' ???"), TARGET_CPU);
3995 current_architecture |= m68020;
3998 current_architecture |= archs[i].arch;
4000 /* Permit m68881 specification with all cpus; those that can't work
4001 with a coprocessor could be doing emulation. */
4002 if (current_architecture & m68851)
4004 if (current_architecture & m68040)
4006 as_warn (_("68040 and 68851 specified; mmu instructions may assemble incorrectly"));
4009 /* What other incompatibilities could we check for? */
4011 /* Toss in some default assumptions about coprocessors. */
4013 && (cpu_of_arch (current_architecture)
4014 /* Can CPU32 have a 68881 coprocessor?? */
4015 & (m68020 | m68030 | cpu32)))
4017 current_architecture |= m68881;
4020 && (cpu_of_arch (current_architecture) & m68020up) != 0
4021 && (cpu_of_arch (current_architecture) & m68040up) == 0)
4023 current_architecture |= m68851;
4025 if (no_68881 && (current_architecture & m68881))
4026 as_bad (_("options for 68881 and no-68881 both given"));
4027 if (no_68851 && (current_architecture & m68851))
4028 as_bad (_("options for 68851 and no-68851 both given"));
4031 /* Work out the magic number. This isn't very general. */
4032 if (current_architecture & m68000)
4033 m68k_aout_machtype = 0;
4034 else if (current_architecture & m68010)
4035 m68k_aout_machtype = 1;
4036 else if (current_architecture & m68020)
4037 m68k_aout_machtype = 2;
4039 m68k_aout_machtype = 2;
4042 /* Note which set of "movec" control registers is available. */
4043 select_control_regs ();
4045 if (cpu_of_arch (current_architecture) < m68020
4046 || arch_coldfire_p (current_architecture))
4047 md_relax_table[TAB (PCINDEX, BYTE)].rlx_more = 0;
4050 /* This is called when a label is defined. */
4053 m68k_frob_label (sym)
4056 struct label_line *n;
4058 n = (struct label_line *) xmalloc (sizeof *n);
4061 as_where (&n->file, &n->line);
4067 /* This is called when a value that is not an instruction is emitted. */
4070 m68k_flush_pending_output ()
4072 current_label = NULL;
4075 /* This is called at the end of the assembly, when the final value of
4076 the label is known. We warn if this is a text symbol aligned at an
4080 m68k_frob_symbol (sym)
4083 if (S_GET_SEGMENT (sym) == reg_section
4084 && (int) S_GET_VALUE (sym) < 0)
4086 S_SET_SEGMENT (sym, absolute_section);
4087 S_SET_VALUE (sym, ~(int)S_GET_VALUE (sym));
4089 else if ((S_GET_VALUE (sym) & 1) != 0)
4091 struct label_line *l;
4093 for (l = labels; l != NULL; l = l->next)
4095 if (l->label == sym)
4098 as_warn_where (l->file, l->line,
4099 _("text label `%s' aligned to odd boundary"),
4107 /* This is called if we go in or out of MRI mode because of the .mri
4111 m68k_mri_mode_change (on)
4116 if (! flag_reg_prefix_optional)
4118 flag_reg_prefix_optional = 1;
4119 #ifdef REGISTER_PREFIX
4124 if (! m68k_rel32_from_cmdline)
4129 if (! reg_prefix_optional_seen)
4131 #ifdef REGISTER_PREFIX_OPTIONAL
4132 flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
4134 flag_reg_prefix_optional = 0;
4136 #ifdef REGISTER_PREFIX
4141 if (! m68k_rel32_from_cmdline)
4146 /* Equal to MAX_PRECISION in atof-ieee.c */
4147 #define MAX_LITTLENUMS 6
4149 /* Turn a string in input_line_pointer into a floating point constant
4150 of type TYPE, and store the appropriate bytes in *LITP. The number
4151 of LITTLENUMS emitted is stored in *SIZEP. An error message is
4152 returned, or NULL on OK. */
4155 md_atof (type, litP, sizeP)
4161 LITTLENUM_TYPE words[MAX_LITTLENUMS];
4162 LITTLENUM_TYPE *wordP;
4193 return _("Bad call to MD_ATOF()");
4195 t = atof_ieee (input_line_pointer, type, words);
4197 input_line_pointer = t;
4199 *sizeP = prec * sizeof (LITTLENUM_TYPE);
4200 for (wordP = words; prec--;)
4202 md_number_to_chars (litP, (long) (*wordP++), sizeof (LITTLENUM_TYPE));
4203 litP += sizeof (LITTLENUM_TYPE);
4209 md_number_to_chars (buf, val, n)
4214 number_to_chars_bigendian (buf, val, n);
4218 md_apply_fix_2 (fixP, val)
4222 addressT upper_limit;
4223 offsetT lower_limit;
4225 /* This is unnecessary but it convinces the native rs6000 compiler
4226 to generate the code we want. */
4227 char *buf = fixP->fx_frag->fr_literal;
4228 buf += fixP->fx_where;
4229 /* end ibm compiler workaround */
4231 if (val & 0x80000000)
4232 val |= ~(addressT)0x7fffffff;
4239 memset (buf, 0, fixP->fx_size);
4240 fixP->fx_addnumber = val; /* Remember value for emit_reloc */
4242 if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
4243 && !S_IS_DEFINED (fixP->fx_addsy)
4244 && !S_IS_WEAK (fixP->fx_addsy))
4245 S_SET_WEAK (fixP->fx_addsy);
4250 #ifdef BFD_ASSEMBLER
4251 if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
4252 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
4256 switch (fixP->fx_size)
4258 /* The cast to offsetT below are necessary to make code correct for
4259 machines where ints are smaller than offsetT */
4263 lower_limit = - (offsetT) 0x80;
4266 *buf++ = (val >> 8);
4268 upper_limit = 0x7fff;
4269 lower_limit = - (offsetT) 0x8000;
4272 *buf++ = (val >> 24);
4273 *buf++ = (val >> 16);
4274 *buf++ = (val >> 8);
4276 upper_limit = 0x7fffffff;
4277 lower_limit = - (offsetT) 0x7fffffff - 1; /* avoid constant overflow */
4280 BAD_CASE (fixP->fx_size);
4283 /* Fix up a negative reloc. */
4284 if (fixP->fx_addsy == NULL && fixP->fx_subsy != NULL)
4286 fixP->fx_addsy = fixP->fx_subsy;
4287 fixP->fx_subsy = NULL;
4291 /* For non-pc-relative values, it's conceivable we might get something
4292 like "0xff" for a byte field. So extend the upper part of the range
4293 to accept such numbers. We arbitrarily disallow "-0xff" or "0xff+0xff",
4294 so that we can do any range checking at all. */
4295 if (! fixP->fx_pcrel && ! fixP->fx_signed)
4296 upper_limit = upper_limit * 2 + 1;
4298 if ((addressT) val > upper_limit
4299 && (val > 0 || val < lower_limit))
4300 as_bad_where (fixP->fx_file, fixP->fx_line, _("value out of range"));
4302 /* A one byte PC-relative reloc means a short branch. We can't use
4303 a short branch with a value of 0 or -1, because those indicate
4304 different opcodes (branches with longer offsets). fixup_segment
4305 in write.c may have clobbered fx_pcrel, so we need to examine the
4308 #ifdef BFD_ASSEMBLER
4309 || fixP->fx_r_type == BFD_RELOC_8_PCREL
4312 && fixP->fx_size == 1
4313 && (fixP->fx_addsy == NULL
4314 || S_IS_DEFINED (fixP->fx_addsy))
4315 && (val == 0 || val == -1))
4316 as_bad_where (fixP->fx_file, fixP->fx_line, _("invalid byte branch offset"));
4319 #ifdef BFD_ASSEMBLER
4321 md_apply_fix (fixP, valp)
4325 md_apply_fix_2 (fixP, (addressT) *valp);
4329 void md_apply_fix (fixP, val)
4333 md_apply_fix_2 (fixP, (addressT) val);
4337 /* *fragP has been relaxed to its final size, and now needs to have
4338 the bytes inside it modified to conform to the new size There is UGLY
4342 md_convert_frag_1 (fragP)
4343 register fragS *fragP;
4348 /* Address in object code of the displacement. */
4349 register int object_address = fragP->fr_fix + fragP->fr_address;
4351 /* Address in gas core of the place to store the displacement. */
4352 /* This convinces the native rs6000 compiler to generate the code we
4354 register char *buffer_address = fragP->fr_literal;
4355 buffer_address += fragP->fr_fix;
4356 /* end ibm compiler workaround */
4358 /* The displacement of the address, from current location. */
4359 disp = fragP->fr_symbol ? S_GET_VALUE (fragP->fr_symbol) : 0;
4360 disp = (disp + fragP->fr_offset) - object_address;
4362 #ifdef BFD_ASSEMBLER
4363 disp += symbol_get_frag (fragP->fr_symbol)->fr_address;
4366 switch (fragP->fr_subtype)
4368 case TAB (BRANCHBWL, BYTE):
4369 case TAB (BRABSJUNC, BYTE):
4370 case TAB (BRABSJCOND, BYTE):
4371 case TAB (BRANCHBW, BYTE):
4372 know (issbyte (disp));
4374 as_bad (_("short branch with zero offset: use :w"));
4375 fixP = fix_new (fragP, fragP->fr_fix - 1, 1, fragP->fr_symbol,
4376 fragP->fr_offset, 1, RELAX_RELOC_PC8);
4377 fixP->fx_pcrel_adjust = -1;
4379 case TAB (BRANCHBWL, SHORT):
4380 case TAB (BRABSJUNC, SHORT):
4381 case TAB (BRABSJCOND, SHORT):
4382 case TAB (BRANCHBW, SHORT):
4383 fragP->fr_opcode[1] = 0x00;
4384 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4385 1, RELAX_RELOC_PC16);
4388 case TAB (BRANCHBWL, LONG):
4389 fragP->fr_opcode[1] = (char) 0xFF;
4390 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4391 1, RELAX_RELOC_PC32);
4394 case TAB (BRABSJUNC, LONG):
4395 if (fragP->fr_opcode[0] == 0x61) /* jbsr */
4397 fragP->fr_opcode[0] = 0x4E;
4398 fragP->fr_opcode[1] = (char) 0xB9; /* JSR with ABSL LONG operand */
4399 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4400 0, RELAX_RELOC_ABS32);
4403 else if (fragP->fr_opcode[0] == 0x60) /* jbra */
4405 fragP->fr_opcode[0] = 0x4E;
4406 fragP->fr_opcode[1] = (char) 0xF9; /* JMP with ABSL LONG operand */
4407 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4408 0, RELAX_RELOC_ABS32);
4413 /* This cannot happen, because jbsr and jbra are the only two
4414 unconditional branches. */
4418 case TAB (BRABSJCOND, LONG):
4419 /* Only Bcc 68000 instructions can come here. */
4420 /* Change bcc into b!cc/jmp absl long. */
4422 fragP->fr_opcode[0] ^= 0x01; /* invert bcc */
4423 fragP->fr_opcode[1] = 0x6;/* branch offset = 6 */
4425 /* JF: these used to be fr_opcode[2,3], but they may be in a
4426 different frag, in which case refering to them is a no-no.
4427 Only fr_opcode[0,1] are guaranteed to work. */
4428 *buffer_address++ = 0x4e; /* put in jmp long (0x4ef9) */
4429 *buffer_address++ = (char) 0xf9;
4430 fragP->fr_fix += 2; /* account for jmp instruction */
4431 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4432 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
4435 case TAB (FBRANCH, SHORT):
4436 know ((fragP->fr_opcode[1] & 0x40) == 0);
4437 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4438 1, RELAX_RELOC_PC16);
4441 case TAB (FBRANCH, LONG):
4442 fragP->fr_opcode[1] |= 0x40; /* Turn on LONG bit */
4443 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4444 1, RELAX_RELOC_PC32);
4447 case TAB (DBCCLBR, SHORT):
4448 case TAB (DBCCABSJ, SHORT):
4449 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4450 1, RELAX_RELOC_PC16);
4453 case TAB (DBCCLBR, LONG):
4454 /* only DBcc instructions can come here */
4455 /* Change dbcc into dbcc/bral. */
4457 /* JF: these used to be fr_opcode[2-7], but that's wrong */
4458 *buffer_address++ = 0x00; /* branch offset = 4 */
4459 *buffer_address++ = 0x04;
4460 *buffer_address++ = 0x60; /* put in bra pc+6 */
4461 *buffer_address++ = 0x06;
4462 *buffer_address++ = 0x60; /* Put in bral (0x60ff). */
4463 *buffer_address++ = (char) 0xff;
4465 fragP->fr_fix += 6; /* account for bra/jmp instructions */
4466 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset, 1,
4470 case TAB (DBCCABSJ, LONG):
4471 /* only DBcc instructions can come here */
4472 /* Change dbcc into dbcc/jmp. */
4474 /* JF: these used to be fr_opcode[2-7], but that's wrong */
4475 *buffer_address++ = 0x00; /* branch offset = 4 */
4476 *buffer_address++ = 0x04;
4477 *buffer_address++ = 0x60; /* put in bra pc+6 */
4478 *buffer_address++ = 0x06;
4479 *buffer_address++ = 0x4e; /* Put in jmp long (0x4ef9). */
4480 *buffer_address++ = (char) 0xf9;
4482 fragP->fr_fix += 6; /* account for bra/jmp instructions */
4483 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset, 0,
4487 case TAB (PCREL1632, SHORT):
4488 fragP->fr_opcode[1] &= ~0x3F;
4489 fragP->fr_opcode[1] |= 0x3A; /* 072 - mode 7.2 */
4490 fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
4491 fragP->fr_offset, 1, RELAX_RELOC_PC16);
4494 case TAB (PCREL1632, LONG):
4495 /* Already set to mode 7.3; this indicates: PC indirect with
4496 suppressed index, 32-bit displacement. */
4497 *buffer_address++ = 0x01;
4498 *buffer_address++ = 0x70;
4500 fixP = fix_new (fragP, (int) (fragP->fr_fix), 4, fragP->fr_symbol,
4501 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4502 fixP->fx_pcrel_adjust = 2;
4505 case TAB (PCINDEX, BYTE):
4506 assert (fragP->fr_fix >= 2);
4507 buffer_address[-2] &= ~1;
4508 fixP = fix_new (fragP, fragP->fr_fix - 1, 1, fragP->fr_symbol,
4509 fragP->fr_offset, 1, RELAX_RELOC_PC8);
4510 fixP->fx_pcrel_adjust = 1;
4512 case TAB (PCINDEX, SHORT):
4513 assert (fragP->fr_fix >= 2);
4514 buffer_address[-2] |= 0x1;
4515 buffer_address[-1] = 0x20;
4516 fixP = fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
4517 fragP->fr_offset, 1, RELAX_RELOC_PC16);
4518 fixP->fx_pcrel_adjust = 2;
4521 case TAB (PCINDEX, LONG):
4522 assert (fragP->fr_fix >= 2);
4523 buffer_address[-2] |= 0x1;
4524 buffer_address[-1] = 0x30;
4525 fixP = fix_new (fragP, (int) (fragP->fr_fix), 4, fragP->fr_symbol,
4526 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4527 fixP->fx_pcrel_adjust = 2;
4530 case TAB (ABSTOPCREL, SHORT):
4531 fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
4532 1, RELAX_RELOC_PC16);
4535 case TAB (ABSTOPCREL, LONG):
4536 /* The thing to do here is force it to ABSOLUTE LONG, since
4537 ABSTOPCREL is really trying to shorten an ABSOLUTE address anyway */
4538 if ((fragP->fr_opcode[1] & 0x3F) != 0x3A)
4540 fragP->fr_opcode[1] &= ~0x3F;
4541 fragP->fr_opcode[1] |= 0x39; /* Mode 7.1 */
4542 fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
4543 0, RELAX_RELOC_ABS32);
4549 #ifndef BFD_ASSEMBLER
4552 md_convert_frag (headers, sec, fragP)
4553 object_headers *headers ATTRIBUTE_UNUSED;
4554 segT sec ATTRIBUTE_UNUSED;
4557 md_convert_frag_1 (fragP);
4563 md_convert_frag (abfd, sec, fragP)
4564 bfd *abfd ATTRIBUTE_UNUSED;
4565 segT sec ATTRIBUTE_UNUSED;
4568 md_convert_frag_1 (fragP);
4572 /* Force truly undefined symbols to their maximum size, and generally set up
4573 the frag list to be relaxed
4576 md_estimate_size_before_relax (fragP, segment)
4577 register fragS *fragP;
4582 old_fix = fragP->fr_fix;
4584 /* Handle SZ_UNDEF first, it can be changed to BYTE or SHORT. */
4585 switch (fragP->fr_subtype)
4587 case TAB (BRANCHBWL, SZ_UNDEF):
4588 case TAB (BRABSJUNC, SZ_UNDEF):
4590 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
4591 && relaxable_symbol (fragP->fr_symbol))
4593 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
4595 else if (flag_short_refs)
4597 /* Symbol is undefined and we want short ref. */
4598 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4603 /* Symbol is still undefined. Make it LONG. */
4604 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
4610 case TAB (BRABSJCOND, SZ_UNDEF):
4612 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
4613 && relaxable_symbol (fragP->fr_symbol))
4615 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
4617 else if (flag_short_refs)
4619 /* Symbol is undefined and we want short ref. */
4620 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4625 /* Symbol is still undefined. Make it LONG. */
4626 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
4632 case TAB (BRANCHBW, SZ_UNDEF):
4634 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
4635 && relaxable_symbol (fragP->fr_symbol))
4637 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
4641 /* Symbol is undefined and we don't have long branches. */
4642 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4648 case TAB (FBRANCH, SZ_UNDEF):
4650 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4651 && relaxable_symbol (fragP->fr_symbol))
4654 fragP->fr_subtype = TAB (FBRANCH, SHORT);
4659 fragP->fr_subtype = TAB (FBRANCH, LONG);
4665 case TAB (DBCCLBR, SZ_UNDEF):
4666 case TAB (DBCCABSJ, SZ_UNDEF):
4668 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4669 && relaxable_symbol (fragP->fr_symbol))
4672 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4677 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
4678 fragP->fr_var += 10;
4683 case TAB (PCREL1632, SZ_UNDEF):
4685 if (((S_GET_SEGMENT (fragP->fr_symbol)) == segment
4686 && relaxable_symbol (fragP->fr_symbol))
4689 fragP->fr_subtype = TAB (PCREL1632, SHORT);
4694 fragP->fr_subtype = TAB (PCREL1632, LONG);
4700 case TAB (PCINDEX, SZ_UNDEF):
4701 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4702 && relaxable_symbol (fragP->fr_symbol)))
4704 fragP->fr_subtype = TAB (PCINDEX, BYTE);
4708 fragP->fr_subtype = TAB (PCINDEX, LONG);
4713 case TAB (ABSTOPCREL, SZ_UNDEF):
4715 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
4716 && relaxable_symbol (fragP->fr_symbol)))
4718 fragP->fr_subtype = TAB (ABSTOPCREL, SHORT);
4723 fragP->fr_subtype = TAB (ABSTOPCREL, LONG);
4733 /* Now that SZ_UNDEF are taken care of, check others. */
4734 switch (fragP->fr_subtype)
4736 case TAB (BRANCHBWL, BYTE):
4737 case TAB (BRABSJUNC, BYTE):
4738 case TAB (BRABSJCOND, BYTE):
4739 case TAB (BRANCHBW, BYTE):
4740 /* We can't do a short jump to the next instruction, so in that
4741 case we force word mode. At this point S_GET_VALUE should
4742 return the offset of the symbol within its frag. If the
4743 symbol is at the start of a frag, and it is the next frag
4744 with any data in it (usually this is just the next frag, but
4745 assembler listings may introduce empty frags), we must use
4747 if (fragP->fr_symbol && S_GET_VALUE (fragP->fr_symbol) == 0)
4752 stop = symbol_get_frag (fragP->fr_symbol);
4753 for (l = fragP->fr_next; l != stop; l = l->fr_next)
4754 if (l->fr_fix + l->fr_var != 0)
4758 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
4766 return fragP->fr_var + fragP->fr_fix - old_fix;
4769 #if defined(OBJ_AOUT) | defined(OBJ_BOUT)
4770 /* the bit-field entries in the relocation_info struct plays hell
4771 with the byte-order problems of cross-assembly. So as a hack,
4772 I added this mach. dependent ri twiddler. Ugly, but it gets
4774 /* on m68k: first 4 bytes are normal unsigned long, next three bytes
4775 are symbolnum, most sig. byte first. Last byte is broken up with
4776 bit 7 as pcrel, bits 6 & 5 as length, bit 4 as pcrel, and the lower
4777 nibble as nuthin. (on Sun 3 at least) */
4778 /* Translate the internal relocation information into target-specific
4782 md_ri_to_chars (the_bytes, ri)
4784 struct reloc_info_generic *ri;
4787 md_number_to_chars (the_bytes, ri->r_address, 4);
4788 /* now the fun stuff */
4789 the_bytes[4] = (ri->r_symbolnum >> 16) & 0x0ff;
4790 the_bytes[5] = (ri->r_symbolnum >> 8) & 0x0ff;
4791 the_bytes[6] = ri->r_symbolnum & 0x0ff;
4792 the_bytes[7] = (((ri->r_pcrel << 7) & 0x80) | ((ri->r_length << 5) & 0x60) |
4793 ((ri->r_extern << 4) & 0x10));
4796 #endif /* comment */
4798 #ifndef BFD_ASSEMBLER
4800 tc_aout_fix_to_chars (where, fixP, segment_address_in_file)
4803 relax_addressT segment_address_in_file;
4806 * In: length of relocation (or of address) in chars: 1, 2 or 4.
4807 * Out: GNU LD relocation length code: 0, 1, or 2.
4810 static CONST unsigned char nbytes_r_length[] = {42, 0, 1, 42, 2};
4813 know (fixP->fx_addsy != NULL);
4815 md_number_to_chars (where,
4816 fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file,
4819 r_symbolnum = (S_IS_DEFINED (fixP->fx_addsy)
4820 ? S_GET_TYPE (fixP->fx_addsy)
4821 : fixP->fx_addsy->sy_number);
4823 where[4] = (r_symbolnum >> 16) & 0x0ff;
4824 where[5] = (r_symbolnum >> 8) & 0x0ff;
4825 where[6] = r_symbolnum & 0x0ff;
4826 where[7] = (((fixP->fx_pcrel << 7) & 0x80) | ((nbytes_r_length[fixP->fx_size] << 5) & 0x60) |
4827 (((!S_IS_DEFINED (fixP->fx_addsy)) << 4) & 0x10));
4831 #endif /* OBJ_AOUT or OBJ_BOUT */
4833 #ifndef WORKING_DOT_WORD
4834 CONST int md_short_jump_size = 4;
4835 CONST int md_long_jump_size = 6;
4838 md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
4840 addressT from_addr, to_addr;
4841 fragS *frag ATTRIBUTE_UNUSED;
4842 symbolS *to_symbol ATTRIBUTE_UNUSED;
4846 offset = to_addr - (from_addr + 2);
4848 md_number_to_chars (ptr, (valueT) 0x6000, 2);
4849 md_number_to_chars (ptr + 2, (valueT) offset, 2);
4853 md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
4855 addressT from_addr, to_addr;
4861 if (!HAVE_LONG_BRANCH(current_architecture))
4863 offset = to_addr - S_GET_VALUE (to_symbol);
4864 md_number_to_chars (ptr, (valueT) 0x4EF9, 2);
4865 md_number_to_chars (ptr + 2, (valueT) offset, 4);
4866 fix_new (frag, (ptr + 2) - frag->fr_literal, 4, to_symbol, (offsetT) 0,
4871 offset = to_addr - (from_addr + 2);
4872 md_number_to_chars (ptr, (valueT) 0x60ff, 2);
4873 md_number_to_chars (ptr + 2, (valueT) offset, 4);
4879 /* Different values of OK tell what its OK to return. Things that
4880 aren't OK are an error (what a shock, no?)
4883 10: Absolute 1:8 only
4884 20: Absolute 0:7 only
4885 30: absolute 0:15 only
4886 40: Absolute 0:31 only
4887 50: absolute 0:127 only
4888 55: absolute -64:63 only
4889 60: absolute -128:127 only
4890 70: absolute 0:4095 only
4897 struct m68k_exp *exp;
4900 if (exp->exp.X_op == O_absent)
4902 /* Do the same thing the VAX asm does */
4903 op (exp) = O_constant;
4909 as_warn (_("expression out of range: defaulting to 1"));
4913 else if (exp->exp.X_op == O_constant)
4918 if (offs (exp) < 1 || offs (exp) > 8)
4920 as_warn (_("expression out of range: defaulting to 1"));
4925 if (offs (exp) < 0 || offs (exp) > 7)
4929 if (offs (exp) < 0 || offs (exp) > 15)
4933 if (offs (exp) < 0 || offs (exp) > 32)
4937 if (offs (exp) < 0 || offs (exp) > 127)
4941 if (offs (exp) < -64 || offs (exp) > 63)
4945 if (offs (exp) < -128 || offs (exp) > 127)
4949 if (offs (exp) < 0 || offs (exp) > 4095)
4952 as_warn (_("expression out of range: defaulting to 0"));
4960 else if (exp->exp.X_op == O_big)
4962 if (offs (exp) <= 0 /* flonum */
4963 && (ok == 80 /* no bignums */
4964 || (ok > 10 /* small-int ranges including 0 ok */
4965 /* If we have a flonum zero, a zero integer should
4966 do as well (e.g., in moveq). */
4967 && generic_floating_point_number.exponent == 0
4968 && generic_floating_point_number.low[0] == 0)))
4970 /* HACK! Turn it into a long */
4971 LITTLENUM_TYPE words[6];
4973 gen_to_words (words, 2, 8L); /* These numbers are magic! */
4974 op (exp) = O_constant;
4977 offs (exp) = words[1] | (words[0] << 16);
4981 op (exp) = O_constant;
4984 offs (exp) = (ok == 10) ? 1 : 0;
4985 as_warn (_("Can't deal with expression; defaulting to %ld"),
4991 if (ok >= 10 && ok <= 70)
4993 op (exp) = O_constant;
4996 offs (exp) = (ok == 10) ? 1 : 0;
4997 as_warn (_("Can't deal with expression; defaulting to %ld"),
5002 if (exp->size != SIZE_UNSPEC)
5010 if (!isbyte (offs (exp)))
5011 as_warn (_("expression doesn't fit in BYTE"));
5014 if (!isword (offs (exp)))
5015 as_warn (_("expression doesn't fit in WORD"));
5023 /* These are the back-ends for the various machine dependent pseudo-ops. */
5027 int ignore ATTRIBUTE_UNUSED;
5029 subseg_set (data_section, 1);
5030 demand_empty_rest_of_line ();
5035 int ignore ATTRIBUTE_UNUSED;
5037 subseg_set (data_section, 2);
5038 demand_empty_rest_of_line ();
5043 int ignore ATTRIBUTE_UNUSED;
5045 /* We don't support putting frags in the BSS segment, we fake it
5046 by marking in_bss, then looking at s_skip for clues. */
5048 subseg_set (bss_section, 0);
5049 demand_empty_rest_of_line ();
5054 int ignore ATTRIBUTE_UNUSED;
5057 register long temp_fill;
5059 temp = 1; /* JF should be 2? */
5060 temp_fill = get_absolute_expression ();
5061 if (!need_pass_2) /* Never make frag if expect extra pass. */
5062 frag_align (temp, (int) temp_fill, 0);
5063 demand_empty_rest_of_line ();
5064 record_alignment (now_seg, temp);
5069 int ignore ATTRIBUTE_UNUSED;
5071 demand_empty_rest_of_line ();
5074 /* Pseudo-ops handled for MRI compatibility. */
5076 /* This function returns non-zero if the argument is a conditional
5077 pseudo-op. This is called when checking whether a pending
5078 alignment is needed. */
5081 m68k_conditional_pseudoop (pop)
5084 return (pop->poc_handler == s_mri_if
5085 || pop->poc_handler == s_mri_else);
5088 /* Handle an MRI style chip specification. */
5097 s = input_line_pointer;
5098 /* We can't use get_symbol_end since the processor names are not proper
5100 while (is_part_of_name (c = *input_line_pointer++))
5102 *--input_line_pointer = 0;
5103 for (i = 0; i < n_archs; i++)
5104 if (strcasecmp (s, archs[i].name) == 0)
5108 as_bad (_("%s: unrecognized processor name"), s);
5109 *input_line_pointer = c;
5110 ignore_rest_of_line ();
5113 *input_line_pointer = c;
5115 if (*input_line_pointer == '/')
5116 current_architecture = 0;
5118 current_architecture &= m68881 | m68851;
5119 current_architecture |= archs[i].arch;
5121 while (*input_line_pointer == '/')
5123 ++input_line_pointer;
5124 s = input_line_pointer;
5125 /* We can't use get_symbol_end since the processor names are not
5127 while (is_part_of_name (c = *input_line_pointer++))
5129 *--input_line_pointer = 0;
5130 if (strcmp (s, "68881") == 0)
5131 current_architecture |= m68881;
5132 else if (strcmp (s, "68851") == 0)
5133 current_architecture |= m68851;
5134 *input_line_pointer = c;
5137 /* Update info about available control registers. */
5138 select_control_regs ();
5141 /* The MRI CHIP pseudo-op. */
5145 int ignore ATTRIBUTE_UNUSED;
5151 stop = mri_comment_field (&stopc);
5154 mri_comment_end (stop, stopc);
5155 demand_empty_rest_of_line ();
5158 /* The MRI FOPT pseudo-op. */
5162 int ignore ATTRIBUTE_UNUSED;
5166 if (strncasecmp (input_line_pointer, "ID=", 3) == 0)
5170 input_line_pointer += 3;
5171 temp = get_absolute_expression ();
5172 if (temp < 0 || temp > 7)
5173 as_bad (_("bad coprocessor id"));
5175 m68k_float_copnum = COP0 + temp;
5179 as_bad (_("unrecognized fopt option"));
5180 ignore_rest_of_line ();
5184 demand_empty_rest_of_line ();
5187 /* The structure used to handle the MRI OPT pseudo-op. */
5191 /* The name of the option. */
5194 /* If this is not NULL, just call this function. The first argument
5195 is the ARG field of this structure, the second argument is
5196 whether the option was negated. */
5197 void (*pfn) PARAMS ((int arg, int on));
5199 /* If this is not NULL, and the PFN field is NULL, set the variable
5200 this points to. Set it to the ARG field if the option was not
5201 negated, and the NOTARG field otherwise. */
5204 /* The value to pass to PFN or to assign to *PVAR. */
5207 /* The value to assign to *PVAR if the option is negated. If PFN is
5208 NULL, and PVAR is not NULL, and ARG and NOTARG are the same, then
5209 the option may not be negated. */
5213 /* The table used to handle the MRI OPT pseudo-op. */
5215 static void skip_to_comma PARAMS ((int, int));
5216 static void opt_nest PARAMS ((int, int));
5217 static void opt_chip PARAMS ((int, int));
5218 static void opt_list PARAMS ((int, int));
5219 static void opt_list_symbols PARAMS ((int, int));
5221 static const struct opt_action opt_table[] =
5223 { "abspcadd", 0, &m68k_abspcadd, 1, 0 },
5225 /* We do relaxing, so there is little use for these options. */
5226 { "b", 0, 0, 0, 0 },
5227 { "brs", 0, 0, 0, 0 },
5228 { "brb", 0, 0, 0, 0 },
5229 { "brl", 0, 0, 0, 0 },
5230 { "brw", 0, 0, 0, 0 },
5232 { "c", 0, 0, 0, 0 },
5233 { "cex", 0, 0, 0, 0 },
5234 { "case", 0, &symbols_case_sensitive, 1, 0 },
5235 { "cl", 0, 0, 0, 0 },
5236 { "cre", 0, 0, 0, 0 },
5237 { "d", 0, &flag_keep_locals, 1, 0 },
5238 { "e", 0, 0, 0, 0 },
5239 { "f", 0, &flag_short_refs, 1, 0 },
5240 { "frs", 0, &flag_short_refs, 1, 0 },
5241 { "frl", 0, &flag_short_refs, 0, 1 },
5242 { "g", 0, 0, 0, 0 },
5243 { "i", 0, 0, 0, 0 },
5244 { "m", 0, 0, 0, 0 },
5245 { "mex", 0, 0, 0, 0 },
5246 { "mc", 0, 0, 0, 0 },
5247 { "md", 0, 0, 0, 0 },
5248 { "nest", opt_nest, 0, 0, 0 },
5249 { "next", skip_to_comma, 0, 0, 0 },
5250 { "o", 0, 0, 0, 0 },
5251 { "old", 0, 0, 0, 0 },
5252 { "op", skip_to_comma, 0, 0, 0 },
5253 { "pco", 0, 0, 0, 0 },
5254 { "p", opt_chip, 0, 0, 0 },
5255 { "pcr", 0, 0, 0, 0 },
5256 { "pcs", 0, 0, 0, 0 },
5257 { "r", 0, 0, 0, 0 },
5258 { "quick", 0, &m68k_quick, 1, 0 },
5259 { "rel32", 0, &m68k_rel32, 1, 0 },
5260 { "s", opt_list, 0, 0, 0 },
5261 { "t", opt_list_symbols, 0, 0, 0 },
5262 { "w", 0, &flag_no_warnings, 0, 1 },
5266 #define OPTCOUNT ((int) (sizeof opt_table / sizeof opt_table[0]))
5268 /* The MRI OPT pseudo-op. */
5272 int ignore ATTRIBUTE_UNUSED;
5280 const struct opt_action *o;
5285 if (*input_line_pointer == '-')
5287 ++input_line_pointer;
5290 else if (strncasecmp (input_line_pointer, "NO", 2) == 0)
5292 input_line_pointer += 2;
5296 s = input_line_pointer;
5297 c = get_symbol_end ();
5299 for (i = 0, o = opt_table; i < OPTCOUNT; i++, o++)
5301 if (strcasecmp (s, o->name) == 0)
5305 /* Restore input_line_pointer now in case the option
5307 *input_line_pointer = c;
5308 (*o->pfn) (o->arg, t);
5310 else if (o->pvar != NULL)
5312 if (! t && o->arg == o->notarg)
5313 as_bad (_("option `%s' may not be negated"), s);
5314 *input_line_pointer = c;
5315 *o->pvar = t ? o->arg : o->notarg;
5318 *input_line_pointer = c;
5324 as_bad (_("option `%s' not recognized"), s);
5325 *input_line_pointer = c;
5328 while (*input_line_pointer++ == ',');
5330 /* Move back to terminating character. */
5331 --input_line_pointer;
5332 demand_empty_rest_of_line ();
5335 /* Skip ahead to a comma. This is used for OPT options which we do
5336 not suppor tand which take arguments. */
5339 skip_to_comma (arg, on)
5340 int arg ATTRIBUTE_UNUSED;
5341 int on ATTRIBUTE_UNUSED;
5343 while (*input_line_pointer != ','
5344 && ! is_end_of_line[(unsigned char) *input_line_pointer])
5345 ++input_line_pointer;
5348 /* Handle the OPT NEST=depth option. */
5352 int arg ATTRIBUTE_UNUSED;
5353 int on ATTRIBUTE_UNUSED;
5355 if (*input_line_pointer != '=')
5357 as_bad (_("bad format of OPT NEST=depth"));
5361 ++input_line_pointer;
5362 max_macro_nest = get_absolute_expression ();
5365 /* Handle the OPT P=chip option. */
5369 int arg ATTRIBUTE_UNUSED;
5370 int on ATTRIBUTE_UNUSED;
5372 if (*input_line_pointer != '=')
5374 /* This is just OPT P, which we do not support. */
5378 ++input_line_pointer;
5382 /* Handle the OPT S option. */
5386 int arg ATTRIBUTE_UNUSED;
5392 /* Handle the OPT T option. */
5395 opt_list_symbols (arg, on)
5396 int arg ATTRIBUTE_UNUSED;
5400 listing |= LISTING_SYMBOLS;
5402 listing &=~ LISTING_SYMBOLS;
5405 /* Handle the MRI REG pseudo-op. */
5409 int ignore ATTRIBUTE_UNUSED;
5418 if (line_label == NULL)
5420 as_bad (_("missing label"));
5421 ignore_rest_of_line ();
5426 stop = mri_comment_field (&stopc);
5430 s = input_line_pointer;
5431 while (isalnum ((unsigned char) *input_line_pointer)
5432 #ifdef REGISTER_PREFIX
5433 || *input_line_pointer == REGISTER_PREFIX
5435 || *input_line_pointer == '/'
5436 || *input_line_pointer == '-')
5437 ++input_line_pointer;
5438 c = *input_line_pointer;
5439 *input_line_pointer = '\0';
5441 if (m68k_ip_op (s, &rop) != 0)
5443 if (rop.error == NULL)
5444 as_bad (_("bad register list"));
5446 as_bad (_("bad register list: %s"), rop.error);
5447 *input_line_pointer = c;
5448 ignore_rest_of_line ();
5452 *input_line_pointer = c;
5454 if (rop.mode == REGLST)
5456 else if (rop.mode == DREG)
5457 mask = 1 << (rop.reg - DATA0);
5458 else if (rop.mode == AREG)
5459 mask = 1 << (rop.reg - ADDR0 + 8);
5460 else if (rop.mode == FPREG)
5461 mask = 1 << (rop.reg - FP0 + 16);
5462 else if (rop.mode == CONTROL
5465 else if (rop.mode == CONTROL
5468 else if (rop.mode == CONTROL
5473 as_bad (_("bad register list"));
5474 ignore_rest_of_line ();
5478 S_SET_SEGMENT (line_label, reg_section);
5479 S_SET_VALUE (line_label, ~mask);
5480 symbol_set_frag (line_label, &zero_address_frag);
5483 mri_comment_end (stop, stopc);
5485 demand_empty_rest_of_line ();
5488 /* This structure is used for the MRI SAVE and RESTORE pseudo-ops. */
5492 struct save_opts *next;
5494 int symbols_case_sensitive;
5502 /* FIXME: We don't save OPT S. */
5505 /* This variable holds the stack of saved options. */
5507 static struct save_opts *save_stack;
5509 /* The MRI SAVE pseudo-op. */
5513 int ignore ATTRIBUTE_UNUSED;
5515 struct save_opts *s;
5517 s = (struct save_opts *) xmalloc (sizeof (struct save_opts));
5518 s->abspcadd = m68k_abspcadd;
5519 s->symbols_case_sensitive = symbols_case_sensitive;
5520 s->keep_locals = flag_keep_locals;
5521 s->short_refs = flag_short_refs;
5522 s->architecture = current_architecture;
5523 s->quick = m68k_quick;
5524 s->rel32 = m68k_rel32;
5525 s->listing = listing;
5526 s->no_warnings = flag_no_warnings;
5528 s->next = save_stack;
5531 demand_empty_rest_of_line ();
5534 /* The MRI RESTORE pseudo-op. */
5538 int ignore ATTRIBUTE_UNUSED;
5540 struct save_opts *s;
5542 if (save_stack == NULL)
5544 as_bad (_("restore without save"));
5545 ignore_rest_of_line ();
5550 save_stack = s->next;
5552 m68k_abspcadd = s->abspcadd;
5553 symbols_case_sensitive = s->symbols_case_sensitive;
5554 flag_keep_locals = s->keep_locals;
5555 flag_short_refs = s->short_refs;
5556 current_architecture = s->architecture;
5557 m68k_quick = s->quick;
5558 m68k_rel32 = s->rel32;
5559 listing = s->listing;
5560 flag_no_warnings = s->no_warnings;
5564 demand_empty_rest_of_line ();
5567 /* Types of MRI structured control directives. */
5569 enum mri_control_type
5577 /* This structure is used to stack the MRI structured control
5580 struct mri_control_info
5582 /* The directive within which this one is enclosed. */
5583 struct mri_control_info *outer;
5585 /* The type of directive. */
5586 enum mri_control_type type;
5588 /* Whether an ELSE has been in an IF. */
5591 /* The add or sub statement at the end of a FOR. */
5594 /* The label of the top of a FOR or REPEAT loop. */
5597 /* The label to jump to for the next iteration, or the else
5598 expression of a conditional. */
5601 /* The label to jump to to break out of the loop, or the label past
5602 the end of a conditional. */
5606 /* The stack of MRI structured control directives. */
5608 static struct mri_control_info *mri_control_stack;
5610 /* The current MRI structured control directive index number, used to
5611 generate label names. */
5613 static int mri_control_index;
5615 /* Some function prototypes. */
5617 static void mri_assemble PARAMS ((char *));
5618 static char *mri_control_label PARAMS ((void));
5619 static struct mri_control_info *push_mri_control
5620 PARAMS ((enum mri_control_type));
5621 static void pop_mri_control PARAMS ((void));
5622 static int parse_mri_condition PARAMS ((int *));
5623 static int parse_mri_control_operand
5624 PARAMS ((int *, char **, char **, char **, char **));
5625 static int swap_mri_condition PARAMS ((int));
5626 static int reverse_mri_condition PARAMS ((int));
5627 static void build_mri_control_operand
5628 PARAMS ((int, int, char *, char *, char *, char *, const char *,
5629 const char *, int));
5630 static void parse_mri_control_expression
5631 PARAMS ((char *, int, const char *, const char *, int));
5633 /* Assemble an instruction for an MRI structured control directive. */
5641 /* md_assemble expects the opcode to be in lower case. */
5642 for (s = str; *s != ' ' && *s != '\0'; s++)
5644 if (isupper ((unsigned char) *s))
5645 *s = tolower ((unsigned char) *s);
5651 /* Generate a new MRI label structured control directive label name. */
5654 mri_control_label ()
5658 n = (char *) xmalloc (20);
5659 sprintf (n, "%smc%d", FAKE_LABEL_NAME, mri_control_index);
5660 ++mri_control_index;
5664 /* Create a new MRI structured control directive. */
5666 static struct mri_control_info *
5667 push_mri_control (type)
5668 enum mri_control_type type;
5670 struct mri_control_info *n;
5672 n = (struct mri_control_info *) xmalloc (sizeof (struct mri_control_info));
5676 if (type == mri_if || type == mri_while)
5679 n->top = mri_control_label ();
5680 n->next = mri_control_label ();
5681 n->bottom = mri_control_label ();
5683 n->outer = mri_control_stack;
5684 mri_control_stack = n;
5689 /* Pop off the stack of MRI structured control directives. */
5694 struct mri_control_info *n;
5696 n = mri_control_stack;
5697 mri_control_stack = n->outer;
5705 /* Recognize a condition code in an MRI structured control expression. */
5708 parse_mri_condition (pcc)
5713 know (*input_line_pointer == '<');
5715 ++input_line_pointer;
5716 c1 = *input_line_pointer++;
5717 c2 = *input_line_pointer++;
5719 if (*input_line_pointer != '>')
5721 as_bad (_("syntax error in structured control directive"));
5725 ++input_line_pointer;
5733 *pcc = (c1 << 8) | c2;
5738 /* Parse a single operand in an MRI structured control expression. */
5741 parse_mri_control_operand (pcc, leftstart, leftstop, rightstart, rightstop)
5758 if (*input_line_pointer == '<')
5760 /* It's just a condition code. */
5761 return parse_mri_condition (pcc);
5764 /* Look ahead for the condition code. */
5765 for (s = input_line_pointer; *s != '\0'; ++s)
5767 if (*s == '<' && s[1] != '\0' && s[2] != '\0' && s[3] == '>')
5772 as_bad (_("missing condition code in structured control directive"));
5776 *leftstart = input_line_pointer;
5778 if (*leftstop > *leftstart
5779 && ((*leftstop)[-1] == ' ' || (*leftstop)[-1] == '\t'))
5782 input_line_pointer = s;
5783 if (! parse_mri_condition (pcc))
5786 /* Look ahead for AND or OR or end of line. */
5787 for (s = input_line_pointer; *s != '\0'; ++s)
5789 if ((strncasecmp (s, "AND", 3) == 0
5790 && (s[3] == '.' || ! is_part_of_name (s[3])))
5791 || (strncasecmp (s, "OR", 2) == 0
5792 && (s[2] == '.' || ! is_part_of_name (s[2]))))
5796 *rightstart = input_line_pointer;
5798 if (*rightstop > *rightstart
5799 && ((*rightstop)[-1] == ' ' || (*rightstop)[-1] == '\t'))
5802 input_line_pointer = s;
5807 #define MCC(b1, b2) (((b1) << 8) | (b2))
5809 /* Swap the sense of a condition. This changes the condition so that
5810 it generates the same result when the operands are swapped. */
5813 swap_mri_condition (cc)
5818 case MCC ('h', 'i'): return MCC ('c', 's');
5819 case MCC ('l', 's'): return MCC ('c', 'c');
5820 case MCC ('c', 'c'): return MCC ('l', 's');
5821 case MCC ('c', 's'): return MCC ('h', 'i');
5822 case MCC ('p', 'l'): return MCC ('m', 'i');
5823 case MCC ('m', 'i'): return MCC ('p', 'l');
5824 case MCC ('g', 'e'): return MCC ('l', 'e');
5825 case MCC ('l', 't'): return MCC ('g', 't');
5826 case MCC ('g', 't'): return MCC ('l', 't');
5827 case MCC ('l', 'e'): return MCC ('g', 'e');
5832 /* Reverse the sense of a condition. */
5835 reverse_mri_condition (cc)
5840 case MCC ('h', 'i'): return MCC ('l', 's');
5841 case MCC ('l', 's'): return MCC ('h', 'i');
5842 case MCC ('c', 'c'): return MCC ('c', 's');
5843 case MCC ('c', 's'): return MCC ('c', 'c');
5844 case MCC ('n', 'e'): return MCC ('e', 'q');
5845 case MCC ('e', 'q'): return MCC ('n', 'e');
5846 case MCC ('v', 'c'): return MCC ('v', 's');
5847 case MCC ('v', 's'): return MCC ('v', 'c');
5848 case MCC ('p', 'l'): return MCC ('m', 'i');
5849 case MCC ('m', 'i'): return MCC ('p', 'l');
5850 case MCC ('g', 'e'): return MCC ('l', 't');
5851 case MCC ('l', 't'): return MCC ('g', 'e');
5852 case MCC ('g', 't'): return MCC ('l', 'e');
5853 case MCC ('l', 'e'): return MCC ('g', 't');
5858 /* Build an MRI structured control expression. This generates test
5859 and branch instructions. It goes to TRUELAB if the condition is
5860 true, and to FALSELAB if the condition is false. Exactly one of
5861 TRUELAB and FALSELAB will be NULL, meaning to fall through. QUAL
5862 is the size qualifier for the expression. EXTENT is the size to
5863 use for the branch. */
5866 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
5867 rightstop, truelab, falselab, extent)
5874 const char *truelab;
5875 const char *falselab;
5881 if (leftstart != NULL)
5883 struct m68k_op leftop, rightop;
5886 /* Swap the compare operands, if necessary, to produce a legal
5887 m68k compare instruction. Comparing a register operand with
5888 a non-register operand requires the register to be on the
5889 right (cmp, cmpa). Comparing an immediate value with
5890 anything requires the immediate value to be on the left
5895 (void) m68k_ip_op (leftstart, &leftop);
5900 (void) m68k_ip_op (rightstart, &rightop);
5903 if (rightop.mode == IMMED
5904 || ((leftop.mode == DREG || leftop.mode == AREG)
5905 && (rightop.mode != DREG && rightop.mode != AREG)))
5909 cc = swap_mri_condition (cc);
5911 leftstart = rightstart;
5914 leftstop = rightstop;
5919 if (truelab == NULL)
5921 cc = reverse_mri_condition (cc);
5925 if (leftstart != NULL)
5927 buf = (char *) xmalloc (20
5928 + (leftstop - leftstart)
5929 + (rightstop - rightstart));
5937 memcpy (s, leftstart, leftstop - leftstart);
5938 s += leftstop - leftstart;
5940 memcpy (s, rightstart, rightstop - rightstart);
5941 s += rightstop - rightstart;
5947 buf = (char *) xmalloc (20 + strlen (truelab));
5955 strcpy (s, truelab);
5960 /* Parse an MRI structured control expression. This generates test
5961 and branch instructions. STOP is where the expression ends. It
5962 goes to TRUELAB if the condition is true, and to FALSELAB if the
5963 condition is false. Exactly one of TRUELAB and FALSELAB will be
5964 NULL, meaning to fall through. QUAL is the size qualifier for the
5965 expression. EXTENT is the size to use for the branch. */
5968 parse_mri_control_expression (stop, qual, truelab, falselab, extent)
5971 const char *truelab;
5972 const char *falselab;
5985 if (! parse_mri_control_operand (&cc, &leftstart, &leftstop,
5986 &rightstart, &rightstop))
5992 if (strncasecmp (input_line_pointer, "AND", 3) == 0)
5996 if (falselab != NULL)
5999 flab = mri_control_label ();
6001 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6002 rightstop, (const char *) NULL, flab, extent);
6004 input_line_pointer += 3;
6005 if (*input_line_pointer != '.'
6006 || input_line_pointer[1] == '\0')
6010 qual = input_line_pointer[1];
6011 input_line_pointer += 2;
6014 if (! parse_mri_control_operand (&cc, &leftstart, &leftstop,
6015 &rightstart, &rightstop))
6021 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6022 rightstop, truelab, falselab, extent);
6024 if (falselab == NULL)
6027 else if (strncasecmp (input_line_pointer, "OR", 2) == 0)
6031 if (truelab != NULL)
6034 tlab = mri_control_label ();
6036 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6037 rightstop, tlab, (const char *) NULL, extent);
6039 input_line_pointer += 2;
6040 if (*input_line_pointer != '.'
6041 || input_line_pointer[1] == '\0')
6045 qual = input_line_pointer[1];
6046 input_line_pointer += 2;
6049 if (! parse_mri_control_operand (&cc, &leftstart, &leftstop,
6050 &rightstart, &rightstop))
6056 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6057 rightstop, truelab, falselab, extent);
6059 if (truelab == NULL)
6064 build_mri_control_operand (qual, cc, leftstart, leftstop, rightstart,
6065 rightstop, truelab, falselab, extent);
6069 if (input_line_pointer != stop)
6070 as_bad (_("syntax error in structured control directive"));
6073 /* Handle the MRI IF pseudo-op. This may be a structured control
6074 directive, or it may be a regular assembler conditional, depending
6083 struct mri_control_info *n;
6085 /* A structured control directive must end with THEN with an
6086 optional qualifier. */
6087 s = input_line_pointer;
6088 while (! is_end_of_line[(unsigned char) *s]
6089 && (! flag_mri || *s != '*'))
6092 while (s > input_line_pointer && (*s == ' ' || *s == '\t'))
6095 if (s - input_line_pointer > 1
6099 if (s - input_line_pointer < 3
6100 || strncasecmp (s - 3, "THEN", 4) != 0)
6104 as_bad (_("missing then"));
6105 ignore_rest_of_line ();
6109 /* It's a conditional. */
6114 /* Since this might be a conditional if, this pseudo-op will be
6115 called even if we are supported to be ignoring input. Double
6116 check now. Clobber *input_line_pointer so that ignore_input
6117 thinks that this is not a special pseudo-op. */
6118 c = *input_line_pointer;
6119 *input_line_pointer = 0;
6120 if (ignore_input ())
6122 *input_line_pointer = c;
6123 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6124 ++input_line_pointer;
6125 demand_empty_rest_of_line ();
6128 *input_line_pointer = c;
6130 n = push_mri_control (mri_if);
6132 parse_mri_control_expression (s - 3, qual, (const char *) NULL,
6133 n->next, s[1] == '.' ? s[2] : '\0');
6136 input_line_pointer = s + 3;
6138 input_line_pointer = s + 1;
6142 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6143 ++input_line_pointer;
6146 demand_empty_rest_of_line ();
6149 /* Handle the MRI else pseudo-op. If we are currently doing an MRI
6150 structured IF, associate the ELSE with the IF. Otherwise, assume
6151 it is a conditional else. */
6162 && (mri_control_stack == NULL
6163 || mri_control_stack->type != mri_if
6164 || mri_control_stack->else_seen))
6170 c = *input_line_pointer;
6171 *input_line_pointer = 0;
6172 if (ignore_input ())
6174 *input_line_pointer = c;
6175 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6176 ++input_line_pointer;
6177 demand_empty_rest_of_line ();
6180 *input_line_pointer = c;
6182 if (mri_control_stack == NULL
6183 || mri_control_stack->type != mri_if
6184 || mri_control_stack->else_seen)
6186 as_bad (_("else without matching if"));
6187 ignore_rest_of_line ();
6191 mri_control_stack->else_seen = 1;
6193 buf = (char *) xmalloc (20 + strlen (mri_control_stack->bottom));
6196 sprintf (buf, "bra%s %s", q, mri_control_stack->bottom);
6200 colon (mri_control_stack->next);
6204 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6205 ++input_line_pointer;
6208 demand_empty_rest_of_line ();
6211 /* Handle the MRI ENDI pseudo-op. */
6215 int ignore ATTRIBUTE_UNUSED;
6217 if (mri_control_stack == NULL
6218 || mri_control_stack->type != mri_if)
6220 as_bad (_("endi without matching if"));
6221 ignore_rest_of_line ();
6225 /* ignore_input will not return true for ENDI, so we don't need to
6226 worry about checking it again here. */
6228 if (! mri_control_stack->else_seen)
6229 colon (mri_control_stack->next);
6230 colon (mri_control_stack->bottom);
6236 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6237 ++input_line_pointer;
6240 demand_empty_rest_of_line ();
6243 /* Handle the MRI BREAK pseudo-op. */
6246 s_mri_break (extent)
6249 struct mri_control_info *n;
6253 n = mri_control_stack;
6255 && n->type != mri_for
6256 && n->type != mri_repeat
6257 && n->type != mri_while)
6261 as_bad (_("break outside of structured loop"));
6262 ignore_rest_of_line ();
6266 buf = (char *) xmalloc (20 + strlen (n->bottom));
6269 sprintf (buf, "bra%s %s", ex, n->bottom);
6275 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6276 ++input_line_pointer;
6279 demand_empty_rest_of_line ();
6282 /* Handle the MRI NEXT pseudo-op. */
6288 struct mri_control_info *n;
6292 n = mri_control_stack;
6294 && n->type != mri_for
6295 && n->type != mri_repeat
6296 && n->type != mri_while)
6300 as_bad (_("next outside of structured loop"));
6301 ignore_rest_of_line ();
6305 buf = (char *) xmalloc (20 + strlen (n->next));
6308 sprintf (buf, "bra%s %s", ex, n->next);
6314 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6315 ++input_line_pointer;
6318 demand_empty_rest_of_line ();
6321 /* Handle the MRI FOR pseudo-op. */
6327 const char *varstart, *varstop;
6328 const char *initstart, *initstop;
6329 const char *endstart, *endstop;
6330 const char *bystart, *bystop;
6334 struct mri_control_info *n;
6340 FOR.q var = init { TO | DOWNTO } end [ BY by ] DO.e
6344 varstart = input_line_pointer;
6346 /* Look for the '='. */
6347 while (! is_end_of_line[(unsigned char) *input_line_pointer]
6348 && *input_line_pointer != '=')
6349 ++input_line_pointer;
6350 if (*input_line_pointer != '=')
6352 as_bad (_("missing ="));
6353 ignore_rest_of_line ();
6357 varstop = input_line_pointer;
6358 if (varstop > varstart
6359 && (varstop[-1] == ' ' || varstop[-1] == '\t'))
6362 ++input_line_pointer;
6364 initstart = input_line_pointer;
6366 /* Look for TO or DOWNTO. */
6369 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6371 if (strncasecmp (input_line_pointer, "TO", 2) == 0
6372 && ! is_part_of_name (input_line_pointer[2]))
6374 initstop = input_line_pointer;
6375 input_line_pointer += 2;
6378 if (strncasecmp (input_line_pointer, "DOWNTO", 6) == 0
6379 && ! is_part_of_name (input_line_pointer[6]))
6381 initstop = input_line_pointer;
6383 input_line_pointer += 6;
6386 ++input_line_pointer;
6388 if (initstop == NULL)
6390 as_bad (_("missing to or downto"));
6391 ignore_rest_of_line ();
6394 if (initstop > initstart
6395 && (initstop[-1] == ' ' || initstop[-1] == '\t'))
6399 endstart = input_line_pointer;
6401 /* Look for BY or DO. */
6404 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6406 if (strncasecmp (input_line_pointer, "BY", 2) == 0
6407 && ! is_part_of_name (input_line_pointer[2]))
6409 endstop = input_line_pointer;
6411 input_line_pointer += 2;
6414 if (strncasecmp (input_line_pointer, "DO", 2) == 0
6415 && (input_line_pointer[2] == '.'
6416 || ! is_part_of_name (input_line_pointer[2])))
6418 endstop = input_line_pointer;
6419 input_line_pointer += 2;
6422 ++input_line_pointer;
6424 if (endstop == NULL)
6426 as_bad (_("missing do"));
6427 ignore_rest_of_line ();
6430 if (endstop > endstart
6431 && (endstop[-1] == ' ' || endstop[-1] == '\t'))
6437 bystop = bystart + 2;
6442 bystart = input_line_pointer;
6446 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6448 if (strncasecmp (input_line_pointer, "DO", 2) == 0
6449 && (input_line_pointer[2] == '.'
6450 || ! is_part_of_name (input_line_pointer[2])))
6452 bystop = input_line_pointer;
6453 input_line_pointer += 2;
6456 ++input_line_pointer;
6460 as_bad (_("missing do"));
6461 ignore_rest_of_line ();
6464 if (bystop > bystart
6465 && (bystop[-1] == ' ' || bystop[-1] == '\t'))
6469 if (*input_line_pointer != '.')
6473 extent = input_line_pointer[1];
6474 input_line_pointer += 2;
6477 /* We have fully parsed the FOR operands. Now build the loop. */
6479 n = push_mri_control (mri_for);
6481 buf = (char *) xmalloc (50 + (input_line_pointer - varstart));
6492 memcpy (s, initstart, initstop - initstart);
6493 s += initstop - initstart;
6495 memcpy (s, varstart, varstop - varstart);
6496 s += varstop - varstart;
6510 memcpy (s, endstart, endstop - endstart);
6511 s += endstop - endstart;
6513 memcpy (s, varstart, varstop - varstart);
6514 s += varstop - varstart;
6522 sprintf (buf, "blt%s %s", ex, n->bottom);
6524 sprintf (buf, "bgt%s %s", ex, n->bottom);
6527 /* Put together the add or sub instruction used by ENDF. */
6537 memcpy (s, bystart, bystop - bystart);
6538 s += bystop - bystart;
6540 memcpy (s, varstart, varstop - varstart);
6541 s += varstop - varstart;
6547 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6548 ++input_line_pointer;
6551 demand_empty_rest_of_line ();
6554 /* Handle the MRI ENDF pseudo-op. */
6558 int ignore ATTRIBUTE_UNUSED;
6560 if (mri_control_stack == NULL
6561 || mri_control_stack->type != mri_for)
6563 as_bad (_("endf without for"));
6564 ignore_rest_of_line ();
6568 colon (mri_control_stack->next);
6570 mri_assemble (mri_control_stack->incr);
6572 sprintf (mri_control_stack->incr, "bra %s", mri_control_stack->top);
6573 mri_assemble (mri_control_stack->incr);
6575 free (mri_control_stack->incr);
6577 colon (mri_control_stack->bottom);
6583 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6584 ++input_line_pointer;
6587 demand_empty_rest_of_line ();
6590 /* Handle the MRI REPEAT pseudo-op. */
6593 s_mri_repeat (ignore)
6594 int ignore ATTRIBUTE_UNUSED;
6596 struct mri_control_info *n;
6598 n = push_mri_control (mri_repeat);
6602 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6603 ++input_line_pointer;
6605 demand_empty_rest_of_line ();
6608 /* Handle the MRI UNTIL pseudo-op. */
6616 if (mri_control_stack == NULL
6617 || mri_control_stack->type != mri_repeat)
6619 as_bad (_("until without repeat"));
6620 ignore_rest_of_line ();
6624 colon (mri_control_stack->next);
6626 for (s = input_line_pointer; ! is_end_of_line[(unsigned char) *s]; s++)
6629 parse_mri_control_expression (s, qual, (const char *) NULL,
6630 mri_control_stack->top, '\0');
6632 colon (mri_control_stack->bottom);
6634 input_line_pointer = s;
6640 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6641 ++input_line_pointer;
6644 demand_empty_rest_of_line ();
6647 /* Handle the MRI WHILE pseudo-op. */
6655 struct mri_control_info *n;
6657 s = input_line_pointer;
6658 while (! is_end_of_line[(unsigned char) *s]
6659 && (! flag_mri || *s != '*'))
6662 while (*s == ' ' || *s == '\t')
6664 if (s - input_line_pointer > 1
6667 if (s - input_line_pointer < 2
6668 || strncasecmp (s - 1, "DO", 2) != 0)
6670 as_bad (_("missing do"));
6671 ignore_rest_of_line ();
6675 n = push_mri_control (mri_while);
6679 parse_mri_control_expression (s - 1, qual, (const char *) NULL, n->bottom,
6680 s[1] == '.' ? s[2] : '\0');
6682 input_line_pointer = s + 1;
6683 if (*input_line_pointer == '.')
6684 input_line_pointer += 2;
6688 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6689 ++input_line_pointer;
6692 demand_empty_rest_of_line ();
6695 /* Handle the MRI ENDW pseudo-op. */
6699 int ignore ATTRIBUTE_UNUSED;
6703 if (mri_control_stack == NULL
6704 || mri_control_stack->type != mri_while)
6706 as_bad (_("endw without while"));
6707 ignore_rest_of_line ();
6711 buf = (char *) xmalloc (20 + strlen (mri_control_stack->next));
6712 sprintf (buf, "bra %s", mri_control_stack->next);
6716 colon (mri_control_stack->bottom);
6722 while (! is_end_of_line[(unsigned char) *input_line_pointer])
6723 ++input_line_pointer;
6726 demand_empty_rest_of_line ();
6731 * Invocation line includes a switch not recognized by the base assembler.
6732 * See if it's a processor-specific option. These are:
6734 * -[A]m[c]68000, -[A]m[c]68008, -[A]m[c]68010, -[A]m[c]68020, -[A]m[c]68030, -[A]m[c]68040
6735 * -[A]m[c]68881, -[A]m[c]68882, -[A]m[c]68851
6736 * Select the architecture. Instructions or features not
6737 * supported by the selected architecture cause fatal
6738 * errors. More than one may be specified. The default is
6739 * -m68020 -m68851 -m68881. Note that -m68008 is a synonym
6740 * for -m68000, and -m68882 is a synonym for -m68881.
6741 * -[A]m[c]no-68851, -[A]m[c]no-68881
6742 * Don't accept 688?1 instructions. (The "c" is kind of silly,
6743 * so don't use or document it, but that's the way the parsing
6746 * -pic Indicates PIC.
6747 * -k Indicates PIC. (Sun 3 only.)
6748 * --pcrel Never turn PC-relative branches into absolute jumps.
6751 * Permit `|' to be used in expressions.
6756 CONST char *md_shortopts = "lSA:m:kQ:V";
6758 CONST char *md_shortopts = "lSA:m:k";
6761 struct option md_longopts[] = {
6762 #define OPTION_PIC (OPTION_MD_BASE)
6763 {"pic", no_argument, NULL, OPTION_PIC},
6764 #define OPTION_REGISTER_PREFIX_OPTIONAL (OPTION_MD_BASE + 1)
6765 {"register-prefix-optional", no_argument, NULL,
6766 OPTION_REGISTER_PREFIX_OPTIONAL},
6767 #define OPTION_BITWISE_OR (OPTION_MD_BASE + 2)
6768 {"bitwise-or", no_argument, NULL, OPTION_BITWISE_OR},
6769 #define OPTION_BASE_SIZE_DEFAULT_16 (OPTION_MD_BASE + 3)
6770 {"base-size-default-16", no_argument, NULL, OPTION_BASE_SIZE_DEFAULT_16},
6771 #define OPTION_BASE_SIZE_DEFAULT_32 (OPTION_MD_BASE + 4)
6772 {"base-size-default-32", no_argument, NULL, OPTION_BASE_SIZE_DEFAULT_32},
6773 #define OPTION_DISP_SIZE_DEFAULT_16 (OPTION_MD_BASE + 5)
6774 {"disp-size-default-16", no_argument, NULL, OPTION_DISP_SIZE_DEFAULT_16},
6775 #define OPTION_DISP_SIZE_DEFAULT_32 (OPTION_MD_BASE + 6)
6776 {"disp-size-default-32", no_argument, NULL, OPTION_DISP_SIZE_DEFAULT_32},
6777 #define OPTION_PCREL (OPTION_MD_BASE + 7)
6778 {"pcrel", no_argument, NULL, OPTION_PCREL},
6779 {NULL, no_argument, NULL, 0}
6781 size_t md_longopts_size = sizeof (md_longopts);
6784 md_parse_option (c, arg)
6790 case 'l': /* -l means keep external to 2 bit offset
6791 rather than 16 bit one */
6792 flag_short_refs = 1;
6795 case 'S': /* -S means that jbsr's always turn into
6797 flag_long_jumps = 1;
6800 case OPTION_PCREL: /* --pcrel means never turn PC-relative
6801 branches into absolute jumps. */
6802 flag_keep_pcrel = 1;
6808 /* intentional fall-through */
6811 if (arg[0] == 'n' && arg[1] == 'o' && arg[2] == '-')
6815 const char *oarg = arg;
6821 if (arg[0] == 'c' && arg[1] == '6')
6824 for (i = 0; i < n_archs; i++)
6825 if (!strcmp (arg, archs[i].name))
6830 as_bad (_("unrecognized option `%s'"), oarg);
6833 arch = archs[i].arch;
6836 else if (arch == m68851)
6845 if (arg[0] == 'c' && arg[1] == '6')
6848 for (i = 0; i < n_archs; i++)
6849 if (!strcmp (arg, archs[i].name))
6851 unsigned long arch = archs[i].arch;
6852 if (cpu_of_arch (arch))
6853 /* It's a cpu spec. */
6855 current_architecture &= ~m68000up;
6856 current_architecture |= arch;
6858 else if (arch == m68881)
6860 current_architecture |= m68881;
6863 else if (arch == m68851)
6865 current_architecture |= m68851;
6875 as_bad (_("unrecognized architecture specification `%s'"), arg);
6884 break; /* -pic, Position Independent Code */
6886 case OPTION_REGISTER_PREFIX_OPTIONAL:
6887 flag_reg_prefix_optional = 1;
6888 reg_prefix_optional_seen = 1;
6891 /* -V: SVR4 argument to print version ID. */
6893 print_version_id ();
6896 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
6897 should be emitted or not. FIXME: Not implemented. */
6901 case OPTION_BITWISE_OR:
6906 n = (char *) xmalloc (strlen (m68k_comment_chars) + 1);
6908 for (s = m68k_comment_chars; *s != '\0'; s++)
6912 m68k_comment_chars = n;
6916 case OPTION_BASE_SIZE_DEFAULT_16:
6917 m68k_index_width_default = SIZE_WORD;
6920 case OPTION_BASE_SIZE_DEFAULT_32:
6921 m68k_index_width_default = SIZE_LONG;
6924 case OPTION_DISP_SIZE_DEFAULT_16:
6926 m68k_rel32_from_cmdline = 1;
6929 case OPTION_DISP_SIZE_DEFAULT_32:
6931 m68k_rel32_from_cmdline = 1;
6942 md_show_usage (stream)
6945 fprintf (stream, _("\
6947 -l use 1 word for refs to undefined symbols [default 2]\n\
6948 -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060\n\
6949 | -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -m68360\n\
6950 | -mcpu32 | -m5200\n\
6951 specify variant of 680X0 architecture [default 68020]\n\
6952 -m68881 | -m68882 | -mno-68881 | -mno-68882\n\
6953 target has/lacks floating-point coprocessor\n\
6954 [default yes for 68020, 68030, and cpu32]\n"));
6955 fprintf (stream, _("\
6956 -m68851 | -mno-68851\n\
6957 target has/lacks memory-management unit coprocessor\n\
6958 [default yes for 68020 and up]\n\
6959 -pic, -k generate position independent code\n\
6960 -S turn jbsr into jsr\n\
6961 --pcrel never turn PC-relative branches into absolute jumps\n\
6962 --register-prefix-optional\n\
6963 recognize register names without prefix character\n\
6964 --bitwise-or do not treat `|' as a comment character\n"));
6965 fprintf (stream, _("\
6966 --base-size-default-16 base reg without size is 16 bits\n\
6967 --base-size-default-32 base reg without size is 32 bits (default)\n\
6968 --disp-size-default-16 displacement with unknown size is 16 bits\n\
6969 --disp-size-default-32 displacement with unknown size is 32 bits (default)\n"));
6974 /* TEST2: Test md_assemble() */
6975 /* Warning, this routine probably doesn't work anymore */
6979 struct m68k_it the_ins;
6987 if (!gets (buf) || !*buf)
6989 if (buf[0] == '|' || buf[1] == '.')
6991 for (cp = buf; *cp; cp++)
6996 memset (&the_ins, '\0', sizeof (the_ins));
6997 m68k_ip (&the_ins, buf);
7000 printf (_("Error %s in %s\n"), the_ins.error, buf);
7004 printf (_("Opcode(%d.%s): "), the_ins.numo, the_ins.args);
7005 for (n = 0; n < the_ins.numo; n++)
7006 printf (" 0x%x", the_ins.opcode[n] & 0xffff);
7008 print_the_insn (&the_ins.opcode[0], stdout);
7009 (void) putchar ('\n');
7011 for (n = 0; n < strlen (the_ins.args) / 2; n++)
7013 if (the_ins.operands[n].error)
7015 printf ("op%d Error %s in %s\n", n, the_ins.operands[n].error, buf);
7018 printf ("mode %d, reg %d, ", the_ins.operands[n].mode, the_ins.operands[n].reg);
7019 if (the_ins.operands[n].b_const)
7020 printf ("Constant: '%.*s', ", 1 + the_ins.operands[n].e_const - the_ins.operands[n].b_const, the_ins.operands[n].b_const);
7021 printf ("ireg %d, isiz %d, imul %d, ", the_ins.operands[n].ireg, the_ins.operands[n].isiz, the_ins.operands[n].imul);
7022 if (the_ins.operands[n].b_iadd)
7023 printf ("Iadd: '%.*s',", 1 + the_ins.operands[n].e_iadd - the_ins.operands[n].b_iadd, the_ins.operands[n].b_iadd);
7024 (void) putchar ('\n');
7036 while (*str && *str != ' ')
7038 if (str[-1] == ':' || str[1] == '=')
7045 /* Possible states for relaxation:
7047 0 0 branch offset byte (bra, etc)
7051 1 0 indexed offsets byte a0@(32,d4:w:1) etc
7055 2 0 two-offset index word-word a0@(32,d4)@(45) etc
7062 /* We have no need to default values of symbols. */
7065 md_undefined_symbol (name)
7066 char *name ATTRIBUTE_UNUSED;
7071 /* Round up a section size to the appropriate boundary. */
7073 md_section_align (segment, size)
7074 segT segment ATTRIBUTE_UNUSED;
7078 #ifdef BFD_ASSEMBLER
7079 /* For a.out, force the section size to be aligned. If we don't do
7080 this, BFD will align it for us, but it will not write out the
7081 final bytes of the section. This may be a bug in BFD, but it is
7082 easier to fix it here since that is how the other a.out targets
7086 align = bfd_get_section_alignment (stdoutput, segment);
7087 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
7094 /* Exactly what point is a PC-relative offset relative TO?
7095 On the 68k, it is relative to the address of the first extension
7096 word. The difference between the addresses of the offset and the
7097 first extension word is stored in fx_pcrel_adjust. */
7099 md_pcrel_from (fixP)
7104 /* Because fx_pcrel_adjust is a char, and may be unsigned, we store
7106 adjust = fixP->fx_pcrel_adjust;
7109 return fixP->fx_where + fixP->fx_frag->fr_address - adjust;
7112 #ifndef BFD_ASSEMBLER
7116 tc_coff_symbol_emit_hook (ignore)
7117 symbolS *ignore ATTRIBUTE_UNUSED;
7122 tc_coff_sizemachdep (frag)
7125 switch (frag->fr_subtype & 0x3)
7142 void m68k_elf_final_processing()
7144 /* Set file-specific flags if this is a cpu32 processor */
7145 if (cpu_of_arch (current_architecture) & cpu32)
7146 elf_elfheader (stdoutput)->e_flags |= EF_CPU32;