#define GETA_0F (65536 * 4 - 8)
#define GETA_0B (-65536 * 4 - 4)
-#define GETA_MAX_LEN 4*4
+#define GETA_MAX_LEN 4 * 4
#define GETA_3F 0
#define GETA_3B 0
#define BCC_0F GETA_0F
#define BCC_0B GETA_0B
-#define BCC_MAX_LEN 6*4
+#define BCC_MAX_LEN 6 * 4
#define BCC_5F GETA_3F
#define BCC_5B GETA_3B
#define PUSHJ_0F GETA_0F
#define PUSHJ_0B GETA_0B
-#define PUSHJ_MAX_LEN 5*4
+#define PUSHJ_MAX_LEN 5 * 4
#define PUSHJ_4F GETA_3F
#define PUSHJ_4B GETA_3B
#define JMP_0F (65536 * 256 * 4 - 8)
#define JMP_0B (-65536 * 256 * 4 - 4)
-#define JMP_MAX_LEN 5*4
+#define JMP_MAX_LEN 5 * 4
#define JMP_4F 0
#define JMP_4B 0
int i;
for (i = 0; i < n; i++)
- md_number_to_chars (opcodep + i*4, SWYM_INSN_BYTE << 24, 4);
+ md_number_to_chars (opcodep + i * 4, SWYM_INSN_BYTE << 24, 4);
}
/* See macro md_parse_name in tc-mmix.h. */
return 0;
}
- /* Begin operand parsing at the current scan point. */
+ /* Begin operand parsing at the current scan point. */
input_line_pointer = p;
expression (&exp[numexp]);
input_line_pointer--;
}
- /* Mark the end of the valid operands with an illegal expression. */
+ /* Mark the end of the valid operands with an illegal expression. */
exp[numexp].X_op = O_illegal;
return (numexp);
mmix_discard_rest_of_line ()
{
while (*input_line_pointer
- && (! is_end_of_line [(unsigned char) *input_line_pointer]
+ && (! is_end_of_line[(unsigned char) *input_line_pointer]
|| TC_EOL_IN_INSN (input_line_pointer)))
input_line_pointer++;
}
/* This will break the day the "lex" thingy changes. For now, it's the
only way to make ':' part of a name, and a name beginner. */
- lex_type [':'] = (LEX_NAME | LEX_BEGIN_NAME);
+ lex_type[':'] = (LEX_NAME | LEX_BEGIN_NAME);
mmix_opcode_hash = hash_new ();
}
if (expand_op)
- frag_var (rs_machine_dependent, 4*4, 0,
+ frag_var (rs_machine_dependent, 4 * 4, 0,
ENCODE_RELAX (STATE_JMP, STATE_UNDF),
exp[0].X_add_symbol,
exp[0].X_add_number,
/* SYNCD: "X,$Y,$Z|Z". */
/* FALLTHROUGH. */
case mmix_operands_regs:
- /* Three registers, $X,$Y,$Z. */
+ /* Three registers, $X,$Y,$Z. */
/* FALLTHROUGH. */
case mmix_operands_regs_z:
/* Operands "$X,$Y,$Z|Z", number of arguments checked above. */
case mmix_operands_sync:
a_single_24_bit_number_operand:
- if (n_operands != 1
- || exp[0].X_op == O_register
- || (exp[0].X_op == O_constant
- && (exp[0].X_add_number > 0xffffff || exp[0].X_add_number < 0)))
- {
- as_bad (_("invalid operands to opcode %s: `%s'"),
- instruction->name, operands);
- return;
- }
+ if (n_operands != 1
+ || exp[0].X_op == O_register
+ || (exp[0].X_op == O_constant
+ && (exp[0].X_add_number > 0xffffff || exp[0].X_add_number < 0)))
+ {
+ as_bad (_("invalid operands to opcode %s: `%s'"),
+ instruction->name, operands);
+ return;
+ }
- if (exp[0].X_op == O_constant)
- {
- opcodep[1] = (exp[0].X_add_number >> 16) & 255;
- opcodep[2] = (exp[0].X_add_number >> 8) & 255;
- opcodep[3] = exp[0].X_add_number & 255;
- }
- else
- /* FIXME: This doesn't bring us unsignedness checking. */
- fix_new_exp (opc_fragP, opcodep - opc_fragP->fr_literal + 1,
- 3, exp + 0, 0, BFD_RELOC_24);
- break;
+ if (exp[0].X_op == O_constant)
+ {
+ opcodep[1] = (exp[0].X_add_number >> 16) & 255;
+ opcodep[2] = (exp[0].X_add_number >> 8) & 255;
+ opcodep[3] = exp[0].X_add_number & 255;
+ }
+ else
+ /* FIXME: This doesn't bring us unsignedness checking. */
+ fix_new_exp (opc_fragP, opcodep - opc_fragP->fr_literal + 1,
+ 3, exp + 0, 0, BFD_RELOC_24);
+ break;
case mmix_operands_neg:
/* Operands "$X,Y,$Z|Z"; NEG or NEGU. Y is optional, 0 is default. */
break;
case mmix_operands_regaddr:
- /* A GETA/branch-type. */
+ /* A GETA/branch-type. */
break;
case mmix_operands_get:
break;
}
- /* "0,$Z"; UNSAVE. */
+ /* "0,$Z"; UNSAVE. */
if (n_operands != 2
|| exp[0].X_op != O_constant
|| exp[0].X_add_number != 0
int
mmix_assemble_return_nonzero (str)
- char *str;
+ char *str;
{
int last_error_count = had_errors ();
char *s2 = str;
register. */
c = get_symbol_end ();
- if (! is_end_of_line [(unsigned char) c])
+ if (! is_end_of_line[(unsigned char) c])
input_line_pointer++;
if (*p)
for (i = 0; i < prec; i++)
{
md_number_to_chars (litP, (valueT) words[i], 2);
- litP += 2;
+ litP += 2;
}
return NULL;
}
segT sec ATTRIBUTE_UNUSED;
fragS *fragP;
{
- /* Pointer to first byte in variable-sized part of the frag. */
+ /* Pointer to first byte in variable-sized part of the frag. */
char *var_partp;
/* Pointer to first opcode byte in frag. */
opcode_address = fragP->fr_address + fragP->fr_fix - 4;
switch (fragP->fr_subtype)
- {
- case ENCODE_RELAX (STATE_GETA, STATE_ZERO):
- case ENCODE_RELAX (STATE_BCC, STATE_ZERO):
- case ENCODE_RELAX (STATE_PUSHJ, STATE_ZERO):
- mmix_set_geta_branch_offset (opcodep, target_address - opcode_address);
- if (linkrelax)
- {
- tmpfixP
- = fix_new (opc_fragP, opcodep - opc_fragP->fr_literal, 4,
- fragP->fr_symbol, fragP->fr_offset, 1,
- BFD_RELOC_MMIX_ADDR19);
- COPY_FR_WHERE_TO_FX (fragP, tmpfixP);
- }
- var_part_size = 0;
- break;
-
- case ENCODE_RELAX (STATE_JMP, STATE_ZERO):
- mmix_set_jmp_offset (opcodep, target_address - opcode_address);
- if (linkrelax)
- {
- tmpfixP
- = fix_new (opc_fragP, opcodep - opc_fragP->fr_literal, 4,
- fragP->fr_symbol, fragP->fr_offset, 1,
- BFD_RELOC_MMIX_ADDR27);
- COPY_FR_WHERE_TO_FX (fragP, tmpfixP);
- }
- var_part_size = 0;
- break;
+ {
+ case ENCODE_RELAX (STATE_GETA, STATE_ZERO):
+ case ENCODE_RELAX (STATE_BCC, STATE_ZERO):
+ case ENCODE_RELAX (STATE_PUSHJ, STATE_ZERO):
+ mmix_set_geta_branch_offset (opcodep, target_address - opcode_address);
+ if (linkrelax)
+ {
+ tmpfixP
+ = fix_new (opc_fragP, opcodep - opc_fragP->fr_literal, 4,
+ fragP->fr_symbol, fragP->fr_offset, 1,
+ BFD_RELOC_MMIX_ADDR19);
+ COPY_FR_WHERE_TO_FX (fragP, tmpfixP);
+ }
+ var_part_size = 0;
+ break;
- case STATE_GREG_DEF:
- if (fragP->tc_frag_data == NULL)
- {
- tmpfixP
- = fix_new (fragP, var_partp - fragP->fr_literal, 8,
- fragP->fr_symbol, fragP->fr_offset, 0, BFD_RELOC_64);
- COPY_FR_WHERE_TO_FX (fragP, tmpfixP);
- mmix_gregs[n_of_cooked_gregs++] = tmpfixP;
- var_part_size = 8;
- }
- else
+ case ENCODE_RELAX (STATE_JMP, STATE_ZERO):
+ mmix_set_jmp_offset (opcodep, target_address - opcode_address);
+ if (linkrelax)
+ {
+ tmpfixP
+ = fix_new (opc_fragP, opcodep - opc_fragP->fr_literal, 4,
+ fragP->fr_symbol, fragP->fr_offset, 1,
+ BFD_RELOC_MMIX_ADDR27);
+ COPY_FR_WHERE_TO_FX (fragP, tmpfixP);
+ }
var_part_size = 0;
- break;
+ break;
+
+ case STATE_GREG_DEF:
+ if (fragP->tc_frag_data == NULL)
+ {
+ tmpfixP
+ = fix_new (fragP, var_partp - fragP->fr_literal, 8,
+ fragP->fr_symbol, fragP->fr_offset, 0, BFD_RELOC_64);
+ COPY_FR_WHERE_TO_FX (fragP, tmpfixP);
+ mmix_gregs[n_of_cooked_gregs++] = tmpfixP;
+ var_part_size = 8;
+ }
+ else
+ var_part_size = 0;
+ break;
#define HANDLE_MAX_RELOC(state, reloc) \
case ENCODE_RELAX (state, STATE_MAX): \
COPY_FR_WHERE_TO_FX (fragP, tmpfixP); \
break
- HANDLE_MAX_RELOC (STATE_GETA, BFD_RELOC_MMIX_GETA);
- HANDLE_MAX_RELOC (STATE_BCC, BFD_RELOC_MMIX_CBRANCH);
- HANDLE_MAX_RELOC (STATE_PUSHJ, BFD_RELOC_MMIX_PUSHJ);
- HANDLE_MAX_RELOC (STATE_JMP, BFD_RELOC_MMIX_JMP);
+ HANDLE_MAX_RELOC (STATE_GETA, BFD_RELOC_MMIX_GETA);
+ HANDLE_MAX_RELOC (STATE_BCC, BFD_RELOC_MMIX_CBRANCH);
+ HANDLE_MAX_RELOC (STATE_PUSHJ, BFD_RELOC_MMIX_PUSHJ);
+ HANDLE_MAX_RELOC (STATE_JMP, BFD_RELOC_MMIX_JMP);
- default:
- BAD_CASE (fragP->fr_subtype);
- break;
- }
+ default:
+ BAD_CASE (fragP->fr_subtype);
+ break;
+ }
fragP->fr_fix += var_part_size;
fragP->fr_var = 0;
struct mmix_symbol_gregs *gregs;
struct mmix_symbol_greg_fixes *fix;
- if (S_IS_DEFINED (addsy)
+ if (S_IS_DEFINED (addsy)
&& !bfd_is_com_section (addsec)
&& !S_IS_WEAK (addsy))
{
buf[0] = val;
return NULL;
}
- /* FALLTHROUGH. */
+ /* FALLTHROUGH. */
/* The others are supposed to be handled by md_apply_fix3.
FIXME: ... which isn't called when -linkrelax. Move over
/* Don't handle empty lines here. */
while (1)
{
- if (*s0 == 0 || is_end_of_line [(unsigned int) *s0])
+ if (*s0 == 0 || is_end_of_line[(unsigned int) *s0])
return;
if (! ISSPACE (*s0))
/* For errors emitted here, the book-keeping is off by one; the
caller is about to bump the counters. Adjust the error messages. */
- if (is_end_of_line [(unsigned int) *s])
+ if (is_end_of_line[(unsigned int) *s])
{
char *name;
unsigned int line;
}
s0 = input_line_pointer;
- /* Skip over label. */
+ /* Skip over label. */
while (*s0 && is_part_of_name (*s0))
s0++;
pending_label[len_0 - 1] = 0;
}
- while (*s0 && ISSPACE (*s0) && ! is_end_of_line [(unsigned int) *s0])
+ while (*s0 && ISSPACE (*s0) && ! is_end_of_line[(unsigned int) *s0])
s0++;
- if (pending_label != NULL && is_end_of_line [(unsigned int) *s0])
+ if (pending_label != NULL && is_end_of_line[(unsigned int) *s0])
/* Whoops, this was actually a lone label on a line. Like :-ended
labels, we don't attach such labels to the next instruction or
pseudo. */
while (*s)
{
c = *s++;
- if (is_end_of_line [(unsigned int) c])
+ if (is_end_of_line[(unsigned int) c])
break;
if (c == MAGIC_FB_BACKWARD_CHAR || c == MAGIC_FB_FORWARD_CHAR)
as_bad (_("invalid characters in input"));
/* FIXME: Test-case for semi-colon in string. */
while (*s
&& *s != '"'
- && (! is_end_of_line [(unsigned int) *s] || *s == ';'))
+ && (! is_end_of_line[(unsigned int) *s] || *s == ';'))
s++;
if (*s == '"')
int
mmix_force_relocation (fixP)
- fixS * fixP;
+ fixS *fixP;
{
if (fixP->fx_r_type == BFD_RELOC_MMIX_LOCAL
|| fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
{
symbolS *symbolP;
char locsymbol[sizeof (":") - 1
- + sizeof (MMIX_LOC_SECTION_START_SYMBOL_PREFIX) - 1
- + sizeof (".data")];
+ + sizeof (MMIX_LOC_SECTION_START_SYMBOL_PREFIX) - 1
+ + sizeof (".data")];
sprintf (locsymbol, ":%s%s", MMIX_LOC_SECTION_START_SYMBOL_PREFIX,
".data");
return 0;
for (i = 0;
- i < sizeof (predefined_abs_syms)/sizeof (predefined_abs_syms[0]);
+ i < sizeof (predefined_abs_syms) / sizeof (predefined_abs_syms[0]);
i++)
if (strcmp (canon_name, predefined_abs_syms[i].name) == 0)
{
symbolS *sym;
offsetT off;
- /* Must not have a BSPEC in progress. */
+ /* Must not have a BSPEC in progress. */
if (doing_bspec)
{
as_bad (_("directive LOC from within a BSPEC/ESPEC pair is not supported"));
SKIP_WHITESPACE ();
- if (is_end_of_line [(unsigned int) *input_line_pointer])
+ if (is_end_of_line[(unsigned int) *input_line_pointer])
{
/* Default to zero if the expression was absent. */
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ 02111-1307, USA. */
#define TC_MMIX
/* Since integer_constant is local to expr.c, we have to make this a
macro. FIXME: Do it cleaner. */
#define md_operand(exp) \
- do { \
- if (input_line_pointer[0] == '#') \
+ do \
{ \
- input_line_pointer++; \
- integer_constant (16, (exp)); \
+ if (input_line_pointer[0] == '#') \
+ { \
+ input_line_pointer++; \
+ integer_constant (16, (exp)); \
+ } \
+ else if (input_line_pointer[0] == '&' \
+ && input_line_pointer[1] != '&') \
+ as_bad (_("`&' serial number operator is not supported")); \
+ else \
+ mmix_fb_label (exp); \
} \
- else if (input_line_pointer[0] == '&' \
- && input_line_pointer[1] != '&') \
- as_bad (_("`&' serial number operator is not supported")); \
- else \
- mmix_fb_label (exp); \
- } while (0)
-
+ while (0)
/* Gas dislikes the 2ADD, 8ADD etc. insns, so we have to assemble them in
the error-recovery loop. Hopefully there are no significant
differences. Also, space on a line isn't gracefully handled. */
-extern int mmix_assemble_return_nonzero PARAMS ((char *));
+extern int mmix_assemble_return_nonzero PARAMS ((char *));
#define tc_unrecognized_line(c) \
((c) == ' ' \
|| (((c) == '1' || (c) == '2' || (c) == '4' || (c) == '8') \
We must avoid doing that for expression symbols or section symbols,
though. */
extern int mmix_globalize_symbols;
-#define tc_frob_symbol(sym, punt) \
- do { \
- if (S_GET_SEGMENT (sym) == reg_section \
- || (symp) == section_symbol (absolute_section)) \
- (punt) = 1; \
- \
- if (mmix_globalize_symbols \
- && ! symbol_section_p (sym) \
- && symp != section_symbol (absolute_section) \
- && (! S_IS_LOCAL (sym) \
- || S_GET_SEGMENT (sym) == reg_section) \
- && (S_GET_SEGMENT (sym) != reg_section \
- || (S_GET_NAME (sym)[0] != '$' \
- && S_GET_VALUE (sym) < 256))) \
- S_SET_EXTERNAL (sym); \
- } while (0)
+#define tc_frob_symbol(sym, punt) \
+ do \
+ { \
+ if (S_GET_SEGMENT (sym) == reg_section \
+ || (symp) == section_symbol (absolute_section)) \
+ (punt) = 1; \
+ \
+ if (mmix_globalize_symbols \
+ && ! symbol_section_p (sym) \
+ && symp != section_symbol (absolute_section) \
+ && (! S_IS_LOCAL (sym) \
+ || S_GET_SEGMENT (sym) == reg_section) \
+ && (S_GET_SEGMENT (sym) != reg_section \
+ || (S_GET_NAME (sym)[0] != '$' \
+ && S_GET_VALUE (sym) < 256))) \
+ S_SET_EXTERNAL (sym); \
+ } \
+ while (0)
/* When relaxing, we need to emit various relocs we otherwise wouldn't. */
#define TC_FORCE_RELOCATION(fix) mmix_force_relocation (fix)