home *** CD-ROM | disk | FTP | other *** search
- /* md.h -machine dependent- */
-
- /* Copyright (C) 1987 Free Software Foundation, Inc.
-
- This file is part of Gas, the GNU Assembler.
-
- The GNU assembler is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY. No author or distributor
- accepts responsibility to anyone for the consequences of using it
- or for whether it serves any particular purpose or works at all,
- unless he says so in writing. Refer to the GNU Assembler General
- Public License for full details.
-
- Everyone is granted permission to copy, modify and redistribute
- the GNU Assembler, but only under the conditions described in the
- GNU Assembler General Public License. A copy of this license is
- supposed to have been given to you along with the GNU Assembler
- so you can know your rights and responsibilities. It should be
- in a file named COPYING. Among other things, the copyright
- notice and this notice must be preserved on all copies. */
-
- #import <mach/machine.h>
- #import "stuff/bytesex.h"
- #import "frags.h"
- #import "relax.h"
- #import "struc-symbol.h"
- #import "fixes.h"
- #import "read.h"
-
- /* These are the default cputype and cpusubtype for this target MACHINE */
- extern const cpu_type_t md_cputype;
- extern cpu_subtype_t md_cpusubtype;
-
- /* This is the byte sex for this target MACHINE */
- extern const enum byte_sex md_target_byte_sex;
-
- /* These characters start a comment anywhere on the line */
- extern const char md_comment_chars[];
-
- /* These characters only start a comment at the beginning of a line */
- extern const char md_line_comment_chars[];
-
- /*
- * These characters can be used to separate mantissa decimal digits from
- * exponent decimal digits in floating point numbers.
- */
- extern const char md_EXP_CHARS[];
-
- /*
- * The characters after a leading 0 that means this number is a floating point
- * constant as in 0f123.456 or 0d1.234E-12 (the characters 'f' and 'd' in these
- * case).
- */
- extern const char md_FLT_CHARS[];
-
- /*
- * This is the machine dependent pseudo opcode table for this target MACHINE.
- */
- extern const pseudo_typeS md_pseudo_table[];
-
- /*
- * This is the machine dependent table that is used to drive the span dependent
- * branch algorithm in relax_section() in layout.c. See the comments in relax.h
- * on how this table is used. For machines with all instructions of the same
- * size (RISC machines) this this table is just a zero filled element and not
- * used.
- */
- extern const relax_typeS md_relax_table[];
-
- /*
- * md_parse_option() is called from main() in as.c to parse target machine
- * dependent command line options. This routine returns 0 if it is passed an
- * option that is not recognized non-zero otherwise.
- */
- extern int md_parse_option(
- char **argP,
- int *cntP,
- char ***vecP);
-
- /*
- * md_begin() is called from main() in as.c before assembly begins. It is used
- * to allow target machine dependent initialization.
- */
- extern void md_begin(
- void);
-
- /*
- * md_end() is called from main() in as.c after assembly ends. It is used
- * to allow target machine dependent clean up.
- */
- extern void md_end(
- void);
-
- /*
- * md_assemble() is passed a pointer to a string that should be a assembly
- * statement for the target machine. This routine assembles the string into
- * a machine instruction.
- */
- extern void md_assemble(
- char *str);
-
- /*
- * md_atof() turns a string pointed to by input_line_pointer into a floating
- * point constant of type type, and store the appropriate bytes in *litP.
- * The number of LITTLENUMS emitted is stored indirectly through *sizeP.
- * An error message is returned, or a string containg only a '\0' for OK.
- */
- extern char *md_atof(
- int type,
- char *litP,
- int *sizeP);
-
- /*
- * md_number_to_chars() is the target machine dependent routine that puts out
- * a binary value of size 4, 2, or 1 bytes into the specified buffer. This is
- * done in the target machine's byte sex.
- */
- extern void md_number_to_chars(
- char *buf,
- long val,
- int n);
-
- /*
- * md_number_to_imm() is the target machine dependent routine that puts out
- * a binary value of size 4, 2, or 1 bytes into the specified buffer with
- * reguard to a possible relocation entry (the fixP->fx_r_type field in the fixS
- * structure pointed to by fixP) for the section with the ordinal nsect. This
- * is done in the target machine's byte sex using it's relocation types.
- */
- extern void md_number_to_imm(
- unsigned char *buf,
- long val,
- int n,
- fixS *fixP,
- int nsect);
-
- /*
- * md_estimate_size_before_relax() is called as part of the algorithm in
- * relax_section() in layout.c that drives the span dependent branch algorithm.
- * It is called once for each machine dependent frag to allow things like
- * braches to undefined symbols to be "relaxed" to their maximum size.
- * For machines with all instructions of the same size (RISC machines) this
- * won't ever be called.
- */
- extern int md_estimate_size_before_relax(
- fragS *fragP,
- int nsect);
-
- /*
- * md_convert_frag() is called on each machine dependent frag after the span
- * dependent branch algorithm has been run to determine the sizes and addresses
- * of all the fragments. This routine is to put the bytes inside the fragment
- * and make it conform to the "relaxed" final size. For machines with all
- * instructions of the same size (RISC machines) this won't ever be called.
- */
- extern void md_convert_frag(
- fragS *fragP);
-