1 /* tc-mn10300.c -- Assembler code for the Matsushita 10300
2 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3 2006, 2007, 2008, 2009, 2010 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 3, or (at your option)
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to
19 the Free Software Foundation, 51 Franklin Street - Fifth Floor,
20 Boston, MA 02110-1301, USA. */
23 #include "safe-ctype.h"
25 #include "opcode/mn10300.h"
26 #include "dwarf2dbg.h"
27 #include "libiberty.h"
29 /* Structure to hold information about predefined registers. */
36 /* Generic assembler global variables which must be defined by all
39 /* Characters which always start a comment. */
40 const char comment_chars
[] = "#";
42 /* Characters which start a comment at the beginning of a line. */
43 const char line_comment_chars
[] = ";#";
45 /* Characters which may be used to separate multiple commands on a
47 const char line_separator_chars
[] = ";";
49 /* Characters which are used to indicate an exponent in a floating
51 const char EXP_CHARS
[] = "eE";
53 /* Characters which mean that a number is a floating point constant,
55 const char FLT_CHARS
[] = "dD";
57 const relax_typeS md_relax_table
[] =
59 /* The plus values for the bCC and fBCC instructions in the table below
60 are because the branch instruction is translated into a jump
61 instruction that is now +2 or +3 bytes further on in memory, and the
62 correct size of jump instruction must be selected. */
65 {0x7fff + 2, -0x8000 + 2, 5, 2},
66 {0x7fffffff, -0x80000000, 7, 0},
68 /* bCC relaxing (uncommon cases for 3byte length instructions) */
70 {0x7fff + 3, -0x8000 + 3, 6, 5},
71 {0x7fffffff, -0x80000000, 8, 0},
74 {0x7fff, -0x8000, 5, 7},
75 {0x7fffffff, -0x80000000, 7, 0},
78 {0x7fff, -0x8000, 4, 9},
79 {0x7fffffff, -0x80000000, 6, 0},
83 {0x7fff, -0x8000, 3, 12},
84 {0x7fffffff, -0x80000000, 5, 0},
88 {0x7fff + 3, -0x8000 + 3, 6, 15},
89 {0x7fffffff, -0x80000000, 8, 0},
93 /* Set linkrelax here to avoid fixups in most sections. */
96 static int current_machine
;
99 #define MAX_INSN_FIXUPS 5
105 bfd_reloc_code_real_type reloc
;
107 struct mn10300_fixup fixups
[MAX_INSN_FIXUPS
];
110 /* We must store the value of each register operand so that we can
111 verify that certain registers do not match. */
112 int mn10300_reg_operands
[MN10300_MAX_OPERANDS
];
114 const char *md_shortopts
= "";
116 struct option md_longopts
[] =
118 {NULL
, no_argument
, NULL
, 0}
121 size_t md_longopts_size
= sizeof (md_longopts
);
123 #define HAVE_AM33_2 (current_machine == AM33_2)
124 #define HAVE_AM33 (current_machine == AM33 || HAVE_AM33_2)
125 #define HAVE_AM30 (current_machine == AM30)
127 /* Opcode hash table. */
128 static struct hash_control
*mn10300_hash
;
130 /* This table is sorted. Suitable for searching by a binary search. */
131 static const struct reg_name data_registers
[] =
139 static const struct reg_name address_registers
[] =
147 static const struct reg_name r_registers
[] =
191 static const struct reg_name xr_registers
[] =
216 static const struct reg_name float_registers
[] =
252 static const struct reg_name double_registers
[] =
272 /* We abuse the `value' field, that would be otherwise unused, to
273 encode the architecture on which (access to) the register was
274 introduced. FIXME: we should probably warn when we encounter a
275 register name when assembling for an architecture that doesn't
276 support it, before parsing it as a symbol name. */
277 static const struct reg_name other_registers
[] =
286 #define OTHER_REG_NAME_CNT ARRAY_SIZE (other_registers)
288 /* Perform a binary search of the given register table REGS to see
289 if NAME is a valid regiter name. Returns the register number from
290 the array on success, or -1 on failure. */
293 reg_name_search (const struct reg_name
*regs
,
306 middle
= (low
+ high
) / 2;
307 cmp
= strcasecmp (name
, regs
[middle
].name
);
313 return regs
[middle
].value
;
320 /* Looks at the current position in the input line to see if it is
321 the name of a register in TABLE. If it is, then the name is
322 converted into an expression returned in EXPRESSIONP (with X_op
323 set to O_register and X_add_number set to the register number), the
324 input pointer is left pointing at the first non-blank character after
325 the name and the function returns TRUE. Otherwise the input pointer
326 is left alone and the function returns FALSE. */
329 get_register_name (expressionS
* expressionP
,
330 const struct reg_name
* table
,
338 /* Find the spelling of the operand. */
339 start
= name
= input_line_pointer
;
341 c
= get_symbol_end ();
342 reg_number
= reg_name_search (table
, table_length
, name
);
344 /* Put back the delimiting char. */
345 *input_line_pointer
= c
;
347 /* Look to see if it's in the register table. */
350 expressionP
->X_op
= O_register
;
351 expressionP
->X_add_number
= reg_number
;
353 /* Make the rest nice. */
354 expressionP
->X_add_symbol
= NULL
;
355 expressionP
->X_op_symbol
= NULL
;
360 /* Reset the line as if we had not done anything. */
361 input_line_pointer
= start
;
366 r_register_name (expressionS
*expressionP
)
368 return get_register_name (expressionP
, r_registers
, ARRAY_SIZE (r_registers
));
373 xr_register_name (expressionS
*expressionP
)
375 return get_register_name (expressionP
, xr_registers
, ARRAY_SIZE (xr_registers
));
379 data_register_name (expressionS
*expressionP
)
381 return get_register_name (expressionP
, data_registers
, ARRAY_SIZE (data_registers
));
385 address_register_name (expressionS
*expressionP
)
387 return get_register_name (expressionP
, address_registers
, ARRAY_SIZE (address_registers
));
391 float_register_name (expressionS
*expressionP
)
393 return get_register_name (expressionP
, float_registers
, ARRAY_SIZE (float_registers
));
397 double_register_name (expressionS
*expressionP
)
399 return get_register_name (expressionP
, double_registers
, ARRAY_SIZE (double_registers
));
403 other_register_name (expressionS
*expressionP
)
410 /* Find the spelling of the operand. */
411 start
= name
= input_line_pointer
;
413 c
= get_symbol_end ();
414 reg_number
= reg_name_search (other_registers
, ARRAY_SIZE (other_registers
), name
);
416 /* Put back the delimiting char. */
417 *input_line_pointer
= c
;
419 /* Look to see if it's in the register table. */
421 || (reg_number
== AM33
&& HAVE_AM33
))
423 expressionP
->X_op
= O_register
;
424 expressionP
->X_add_number
= 0;
426 /* Make the rest nice. */
427 expressionP
->X_add_symbol
= NULL
;
428 expressionP
->X_op_symbol
= NULL
;
433 /* Reset the line as if we had not done anything. */
434 input_line_pointer
= start
;
439 md_show_usage (FILE *stream
)
441 fprintf (stream
, _("MN10300 assembler options:\n\
446 md_parse_option (int c ATTRIBUTE_UNUSED
, char *arg ATTRIBUTE_UNUSED
)
452 md_undefined_symbol (char *name ATTRIBUTE_UNUSED
)
458 md_atof (int type
, char *litp
, int *sizep
)
460 return ieee_md_atof (type
, litp
, sizep
, FALSE
);
464 md_convert_frag (bfd
*abfd ATTRIBUTE_UNUSED
,
468 static unsigned long label_count
= 0;
471 subseg_change (sec
, 0);
472 if (fragP
->fr_subtype
== 0)
474 fix_new (fragP
, fragP
->fr_fix
+ 1, 1, fragP
->fr_symbol
,
475 fragP
->fr_offset
+ 1, 1, BFD_RELOC_8_PCREL
);
479 else if (fragP
->fr_subtype
== 1)
481 /* Reverse the condition of the first branch. */
482 int offset
= fragP
->fr_fix
;
483 int opcode
= fragP
->fr_literal
[offset
] & 0xff;
520 fragP
->fr_literal
[offset
] = opcode
;
522 /* Create a fixup for the reversed conditional branch. */
523 sprintf (buf
, ".%s_%ld", FAKE_LABEL_NAME
, label_count
++);
524 fix_new (fragP
, fragP
->fr_fix
+ 1, 1,
525 symbol_new (buf
, sec
, 0, fragP
->fr_next
),
526 fragP
->fr_offset
+ 1, 1, BFD_RELOC_8_PCREL
);
528 /* Now create the unconditional branch + fixup to the
530 fragP
->fr_literal
[offset
+ 2] = 0xcc;
531 fix_new (fragP
, fragP
->fr_fix
+ 3, 2, fragP
->fr_symbol
,
532 fragP
->fr_offset
+ 1, 1, BFD_RELOC_16_PCREL
);
536 else if (fragP
->fr_subtype
== 2)
538 /* Reverse the condition of the first branch. */
539 int offset
= fragP
->fr_fix
;
540 int opcode
= fragP
->fr_literal
[offset
] & 0xff;
577 fragP
->fr_literal
[offset
] = opcode
;
579 /* Create a fixup for the reversed conditional branch. */
580 sprintf (buf
, ".%s_%ld", FAKE_LABEL_NAME
, label_count
++);
581 fix_new (fragP
, fragP
->fr_fix
+ 1, 1,
582 symbol_new (buf
, sec
, 0, fragP
->fr_next
),
583 fragP
->fr_offset
+ 1, 1, BFD_RELOC_8_PCREL
);
585 /* Now create the unconditional branch + fixup to the
587 fragP
->fr_literal
[offset
+ 2] = 0xdc;
588 fix_new (fragP
, fragP
->fr_fix
+ 3, 4, fragP
->fr_symbol
,
589 fragP
->fr_offset
+ 1, 1, BFD_RELOC_32_PCREL
);
593 else if (fragP
->fr_subtype
== 3)
595 fix_new (fragP
, fragP
->fr_fix
+ 2, 1, fragP
->fr_symbol
,
596 fragP
->fr_offset
+ 2, 1, BFD_RELOC_8_PCREL
);
600 else if (fragP
->fr_subtype
== 4)
602 /* Reverse the condition of the first branch. */
603 int offset
= fragP
->fr_fix
;
604 int opcode
= fragP
->fr_literal
[offset
+ 1] & 0xff;
623 fragP
->fr_literal
[offset
+ 1] = opcode
;
625 /* Create a fixup for the reversed conditional branch. */
626 sprintf (buf
, ".%s_%ld", FAKE_LABEL_NAME
, label_count
++);
627 fix_new (fragP
, fragP
->fr_fix
+ 2, 1,
628 symbol_new (buf
, sec
, 0, fragP
->fr_next
),
629 fragP
->fr_offset
+ 2, 1, BFD_RELOC_8_PCREL
);
631 /* Now create the unconditional branch + fixup to the
633 fragP
->fr_literal
[offset
+ 3] = 0xcc;
634 fix_new (fragP
, fragP
->fr_fix
+ 4, 2, fragP
->fr_symbol
,
635 fragP
->fr_offset
+ 1, 1, BFD_RELOC_16_PCREL
);
639 else if (fragP
->fr_subtype
== 5)
641 /* Reverse the condition of the first branch. */
642 int offset
= fragP
->fr_fix
;
643 int opcode
= fragP
->fr_literal
[offset
+ 1] & 0xff;
659 fragP
->fr_literal
[offset
+ 1] = opcode
;
661 /* Create a fixup for the reversed conditional branch. */
662 sprintf (buf
, ".%s_%ld", FAKE_LABEL_NAME
, label_count
++);
663 fix_new (fragP
, fragP
->fr_fix
+ 2, 1,
664 symbol_new (buf
, sec
, 0, fragP
->fr_next
),
665 fragP
->fr_offset
+ 2, 1, BFD_RELOC_8_PCREL
);
667 /* Now create the unconditional branch + fixup to the
669 fragP
->fr_literal
[offset
+ 3] = 0xdc;
670 fix_new (fragP
, fragP
->fr_fix
+ 4, 4, fragP
->fr_symbol
,
671 fragP
->fr_offset
+ 1, 1, BFD_RELOC_32_PCREL
);
675 else if (fragP
->fr_subtype
== 6)
677 int offset
= fragP
->fr_fix
;
679 fragP
->fr_literal
[offset
] = 0xcd;
680 fix_new (fragP
, fragP
->fr_fix
+ 1, 2, fragP
->fr_symbol
,
681 fragP
->fr_offset
+ 1, 1, BFD_RELOC_16_PCREL
);
685 else if (fragP
->fr_subtype
== 7)
687 int offset
= fragP
->fr_fix
;
689 fragP
->fr_literal
[offset
] = 0xdd;
690 fragP
->fr_literal
[offset
+ 5] = fragP
->fr_literal
[offset
+ 3];
691 fragP
->fr_literal
[offset
+ 6] = fragP
->fr_literal
[offset
+ 4];
692 fragP
->fr_literal
[offset
+ 3] = 0;
693 fragP
->fr_literal
[offset
+ 4] = 0;
695 fix_new (fragP
, fragP
->fr_fix
+ 1, 4, fragP
->fr_symbol
,
696 fragP
->fr_offset
+ 1, 1, BFD_RELOC_32_PCREL
);
700 else if (fragP
->fr_subtype
== 8)
702 int offset
= fragP
->fr_fix
;
704 fragP
->fr_literal
[offset
] = 0xfa;
705 fragP
->fr_literal
[offset
+ 1] = 0xff;
706 fix_new (fragP
, fragP
->fr_fix
+ 2, 2, fragP
->fr_symbol
,
707 fragP
->fr_offset
+ 2, 1, BFD_RELOC_16_PCREL
);
711 else if (fragP
->fr_subtype
== 9)
713 int offset
= fragP
->fr_fix
;
715 fragP
->fr_literal
[offset
] = 0xfc;
716 fragP
->fr_literal
[offset
+ 1] = 0xff;
718 fix_new (fragP
, fragP
->fr_fix
+ 2, 4, fragP
->fr_symbol
,
719 fragP
->fr_offset
+ 2, 1, BFD_RELOC_32_PCREL
);
723 else if (fragP
->fr_subtype
== 10)
725 fragP
->fr_literal
[fragP
->fr_fix
] = 0xca;
726 fix_new (fragP
, fragP
->fr_fix
+ 1, 1, fragP
->fr_symbol
,
727 fragP
->fr_offset
+ 1, 1, BFD_RELOC_8_PCREL
);
731 else if (fragP
->fr_subtype
== 11)
733 int offset
= fragP
->fr_fix
;
735 fragP
->fr_literal
[offset
] = 0xcc;
737 fix_new (fragP
, fragP
->fr_fix
+ 1, 2, fragP
->fr_symbol
,
738 fragP
->fr_offset
+ 1, 1, BFD_RELOC_16_PCREL
);
742 else if (fragP
->fr_subtype
== 12)
744 int offset
= fragP
->fr_fix
;
746 fragP
->fr_literal
[offset
] = 0xdc;
748 fix_new (fragP
, fragP
->fr_fix
+ 1, 4, fragP
->fr_symbol
,
749 fragP
->fr_offset
+ 1, 1, BFD_RELOC_32_PCREL
);
753 else if (fragP
->fr_subtype
== 13)
755 fix_new (fragP
, fragP
->fr_fix
+ 2, 1, fragP
->fr_symbol
,
756 fragP
->fr_offset
+ 2, 1, BFD_RELOC_8_PCREL
);
760 else if (fragP
->fr_subtype
== 14)
762 /* Reverse the condition of the first branch. */
763 int offset
= fragP
->fr_fix
;
764 int opcode
= fragP
->fr_literal
[offset
+ 1] & 0xff;
813 fragP
->fr_literal
[offset
+ 1] = opcode
;
815 /* Create a fixup for the reversed conditional branch. */
816 sprintf (buf
, ".%s_%ld", FAKE_LABEL_NAME
, label_count
++);
817 fix_new (fragP
, fragP
->fr_fix
+ 2, 1,
818 symbol_new (buf
, sec
, 0, fragP
->fr_next
),
819 fragP
->fr_offset
+ 2, 1, BFD_RELOC_8_PCREL
);
821 /* Now create the unconditional branch + fixup to the
823 fragP
->fr_literal
[offset
+ 3] = 0xcc;
824 fix_new (fragP
, fragP
->fr_fix
+ 4, 2, fragP
->fr_symbol
,
825 fragP
->fr_offset
+ 1, 1, BFD_RELOC_16_PCREL
);
829 else if (fragP
->fr_subtype
== 15)
831 /* Reverse the condition of the first branch. */
832 int offset
= fragP
->fr_fix
;
833 int opcode
= fragP
->fr_literal
[offset
+ 1] & 0xff;
882 fragP
->fr_literal
[offset
+ 1] = opcode
;
884 /* Create a fixup for the reversed conditional branch. */
885 sprintf (buf
, ".%s_%ld", FAKE_LABEL_NAME
, label_count
++);
886 fix_new (fragP
, fragP
->fr_fix
+ 2, 1,
887 symbol_new (buf
, sec
, 0, fragP
->fr_next
),
888 fragP
->fr_offset
+ 2, 1, BFD_RELOC_8_PCREL
);
890 /* Now create the unconditional branch + fixup to the
892 fragP
->fr_literal
[offset
+ 3] = 0xdc;
893 fix_new (fragP
, fragP
->fr_fix
+ 4, 4, fragP
->fr_symbol
,
894 fragP
->fr_offset
+ 1, 1, BFD_RELOC_32_PCREL
);
903 md_section_align (asection
*seg
, valueT addr
)
905 int align
= bfd_get_section_alignment (stdoutput
, seg
);
907 return ((addr
+ (1 << align
) - 1) & (-1 << align
));
913 char *prev_name
= "";
914 const struct mn10300_opcode
*op
;
916 mn10300_hash
= hash_new ();
918 /* Insert unique names into hash table. The MN10300 instruction set
919 has many identical opcode names that have different opcodes based
920 on the operands. This hash table then provides a quick index to
921 the first opcode with a particular name in the opcode table. */
923 op
= mn10300_opcodes
;
926 if (strcmp (prev_name
, op
->name
))
928 prev_name
= (char *) op
->name
;
929 hash_insert (mn10300_hash
, op
->name
, (char *) op
);
934 /* Set the default machine type. */
936 if (!bfd_set_arch_mach (stdoutput
, bfd_arch_mn10300
, AM33_2
))
937 as_warn (_("could not set architecture and machine"));
939 current_machine
= AM33_2
;
941 if (!bfd_set_arch_mach (stdoutput
, bfd_arch_mn10300
, MN103
))
942 as_warn (_("could not set architecture and machine"));
944 current_machine
= MN103
;
948 static symbolS
*GOT_symbol
;
951 mn10300_PIC_related_p (symbolS
*sym
)
958 if (sym
== GOT_symbol
)
961 exp
= symbol_get_value_expression (sym
);
963 return (exp
->X_op
== O_PIC_reloc
964 || mn10300_PIC_related_p (exp
->X_add_symbol
)
965 || mn10300_PIC_related_p (exp
->X_op_symbol
));
969 mn10300_check_fixup (struct mn10300_fixup
*fixup
)
971 expressionS
*exp
= &fixup
->exp
;
977 case O_subtract
: /* If we're sufficiently unlucky that the label
978 and the expression that references it happen
979 to end up in different frags, the subtract
980 won't be simplified within expression(). */
981 /* The PIC-related operand must be the first operand of a sum. */
982 if (exp
!= &fixup
->exp
|| mn10300_PIC_related_p (exp
->X_op_symbol
))
985 if (exp
->X_add_symbol
&& exp
->X_add_symbol
== GOT_symbol
)
986 fixup
->reloc
= BFD_RELOC_32_GOT_PCREL
;
988 exp
= symbol_get_value_expression (exp
->X_add_symbol
);
992 if (exp
->X_add_symbol
&& exp
->X_add_symbol
== GOT_symbol
)
993 fixup
->reloc
= BFD_RELOC_32_GOT_PCREL
;
997 fixup
->reloc
= exp
->X_md
;
998 exp
->X_op
= O_symbol
;
999 if (fixup
->reloc
== BFD_RELOC_32_PLT_PCREL
1000 && fixup
->opindex
>= 0
1001 && (mn10300_operands
[fixup
->opindex
].flags
1002 & MN10300_OPERAND_RELAX
))
1007 return (mn10300_PIC_related_p (exp
->X_add_symbol
)
1008 || mn10300_PIC_related_p (exp
->X_op_symbol
));
1015 mn10300_cons_fix_new (fragS
*frag
, int off
, int size
, expressionS
*exp
)
1017 struct mn10300_fixup fixup
;
1021 fixup
.reloc
= BFD_RELOC_UNUSED
;
1023 mn10300_check_fixup (&fixup
);
1025 if (fixup
.reloc
== BFD_RELOC_MN10300_GOT32
)
1029 fixup
.reloc
= BFD_RELOC_MN10300_GOT16
;
1033 fixup
.reloc
= BFD_RELOC_MN10300_GOT24
;
1042 else if (fixup
.reloc
== BFD_RELOC_UNUSED
)
1046 fixup
.reloc
= BFD_RELOC_8
;
1050 fixup
.reloc
= BFD_RELOC_16
;
1054 fixup
.reloc
= BFD_RELOC_24
;
1058 fixup
.reloc
= BFD_RELOC_32
;
1067 as_bad (_("unsupported BFD relocation size %u"), size
);
1068 fixup
.reloc
= BFD_RELOC_UNUSED
;
1071 fix_new_exp (frag
, off
, size
, &fixup
.exp
, 0, fixup
.reloc
);
1075 check_operand (const struct mn10300_operand
*operand
,
1078 /* No need to check 32bit operands for a bit. Note that
1079 MN10300_OPERAND_SPLIT is an implicit 32bit operand. */
1080 if (operand
->bits
!= 32
1081 && (operand
->flags
& MN10300_OPERAND_SPLIT
) == 0)
1087 bits
= operand
->bits
;
1088 if (operand
->flags
& MN10300_OPERAND_24BIT
)
1091 if ((operand
->flags
& MN10300_OPERAND_SIGNED
) != 0)
1093 max
= (1 << (bits
- 1)) - 1;
1094 min
= - (1 << (bits
- 1));
1098 max
= (1 << bits
) - 1;
1104 if (test
< (offsetT
) min
|| test
> (offsetT
) max
)
1110 /* Insert an operand value into an instruction. */
1113 mn10300_insert_operand (unsigned long *insnp
,
1114 unsigned long *extensionp
,
1115 const struct mn10300_operand
*operand
,
1121 /* No need to check 32bit operands for a bit. Note that
1122 MN10300_OPERAND_SPLIT is an implicit 32bit operand. */
1123 if (operand
->bits
!= 32
1124 && (operand
->flags
& MN10300_OPERAND_SPLIT
) == 0)
1130 bits
= operand
->bits
;
1131 if (operand
->flags
& MN10300_OPERAND_24BIT
)
1134 if ((operand
->flags
& MN10300_OPERAND_SIGNED
) != 0)
1136 max
= (1 << (bits
- 1)) - 1;
1137 min
= - (1 << (bits
- 1));
1141 max
= (1 << bits
) - 1;
1147 if (test
< (offsetT
) min
|| test
> (offsetT
) max
)
1148 as_warn_value_out_of_range (_("operand"), test
, (offsetT
) min
, (offsetT
) max
, file
, line
);
1151 if ((operand
->flags
& MN10300_OPERAND_SPLIT
) != 0)
1153 *insnp
|= (val
>> (32 - operand
->bits
)) & ((1 << operand
->bits
) - 1);
1154 *extensionp
|= ((val
& ((1 << (32 - operand
->bits
)) - 1))
1157 else if ((operand
->flags
& MN10300_OPERAND_24BIT
) != 0)
1159 *insnp
|= (val
>> (24 - operand
->bits
)) & ((1 << operand
->bits
) - 1);
1160 *extensionp
|= ((val
& ((1 << (24 - operand
->bits
)) - 1))
1163 else if ((operand
->flags
& (MN10300_OPERAND_FSREG
| MN10300_OPERAND_FDREG
)))
1165 /* See devo/opcodes/m10300-opc.c just before #define FSM0 for an
1166 explanation of these variables. Note that FMT-implied shifts
1167 are not taken into account for FP registers. */
1168 unsigned long mask_low
, mask_high
;
1169 int shl_low
, shr_high
, shl_high
;
1171 switch (operand
->bits
)
1174 /* Handle regular FP registers. */
1175 if (operand
->shift
>= 0)
1177 /* This is an `m' register. */
1178 shl_low
= operand
->shift
;
1179 shl_high
= 8 + (8 & shl_low
) + (shl_low
& 4) / 4;
1183 /* This is an `n' register. */
1184 shl_low
= -operand
->shift
;
1185 shl_high
= shl_low
/ 4;
1194 /* Handle accumulators. */
1195 shl_low
= -operand
->shift
;
1205 *insnp
|= ((((val
& mask_high
) >> shr_high
) << shl_high
)
1206 | ((val
& mask_low
) << shl_low
));
1208 else if ((operand
->flags
& MN10300_OPERAND_EXTENDED
) == 0)
1210 *insnp
|= (((long) val
& ((1 << operand
->bits
) - 1))
1211 << (operand
->shift
+ shift
));
1213 if ((operand
->flags
& MN10300_OPERAND_REPEATED
) != 0)
1214 *insnp
|= (((long) val
& ((1 << operand
->bits
) - 1))
1215 << (operand
->shift
+ shift
+ operand
->bits
));
1219 *extensionp
|= (((long) val
& ((1 << operand
->bits
) - 1))
1220 << (operand
->shift
+ shift
));
1222 if ((operand
->flags
& MN10300_OPERAND_REPEATED
) != 0)
1223 *extensionp
|= (((long) val
& ((1 << operand
->bits
) - 1))
1224 << (operand
->shift
+ shift
+ operand
->bits
));
1229 md_assemble (char *str
)
1232 struct mn10300_opcode
*opcode
;
1233 struct mn10300_opcode
*next_opcode
;
1234 const unsigned char *opindex_ptr
;
1235 int next_opindex
, relaxable
;
1236 unsigned long insn
, extension
, size
= 0;
1241 /* Get the opcode. */
1242 for (s
= str
; *s
!= '\0' && !ISSPACE (*s
); s
++)
1247 /* Find the first opcode with the proper name. */
1248 opcode
= (struct mn10300_opcode
*) hash_find (mn10300_hash
, str
);
1251 as_bad (_("Unrecognized opcode: `%s'"), str
);
1256 while (ISSPACE (*str
))
1259 input_line_pointer
= str
;
1266 int extra_shift
= 0;
1268 errmsg
= _("Invalid opcode/operands");
1270 /* Reset the array of register operands. */
1271 memset (mn10300_reg_operands
, -1, sizeof (mn10300_reg_operands
));
1277 insn
= opcode
->opcode
;
1280 /* If the instruction is not available on the current machine
1281 then it can not possibly match. */
1283 && !(opcode
->machine
== AM33_2
&& HAVE_AM33_2
)
1284 && !(opcode
->machine
== AM33
&& HAVE_AM33
)
1285 && !(opcode
->machine
== AM30
&& HAVE_AM30
))
1288 for (op_idx
= 1, opindex_ptr
= opcode
->operands
;
1290 opindex_ptr
++, op_idx
++)
1292 const struct mn10300_operand
*operand
;
1295 if (next_opindex
== 0)
1297 operand
= &mn10300_operands
[*opindex_ptr
];
1301 operand
= &mn10300_operands
[next_opindex
];
1305 while (*str
== ' ' || *str
== ',')
1308 if (operand
->flags
& MN10300_OPERAND_RELAX
)
1311 /* Gather the operand. */
1312 hold
= input_line_pointer
;
1313 input_line_pointer
= str
;
1315 if (operand
->flags
& MN10300_OPERAND_PAREN
)
1317 if (*input_line_pointer
!= ')' && *input_line_pointer
!= '(')
1319 input_line_pointer
= hold
;
1323 input_line_pointer
++;
1326 /* See if we can match the operands. */
1327 else if (operand
->flags
& MN10300_OPERAND_DREG
)
1329 if (!data_register_name (&ex
))
1331 input_line_pointer
= hold
;
1336 else if (operand
->flags
& MN10300_OPERAND_AREG
)
1338 if (!address_register_name (&ex
))
1340 input_line_pointer
= hold
;
1345 else if (operand
->flags
& MN10300_OPERAND_SP
)
1347 char *start
= input_line_pointer
;
1348 char c
= get_symbol_end ();
1350 if (strcasecmp (start
, "sp") != 0)
1352 *input_line_pointer
= c
;
1353 input_line_pointer
= hold
;
1357 *input_line_pointer
= c
;
1360 else if (operand
->flags
& MN10300_OPERAND_RREG
)
1362 if (!r_register_name (&ex
))
1364 input_line_pointer
= hold
;
1369 else if (operand
->flags
& MN10300_OPERAND_XRREG
)
1371 if (!xr_register_name (&ex
))
1373 input_line_pointer
= hold
;
1378 else if (operand
->flags
& MN10300_OPERAND_FSREG
)
1380 if (!float_register_name (&ex
))
1382 input_line_pointer
= hold
;
1387 else if (operand
->flags
& MN10300_OPERAND_FDREG
)
1389 if (!double_register_name (&ex
))
1391 input_line_pointer
= hold
;
1396 else if (operand
->flags
& MN10300_OPERAND_FPCR
)
1398 char *start
= input_line_pointer
;
1399 char c
= get_symbol_end ();
1401 if (strcasecmp (start
, "fpcr") != 0)
1403 *input_line_pointer
= c
;
1404 input_line_pointer
= hold
;
1408 *input_line_pointer
= c
;
1411 else if (operand
->flags
& MN10300_OPERAND_USP
)
1413 char *start
= input_line_pointer
;
1414 char c
= get_symbol_end ();
1416 if (strcasecmp (start
, "usp") != 0)
1418 *input_line_pointer
= c
;
1419 input_line_pointer
= hold
;
1423 *input_line_pointer
= c
;
1426 else if (operand
->flags
& MN10300_OPERAND_SSP
)
1428 char *start
= input_line_pointer
;
1429 char c
= get_symbol_end ();
1431 if (strcasecmp (start
, "ssp") != 0)
1433 *input_line_pointer
= c
;
1434 input_line_pointer
= hold
;
1438 *input_line_pointer
= c
;
1441 else if (operand
->flags
& MN10300_OPERAND_MSP
)
1443 char *start
= input_line_pointer
;
1444 char c
= get_symbol_end ();
1446 if (strcasecmp (start
, "msp") != 0)
1448 *input_line_pointer
= c
;
1449 input_line_pointer
= hold
;
1453 *input_line_pointer
= c
;
1456 else if (operand
->flags
& MN10300_OPERAND_PC
)
1458 char *start
= input_line_pointer
;
1459 char c
= get_symbol_end ();
1461 if (strcasecmp (start
, "pc") != 0)
1463 *input_line_pointer
= c
;
1464 input_line_pointer
= hold
;
1468 *input_line_pointer
= c
;
1471 else if (operand
->flags
& MN10300_OPERAND_EPSW
)
1473 char *start
= input_line_pointer
;
1474 char c
= get_symbol_end ();
1476 if (strcasecmp (start
, "epsw") != 0)
1478 *input_line_pointer
= c
;
1479 input_line_pointer
= hold
;
1483 *input_line_pointer
= c
;
1486 else if (operand
->flags
& MN10300_OPERAND_PLUS
)
1488 if (*input_line_pointer
!= '+')
1490 input_line_pointer
= hold
;
1494 input_line_pointer
++;
1497 else if (operand
->flags
& MN10300_OPERAND_PSW
)
1499 char *start
= input_line_pointer
;
1500 char c
= get_symbol_end ();
1502 if (strcasecmp (start
, "psw") != 0)
1504 *input_line_pointer
= c
;
1505 input_line_pointer
= hold
;
1509 *input_line_pointer
= c
;
1512 else if (operand
->flags
& MN10300_OPERAND_MDR
)
1514 char *start
= input_line_pointer
;
1515 char c
= get_symbol_end ();
1517 if (strcasecmp (start
, "mdr") != 0)
1519 *input_line_pointer
= c
;
1520 input_line_pointer
= hold
;
1524 *input_line_pointer
= c
;
1527 else if (operand
->flags
& MN10300_OPERAND_REG_LIST
)
1529 unsigned int value
= 0;
1530 if (*input_line_pointer
!= '[')
1532 input_line_pointer
= hold
;
1538 input_line_pointer
++;
1540 /* We used to reject a null register list here; however,
1541 we accept it now so the compiler can emit "call"
1542 instructions for all calls to named functions.
1544 The linker can then fill in the appropriate bits for the
1545 register list and stack size or change the instruction
1546 into a "calls" if using "call" is not profitable. */
1547 while (*input_line_pointer
!= ']')
1552 if (*input_line_pointer
== ',')
1553 input_line_pointer
++;
1555 start
= input_line_pointer
;
1556 c
= get_symbol_end ();
1558 if (strcasecmp (start
, "d2") == 0)
1561 *input_line_pointer
= c
;
1563 else if (strcasecmp (start
, "d3") == 0)
1566 *input_line_pointer
= c
;
1568 else if (strcasecmp (start
, "a2") == 0)
1571 *input_line_pointer
= c
;
1573 else if (strcasecmp (start
, "a3") == 0)
1576 *input_line_pointer
= c
;
1578 else if (strcasecmp (start
, "other") == 0)
1581 *input_line_pointer
= c
;
1584 && strcasecmp (start
, "exreg0") == 0)
1587 *input_line_pointer
= c
;
1590 && strcasecmp (start
, "exreg1") == 0)
1593 *input_line_pointer
= c
;
1596 && strcasecmp (start
, "exother") == 0)
1599 *input_line_pointer
= c
;
1602 && strcasecmp (start
, "all") == 0)
1605 *input_line_pointer
= c
;
1609 input_line_pointer
= hold
;
1614 input_line_pointer
++;
1615 mn10300_insert_operand (& insn
, & extension
, operand
,
1620 else if (data_register_name (&ex
))
1622 input_line_pointer
= hold
;
1626 else if (address_register_name (&ex
))
1628 input_line_pointer
= hold
;
1632 else if (other_register_name (&ex
))
1634 input_line_pointer
= hold
;
1638 else if (HAVE_AM33
&& r_register_name (&ex
))
1640 input_line_pointer
= hold
;
1644 else if (HAVE_AM33
&& xr_register_name (&ex
))
1646 input_line_pointer
= hold
;
1650 else if (HAVE_AM33_2
&& float_register_name (&ex
))
1652 input_line_pointer
= hold
;
1656 else if (HAVE_AM33_2
&& double_register_name (&ex
))
1658 input_line_pointer
= hold
;
1662 else if (*str
== ')' || *str
== '(')
1664 input_line_pointer
= hold
;
1676 errmsg
= _("illegal operand");
1679 errmsg
= _("missing operand");
1685 mask
= MN10300_OPERAND_DREG
| MN10300_OPERAND_AREG
;
1687 mask
|= MN10300_OPERAND_RREG
| MN10300_OPERAND_XRREG
;
1689 mask
|= MN10300_OPERAND_FSREG
| MN10300_OPERAND_FDREG
;
1690 if ((operand
->flags
& mask
) == 0)
1692 input_line_pointer
= hold
;
1697 if (opcode
->format
== FMT_D1
|| opcode
->format
== FMT_S1
)
1699 else if (opcode
->format
== FMT_D2
1700 || opcode
->format
== FMT_D4
1701 || opcode
->format
== FMT_S2
1702 || opcode
->format
== FMT_S4
1703 || opcode
->format
== FMT_S6
1704 || opcode
->format
== FMT_D5
)
1706 else if (opcode
->format
== FMT_D7
)
1708 else if (opcode
->format
== FMT_D8
|| opcode
->format
== FMT_D9
)
1713 mn10300_insert_operand (& insn
, & extension
, operand
,
1714 ex
.X_add_number
, NULL
,
1717 /* And note the register number in the register array. */
1718 mn10300_reg_operands
[op_idx
- 1] = ex
.X_add_number
;
1723 /* If this operand can be promoted, and it doesn't
1724 fit into the allocated bitfield for this insn,
1725 then promote it (ie this opcode does not match). */
1727 & (MN10300_OPERAND_PROMOTE
| MN10300_OPERAND_RELAX
)
1728 && !check_operand (operand
, ex
.X_add_number
))
1730 input_line_pointer
= hold
;
1735 mn10300_insert_operand (& insn
, & extension
, operand
,
1736 ex
.X_add_number
, NULL
, 0, 0);
1740 /* If this operand can be promoted, then this opcode didn't
1741 match since we can't know if it needed promotion! */
1742 if (operand
->flags
& MN10300_OPERAND_PROMOTE
)
1744 input_line_pointer
= hold
;
1749 /* We need to generate a fixup for this expression. */
1750 if (fc
>= MAX_INSN_FIXUPS
)
1751 as_fatal (_("too many fixups"));
1752 fixups
[fc
].exp
= ex
;
1753 fixups
[fc
].opindex
= *opindex_ptr
;
1754 fixups
[fc
].reloc
= BFD_RELOC_UNUSED
;
1755 if (mn10300_check_fixup (& fixups
[fc
]))
1762 str
= input_line_pointer
;
1763 input_line_pointer
= hold
;
1765 while (*str
== ' ' || *str
== ',')
1769 /* Make sure we used all the operands! */
1773 /* If this instruction has registers that must not match, verify
1774 that they do indeed not match. */
1775 if (opcode
->no_match_operands
)
1777 /* Look at each operand to see if it's marked. */
1778 for (i
= 0; i
< MN10300_MAX_OPERANDS
; i
++)
1780 if ((1 << i
) & opcode
->no_match_operands
)
1784 /* operand I is marked. Check that it does not match any
1785 operands > I which are marked. */
1786 for (j
= i
+ 1; j
< MN10300_MAX_OPERANDS
; j
++)
1788 if (((1 << j
) & opcode
->no_match_operands
)
1789 && mn10300_reg_operands
[i
] == mn10300_reg_operands
[j
])
1791 errmsg
= _("Invalid register specification.");
1803 next_opcode
= opcode
+ 1;
1804 if (!strcmp (next_opcode
->name
, opcode
->name
))
1806 opcode
= next_opcode
;
1810 as_bad ("%s", errmsg
);
1816 while (ISSPACE (*str
))
1820 as_bad (_("junk at end of line: `%s'"), str
);
1822 input_line_pointer
= str
;
1824 /* Determine the size of the instruction. */
1825 if (opcode
->format
== FMT_S0
)
1828 if (opcode
->format
== FMT_S1
|| opcode
->format
== FMT_D0
)
1831 if (opcode
->format
== FMT_S2
|| opcode
->format
== FMT_D1
)
1834 if (opcode
->format
== FMT_D6
)
1837 if (opcode
->format
== FMT_D7
|| opcode
->format
== FMT_D10
)
1840 if (opcode
->format
== FMT_D8
)
1843 if (opcode
->format
== FMT_D9
)
1846 if (opcode
->format
== FMT_S4
)
1849 if (opcode
->format
== FMT_S6
|| opcode
->format
== FMT_D5
)
1852 if (opcode
->format
== FMT_D2
)
1855 if (opcode
->format
== FMT_D3
)
1858 if (opcode
->format
== FMT_D4
)
1861 if (relaxable
&& fc
> 0)
1863 /* On a 64-bit host the size of an 'int' is not the same
1864 as the size of a pointer, so we need a union to convert
1865 the opindex field of the fr_cgen structure into a char *
1866 so that it can be stored in the frag. We do not have
1867 to worry about loosing accuracy as we are not going to
1868 be even close to the 32bit limit of the int. */
1877 /* We want to anchor the line info to the previous frag (if
1878 there isn't one, create it), so that, when the insn is
1879 resized, we still get the right address for the beginning of
1882 dwarf2_emit_insn (0);
1887 /* Handle bra specially. Basically treat it like jmp so
1888 that we automatically handle 8, 16 and 32 bit offsets
1889 correctly as well as jumps to an undefined address.
1891 It is also important to not treat it like other bCC
1892 instructions since the long forms of bra is different
1893 from other bCC instructions. */
1894 if (opcode
->opcode
== 0xca00)
1906 else if (size
== 3 && opcode
->opcode
== 0xcc0000)
1908 else if (size
== 3 && (opcode
->opcode
& 0xfff000) == 0xf8d000)
1910 /* bCC (uncommon cases) */
1914 opindex_converter
.opindex
= fixups
[0].opindex
;
1915 f
= frag_var (rs_machine_dependent
, 8, 8 - size
, type
,
1916 fixups
[0].exp
.X_add_symbol
,
1917 fixups
[0].exp
.X_add_number
,
1918 opindex_converter
.ptr
);
1920 /* This is pretty hokey. We basically just care about the
1921 opcode, so we have to write out the first word big endian.
1923 The exception is "call", which has two operands that we
1926 The first operand (the register list) happens to be in the
1927 first instruction word, and will be in the right place if
1928 we output the first word in big endian mode.
1930 The second operand (stack size) is in the extension word,
1931 and we want it to appear as the first character in the extension
1932 word (as it appears in memory). Luckily, writing the extension
1933 word in big endian format will do what we want. */
1934 number_to_chars_bigendian (f
, insn
, size
> 4 ? 4 : size
);
1937 number_to_chars_bigendian (f
+ 4, extension
, 4);
1938 number_to_chars_bigendian (f
+ 8, 0, size
- 8);
1941 number_to_chars_bigendian (f
+ 4, extension
, size
- 4);
1945 /* Allocate space for the instruction. */
1946 f
= frag_more (size
);
1948 /* Fill in bytes for the instruction. Note that opcode fields
1949 are written big-endian, 16 & 32bit immediates are written
1950 little endian. Egad. */
1951 if (opcode
->format
== FMT_S0
1952 || opcode
->format
== FMT_S1
1953 || opcode
->format
== FMT_D0
1954 || opcode
->format
== FMT_D6
1955 || opcode
->format
== FMT_D7
1956 || opcode
->format
== FMT_D10
1957 || opcode
->format
== FMT_D1
)
1959 number_to_chars_bigendian (f
, insn
, size
);
1961 else if (opcode
->format
== FMT_S2
1962 && opcode
->opcode
!= 0xdf0000
1963 && opcode
->opcode
!= 0xde0000)
1965 /* A format S2 instruction that is _not_ "ret" and "retf". */
1966 number_to_chars_bigendian (f
, (insn
>> 16) & 0xff, 1);
1967 number_to_chars_littleendian (f
+ 1, insn
& 0xffff, 2);
1969 else if (opcode
->format
== FMT_S2
)
1971 /* This must be a ret or retf, which is written entirely in
1972 big-endian format. */
1973 number_to_chars_bigendian (f
, insn
, 3);
1975 else if (opcode
->format
== FMT_S4
1976 && opcode
->opcode
!= 0xdc000000)
1978 /* This must be a format S4 "call" instruction. What a pain. */
1979 unsigned long temp
= (insn
>> 8) & 0xffff;
1980 number_to_chars_bigendian (f
, (insn
>> 24) & 0xff, 1);
1981 number_to_chars_littleendian (f
+ 1, temp
, 2);
1982 number_to_chars_bigendian (f
+ 3, insn
& 0xff, 1);
1983 number_to_chars_bigendian (f
+ 4, extension
& 0xff, 1);
1985 else if (opcode
->format
== FMT_S4
)
1987 /* This must be a format S4 "jmp" instruction. */
1988 unsigned long temp
= ((insn
& 0xffffff) << 8) | (extension
& 0xff);
1989 number_to_chars_bigendian (f
, (insn
>> 24) & 0xff, 1);
1990 number_to_chars_littleendian (f
+ 1, temp
, 4);
1992 else if (opcode
->format
== FMT_S6
)
1994 unsigned long temp
= ((insn
& 0xffffff) << 8)
1995 | ((extension
>> 16) & 0xff);
1996 number_to_chars_bigendian (f
, (insn
>> 24) & 0xff, 1);
1997 number_to_chars_littleendian (f
+ 1, temp
, 4);
1998 number_to_chars_bigendian (f
+ 5, (extension
>> 8) & 0xff, 1);
1999 number_to_chars_bigendian (f
+ 6, extension
& 0xff, 1);
2001 else if (opcode
->format
== FMT_D2
2002 && opcode
->opcode
!= 0xfaf80000
2003 && opcode
->opcode
!= 0xfaf00000
2004 && opcode
->opcode
!= 0xfaf40000)
2006 /* A format D2 instruction where the 16bit immediate is
2007 really a single 16bit value, not two 8bit values. */
2008 number_to_chars_bigendian (f
, (insn
>> 16) & 0xffff, 2);
2009 number_to_chars_littleendian (f
+ 2, insn
& 0xffff, 2);
2011 else if (opcode
->format
== FMT_D2
)
2013 /* A format D2 instruction where the 16bit immediate
2014 is really two 8bit immediates. */
2015 number_to_chars_bigendian (f
, insn
, 4);
2017 else if (opcode
->format
== FMT_D3
)
2019 number_to_chars_bigendian (f
, (insn
>> 16) & 0xffff, 2);
2020 number_to_chars_littleendian (f
+ 2, insn
& 0xffff, 2);
2021 number_to_chars_bigendian (f
+ 4, extension
& 0xff, 1);
2023 else if (opcode
->format
== FMT_D4
)
2025 unsigned long temp
= ((insn
& 0xffff) << 16) | (extension
& 0xffff);
2027 number_to_chars_bigendian (f
, (insn
>> 16) & 0xffff, 2);
2028 number_to_chars_littleendian (f
+ 2, temp
, 4);
2030 else if (opcode
->format
== FMT_D5
)
2032 unsigned long temp
= (((insn
& 0xffff) << 16)
2033 | ((extension
>> 8) & 0xffff));
2035 number_to_chars_bigendian (f
, (insn
>> 16) & 0xffff, 2);
2036 number_to_chars_littleendian (f
+ 2, temp
, 4);
2037 number_to_chars_bigendian (f
+ 6, extension
& 0xff, 1);
2039 else if (opcode
->format
== FMT_D8
)
2041 unsigned long temp
= ((insn
& 0xff) << 16) | (extension
& 0xffff);
2043 number_to_chars_bigendian (f
, (insn
>> 8) & 0xffffff, 3);
2044 number_to_chars_bigendian (f
+ 3, (temp
& 0xff), 1);
2045 number_to_chars_littleendian (f
+ 4, temp
>> 8, 2);
2047 else if (opcode
->format
== FMT_D9
)
2049 unsigned long temp
= ((insn
& 0xff) << 24) | (extension
& 0xffffff);
2051 number_to_chars_bigendian (f
, (insn
>> 8) & 0xffffff, 3);
2052 number_to_chars_littleendian (f
+ 3, temp
, 4);
2055 /* Create any fixups. */
2056 for (i
= 0; i
< fc
; i
++)
2058 const struct mn10300_operand
*operand
;
2061 operand
= &mn10300_operands
[fixups
[i
].opindex
];
2062 if (fixups
[i
].reloc
!= BFD_RELOC_UNUSED
2063 && fixups
[i
].reloc
!= BFD_RELOC_32_GOT_PCREL
2064 && fixups
[i
].reloc
!= BFD_RELOC_32_GOTOFF
2065 && fixups
[i
].reloc
!= BFD_RELOC_32_PLT_PCREL
2066 && fixups
[i
].reloc
!= BFD_RELOC_MN10300_GOT32
)
2068 reloc_howto_type
*reloc_howto
;
2071 reloc_howto
= bfd_reloc_type_lookup (stdoutput
,
2077 reloc_size
= bfd_get_reloc_size (reloc_howto
);
2079 if (reloc_size
< 1 || reloc_size
> 4)
2083 fix_new_exp (frag_now
, f
- frag_now
->fr_literal
+ offset
,
2084 reloc_size
, &fixups
[i
].exp
,
2085 reloc_howto
->pc_relative
,
2090 int reloc
, pcrel
, offset
;
2093 reloc
= BFD_RELOC_NONE
;
2094 if (fixups
[i
].reloc
!= BFD_RELOC_UNUSED
)
2095 reloc
= fixups
[i
].reloc
;
2096 /* How big is the reloc? Remember SPLIT relocs are
2097 implicitly 32bits. */
2098 if ((operand
->flags
& MN10300_OPERAND_SPLIT
) != 0)
2100 else if ((operand
->flags
& MN10300_OPERAND_24BIT
) != 0)
2103 reloc_size
= operand
->bits
;
2105 /* Is the reloc pc-relative? */
2106 pcrel
= (operand
->flags
& MN10300_OPERAND_PCREL
) != 0;
2107 if (reloc
!= BFD_RELOC_NONE
)
2108 pcrel
= bfd_reloc_type_lookup (stdoutput
, reloc
)->pc_relative
;
2110 offset
= size
- (reloc_size
+ operand
->shift
) / 8;
2112 /* Choose a proper BFD relocation type. */
2113 if (reloc
!= BFD_RELOC_NONE
)
2117 if (reloc_size
== 32)
2118 reloc
= BFD_RELOC_32_PCREL
;
2119 else if (reloc_size
== 16)
2120 reloc
= BFD_RELOC_16_PCREL
;
2121 else if (reloc_size
== 8)
2122 reloc
= BFD_RELOC_8_PCREL
;
2128 if (reloc_size
== 32)
2129 reloc
= BFD_RELOC_32
;
2130 else if (reloc_size
== 16)
2131 reloc
= BFD_RELOC_16
;
2132 else if (reloc_size
== 8)
2133 reloc
= BFD_RELOC_8
;
2138 fixP
= fix_new_exp (frag_now
, f
- frag_now
->fr_literal
+ offset
,
2139 reloc_size
/ 8, &fixups
[i
].exp
, pcrel
,
2140 ((bfd_reloc_code_real_type
) reloc
));
2143 fixP
->fx_offset
+= offset
;
2147 dwarf2_emit_insn (size
);
2150 /* Label this frag as one that contains instructions. */
2151 frag_now
->tc_frag_data
= TRUE
;
2154 /* If while processing a fixup, a reloc really needs to be created
2155 then it is done here. */
2158 tc_gen_reloc (asection
*seg ATTRIBUTE_UNUSED
, fixS
*fixp
)
2160 static arelent
* no_relocs
= NULL
;
2161 static arelent
* relocs
[MAX_RELOC_EXPANSION
+ 1];
2164 reloc
= xmalloc (sizeof (arelent
));
2166 reloc
->howto
= bfd_reloc_type_lookup (stdoutput
, fixp
->fx_r_type
);
2167 if (reloc
->howto
== NULL
)
2169 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
2170 _("reloc %d not supported by object file format"),
2171 (int) fixp
->fx_r_type
);
2176 reloc
->address
= fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
2181 && S_GET_SEGMENT (fixp
->fx_subsy
) == absolute_section
)
2183 fixp
->fx_offset
-= S_GET_VALUE (fixp
->fx_subsy
);
2184 fixp
->fx_subsy
= NULL
;
2187 if (fixp
->fx_addsy
&& fixp
->fx_subsy
)
2189 asection
*asec
, *ssec
;
2191 asec
= S_GET_SEGMENT (fixp
->fx_addsy
);
2192 ssec
= S_GET_SEGMENT (fixp
->fx_subsy
);
2194 /* If we have a difference between two (non-absolute) symbols we must
2195 generate two relocs (one for each symbol) and allow the linker to
2196 resolve them - relaxation may change the distances between symbols,
2197 even local symbols defined in the same section. */
2198 if (ssec
!= absolute_section
|| asec
!= absolute_section
)
2200 arelent
* reloc2
= xmalloc (sizeof * reloc
);
2205 reloc2
->address
= reloc
->address
;
2206 reloc2
->howto
= bfd_reloc_type_lookup (stdoutput
, BFD_RELOC_MN10300_SYM_DIFF
);
2207 reloc2
->addend
= - S_GET_VALUE (fixp
->fx_subsy
);
2208 reloc2
->sym_ptr_ptr
= xmalloc (sizeof (asymbol
*));
2209 *reloc2
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_subsy
);
2211 reloc
->addend
= fixp
->fx_offset
;
2212 if (asec
== absolute_section
)
2214 reloc
->addend
+= S_GET_VALUE (fixp
->fx_addsy
);
2215 reloc
->sym_ptr_ptr
= bfd_abs_section_ptr
->symbol_ptr_ptr
;
2219 reloc
->sym_ptr_ptr
= xmalloc (sizeof (asymbol
*));
2220 *reloc
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_addsy
);
2229 char *fixpos
= fixp
->fx_where
+ fixp
->fx_frag
->fr_literal
;
2231 reloc
->addend
= (S_GET_VALUE (fixp
->fx_addsy
)
2232 - S_GET_VALUE (fixp
->fx_subsy
) + fixp
->fx_offset
);
2234 switch (fixp
->fx_r_type
)
2237 md_number_to_chars (fixpos
, reloc
->addend
, 1);
2241 md_number_to_chars (fixpos
, reloc
->addend
, 2);
2245 md_number_to_chars (fixpos
, reloc
->addend
, 3);
2249 md_number_to_chars (fixpos
, reloc
->addend
, 4);
2254 = (asymbol
**) bfd_abs_section_ptr
->symbol_ptr_ptr
;
2264 reloc
->sym_ptr_ptr
= xmalloc (sizeof (asymbol
*));
2265 *reloc
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_addsy
);
2266 reloc
->addend
= fixp
->fx_offset
;
2271 /* Returns true iff the symbol attached to the frag is at a known location
2272 in the given section, (and hence the relocation to it can be relaxed by
2274 static inline bfd_boolean
2275 has_known_symbol_location (fragS
* fragp
, asection
* sec
)
2277 symbolS
* sym
= fragp
->fr_symbol
;
2280 && S_IS_DEFINED (sym
)
2281 && ! S_IS_WEAK (sym
)
2282 && S_GET_SEGMENT (sym
) == sec
;
2286 md_estimate_size_before_relax (fragS
*fragp
, asection
*seg
)
2288 if (fragp
->fr_subtype
== 6
2289 && ! has_known_symbol_location (fragp
, seg
))
2290 fragp
->fr_subtype
= 7;
2291 else if (fragp
->fr_subtype
== 8
2292 && ! has_known_symbol_location (fragp
, seg
))
2293 fragp
->fr_subtype
= 9;
2294 else if (fragp
->fr_subtype
== 10
2295 && ! has_known_symbol_location (fragp
, seg
))
2296 fragp
->fr_subtype
= 12;
2298 if (fragp
->fr_subtype
== 13)
2301 if (fragp
->fr_subtype
>= sizeof (md_relax_table
) / sizeof (md_relax_table
[0]))
2304 return md_relax_table
[fragp
->fr_subtype
].rlx_length
;
2308 md_pcrel_from (fixS
*fixp
)
2310 if (fixp
->fx_addsy
!= (symbolS
*) NULL
2311 && (!S_IS_DEFINED (fixp
->fx_addsy
) || S_IS_WEAK (fixp
->fx_addsy
)))
2312 /* The symbol is undefined or weak. Let the linker figure it out. */
2315 return fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
2319 md_apply_fix (fixS
* fixP
, valueT
* valP
, segT seg
)
2321 char * fixpos
= fixP
->fx_where
+ fixP
->fx_frag
->fr_literal
;
2323 int value
= (int) * valP
;
2325 gas_assert (fixP
->fx_r_type
< BFD_RELOC_UNUSED
);
2327 /* This should never happen. */
2328 if (seg
->flags
& SEC_ALLOC
)
2331 /* The value we are passed in *valuep includes the symbol values.
2332 If we are doing this relocation the code in write.c is going to
2333 call bfd_install_relocation, which is also going to use the symbol
2334 value. That means that if the reloc is fully resolved we want to
2335 use *valuep since bfd_install_relocation is not being used.
2337 However, if the reloc is not fully resolved we do not want to use
2338 *valuep, and must use fx_offset instead. However, if the reloc
2339 is PC relative, we do want to use *valuep since it includes the
2340 result of md_pcrel_from. */
2341 if (fixP
->fx_addsy
!= NULL
&& ! fixP
->fx_pcrel
)
2342 value
= fixP
->fx_offset
;
2344 /* If the fix is relative to a symbol which is not defined, or not
2345 in the same segment as the fix, we cannot resolve it here. */
2346 if (fixP
->fx_addsy
!= NULL
2347 && (! S_IS_DEFINED (fixP
->fx_addsy
)
2348 || (S_GET_SEGMENT (fixP
->fx_addsy
) != seg
)))
2354 switch (fixP
->fx_r_type
)
2357 case BFD_RELOC_8_PCREL
:
2362 case BFD_RELOC_16_PCREL
:
2367 case BFD_RELOC_32_PCREL
:
2371 case BFD_RELOC_VTABLE_INHERIT
:
2372 case BFD_RELOC_VTABLE_ENTRY
:
2376 case BFD_RELOC_MN10300_ALIGN
:
2380 case BFD_RELOC_NONE
:
2382 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2383 _("Bad relocation fixup type (%d)"), fixP
->fx_r_type
);
2386 md_number_to_chars (fixpos
, value
, size
);
2388 /* If a symbol remains, pass the fixup, as a reloc, onto the linker. */
2389 if (fixP
->fx_addsy
== NULL
)
2393 /* Return zero if the fixup in fixp should be left alone and not
2397 mn10300_fix_adjustable (struct fix
*fixp
)
2401 if (TC_FORCE_RELOCATION_LOCAL (fixp
))
2404 /* Non-relative relocs can (and must) be adjusted if they do
2405 not meet the criteria below, or the generic criteria. */
2406 else if (TC_FORCE_RELOCATION (fixp
))
2409 /* Do not adjust relocations involving symbols in code sections,
2410 because it breaks linker relaxations. This could be fixed in the
2411 linker, but this fix is simpler, and it pretty much only affects
2412 object size a little bit. */
2413 if (S_GET_SEGMENT (fixp
->fx_addsy
)->flags
& SEC_CODE
)
2416 /* Likewise, do not adjust symbols that won't be merged, or debug
2417 symbols, because they too break relaxation. We do want to adjust
2418 other mergable symbols, like .rodata, because code relaxations
2419 need section-relative symbols to properly relax them. */
2420 if (! (S_GET_SEGMENT (fixp
->fx_addsy
)->flags
& SEC_MERGE
))
2423 if (strncmp (S_GET_SEGMENT (fixp
->fx_addsy
)->name
, ".debug", 6) == 0)
2430 set_arch_mach (int mach
)
2432 if (!bfd_set_arch_mach (stdoutput
, bfd_arch_mn10300
, mach
))
2433 as_warn (_("could not set architecture and machine"));
2435 current_machine
= mach
;
2438 static inline char *
2439 mn10300_end_of_match (char *cont
, char *what
)
2441 int len
= strlen (what
);
2443 if (strncmp (cont
, what
, strlen (what
)) == 0
2444 && ! is_part_of_name (cont
[len
]))
2451 mn10300_parse_name (char const *name
,
2453 enum expr_mode mode
,
2456 char *next
= input_line_pointer
;
2461 exprP
->X_op_symbol
= NULL
;
2463 if (strcmp (name
, GLOBAL_OFFSET_TABLE_NAME
) == 0)
2466 GOT_symbol
= symbol_find_or_make (name
);
2468 exprP
->X_add_symbol
= GOT_symbol
;
2470 /* If we have an absolute symbol or a reg,
2471 then we know its value now. */
2472 segment
= S_GET_SEGMENT (exprP
->X_add_symbol
);
2473 if (mode
!= expr_defer
&& segment
== absolute_section
)
2475 exprP
->X_op
= O_constant
;
2476 exprP
->X_add_number
= S_GET_VALUE (exprP
->X_add_symbol
);
2477 exprP
->X_add_symbol
= NULL
;
2479 else if (mode
!= expr_defer
&& segment
== reg_section
)
2481 exprP
->X_op
= O_register
;
2482 exprP
->X_add_number
= S_GET_VALUE (exprP
->X_add_symbol
);
2483 exprP
->X_add_symbol
= NULL
;
2487 exprP
->X_op
= O_symbol
;
2488 exprP
->X_add_number
= 0;
2494 exprP
->X_add_symbol
= symbol_find_or_make (name
);
2496 if (*nextcharP
!= '@')
2498 else if ((next_end
= mn10300_end_of_match (next
+ 1, "GOTOFF")))
2499 reloc_type
= BFD_RELOC_32_GOTOFF
;
2500 else if ((next_end
= mn10300_end_of_match (next
+ 1, "GOT")))
2501 reloc_type
= BFD_RELOC_MN10300_GOT32
;
2502 else if ((next_end
= mn10300_end_of_match (next
+ 1, "PLT")))
2503 reloc_type
= BFD_RELOC_32_PLT_PCREL
;
2507 *input_line_pointer
= *nextcharP
;
2508 input_line_pointer
= next_end
;
2509 *nextcharP
= *input_line_pointer
;
2510 *input_line_pointer
= '\0';
2512 exprP
->X_op
= O_PIC_reloc
;
2513 exprP
->X_add_number
= 0;
2514 exprP
->X_md
= reloc_type
;
2519 /* The target specific pseudo-ops which we support. */
2520 const pseudo_typeS md_pseudo_table
[] =
2522 { "am30", set_arch_mach
, AM30
},
2523 { "am33", set_arch_mach
, AM33
},
2524 { "am33_2", set_arch_mach
, AM33_2
},
2525 { "mn10300", set_arch_mach
, MN103
},
2529 /* Returns FALSE if there is some mn10300 specific reason why the
2530 subtraction of two same-section symbols cannot be computed by
2534 mn10300_allow_local_subtract (expressionS
* left
, expressionS
* right
, segT section
)
2541 /* If we are not performing linker relaxation then we have nothing
2546 /* If the symbols are not in a code section then they are OK. */
2547 if ((section
->flags
& SEC_CODE
) == 0)
2550 /* Otherwise we have to scan the fragments between the two symbols.
2551 If any instructions are found then we have to assume that linker
2552 relaxation may change their size and so we must delay resolving
2553 the subtraction until the final link. */
2554 left_frag
= symbol_get_frag (left
->X_add_symbol
);
2555 right_frag
= symbol_get_frag (right
->X_add_symbol
);
2557 if (left_frag
== right_frag
)
2558 return ! left_frag
->tc_frag_data
;
2561 for (frag
= left_frag
; frag
!= NULL
; frag
= frag
->fr_next
)
2563 if (frag
->tc_frag_data
)
2565 if (frag
== right_frag
)
2570 for (frag
= right_frag
; frag
!= NULL
; frag
= frag
->fr_next
)
2572 if (frag
->tc_frag_data
)
2574 if (frag
== left_frag
)
2579 /* The two symbols are on disjoint fragment chains
2580 - we cannot possibly compute their difference. */
2586 /* When relaxing, we need to output a reloc for any .align directive
2587 that requests alignment to a two byte boundary or larger. */
2590 mn10300_handle_align (fragS
*frag
)
2593 && (frag
->fr_type
== rs_align
2594 || frag
->fr_type
== rs_align_code
)
2595 && frag
->fr_address
+ frag
->fr_fix
> 0
2596 && frag
->fr_offset
> 1
2597 && now_seg
!= bss_section
2598 /* Do not create relocs for the merging sections - such
2599 relocs will prevent the contents from being merged. */
2600 && (bfd_get_section_flags (now_seg
->owner
, now_seg
) & SEC_MERGE
) == 0)
2601 /* Create a new fixup to record the alignment request. The symbol is
2602 irrelevent but must be present so we use the absolute section symbol.
2603 The offset from the symbol is used to record the power-of-two alignment
2604 value. The size is set to 0 because the frag may already be aligned,
2605 thus causing cvt_frag_to_fill to reduce the size of the frag to zero. */
2606 fix_new (frag
, frag
->fr_fix
, 0, & abs_symbol
, frag
->fr_offset
, FALSE
,
2607 BFD_RELOC_MN10300_ALIGN
);
2611 mn10300_force_relocation (struct fix
* fixp
)
2615 || fixp
->fx_r_type
== BFD_RELOC_MN10300_ALIGN
))
2618 return generic_force_reloc (fixp
);