Annotation of GNUtools/cctools/as/md.h, revision 1.1.1.1

1.1       root        1: /* md.h -machine dependent- */
                      2: 
                      3: /* Copyright (C) 1987 Free Software Foundation, Inc.
                      4: 
                      5: This file is part of Gas, the GNU Assembler.
                      6: 
                      7: The GNU assembler is distributed in the hope that it will be
                      8: useful, but WITHOUT ANY WARRANTY.  No author or distributor
                      9: accepts responsibility to anyone for the consequences of using it
                     10: or for whether it serves any particular purpose or works at all,
                     11: unless he says so in writing.  Refer to the GNU Assembler General
                     12: Public License for full details.
                     13: 
                     14: Everyone is granted permission to copy, modify and redistribute
                     15: the GNU Assembler, but only under the conditions described in the
                     16: GNU Assembler General Public License.  A copy of this license is
                     17: supposed to have been given to you along with the GNU Assembler
                     18: so you can know your rights and responsibilities.  It should be
                     19: in a file named COPYING.  Among other things, the copyright
                     20: notice and this notice must be preserved on all copies.  */
                     21: 
                     22: #import <mach/machine.h>
                     23: #import "stuff/bytesex.h"
                     24: #import "frags.h"
                     25: #import "relax.h"
                     26: #import "struc-symbol.h"
                     27: #import "fixes.h"
                     28: #import "read.h"
                     29: 
                     30: /* These are the default cputype and cpusubtype for this target MACHINE */
                     31: extern const cpu_type_t md_cputype;
                     32: extern cpu_subtype_t md_cpusubtype;
                     33: 
                     34: /* This is the byte sex for this target MACHINE */
                     35: extern const enum byte_sex md_target_byte_sex;
                     36: 
                     37: /* These characters start a comment anywhere on the line */
                     38: extern const char md_comment_chars[];
                     39: 
                     40: /* These characters only start a comment at the beginning of a line */
                     41: extern const char md_line_comment_chars[];
                     42: 
                     43: /*
                     44:  * These characters can be used to separate mantissa decimal digits from 
                     45:  * exponent decimal digits in floating point numbers.
                     46:  */
                     47: extern const char md_EXP_CHARS[];
                     48: 
                     49: /*
                     50:  * The characters after a leading 0 that means this number is a floating point
                     51:  * constant as in 0f123.456 or 0d1.234E-12 (the characters 'f' and 'd' in these
                     52:  * case).
                     53:  */
                     54: extern const char md_FLT_CHARS[];
                     55: 
                     56: /*
                     57:  * This is the machine dependent pseudo opcode table for this target MACHINE.
                     58:  */
                     59: extern const pseudo_typeS md_pseudo_table[];
                     60: 
                     61: /*
                     62:  * This is the machine dependent table that is used to drive the span dependent
                     63:  * branch algorithm in relax_section() in layout.c.  See the comments in relax.h
                     64:  * on how this table is used.  For machines with all instructions of the same
                     65:  * size (RISC machines) this this table is just a zero filled element and not
                     66:  * used.
                     67:  */
                     68: extern const relax_typeS md_relax_table[];
                     69: 
                     70: /*
                     71:  * md_parse_option() is called from main() in as.c to parse target machine
                     72:  * dependent command line options.  This routine returns 0 if it is passed an
                     73:  * option that is not recognized non-zero otherwise.
                     74:  */
                     75: extern int md_parse_option(
                     76:     char **argP,
                     77:     int *cntP,
                     78:     char ***vecP);
                     79: 
                     80: /*
                     81:  * md_begin() is called from main() in as.c before assembly begins.  It is used
                     82:  * to allow target machine dependent initialization.
                     83:  */
                     84: extern void md_begin(
                     85:     void);
                     86: 
                     87: /*
                     88:  * md_end() is called from main() in as.c after assembly ends.  It is used
                     89:  * to allow target machine dependent clean up.
                     90:  */
                     91: extern void md_end(
                     92:     void);
                     93: 
                     94: /*
                     95:  * md_assemble() is passed a pointer to a string that should be a assembly
                     96:  * statement for the target machine.  This routine assembles the string into
                     97:  * a machine instruction.
                     98:  */
                     99: extern void md_assemble(
                    100:     char *str);
                    101: 
                    102: /*
                    103:  * md_atof() turns a string pointed to by input_line_pointer into a floating
                    104:  * point constant of type type, and store the appropriate bytes in *litP.
                    105:  * The number of LITTLENUMS emitted is stored indirectly through *sizeP.
                    106:  * An error message is returned, or a string containg only a '\0' for OK.
                    107:  */
                    108: extern char *md_atof(
                    109:     int type,
                    110:     char *litP,
                    111:     int *sizeP);
                    112: 
                    113: /*
                    114:  * md_number_to_chars() is the target machine dependent routine that puts out
                    115:  * a binary value of size 4, 2, or 1 bytes into the specified buffer.  This is
                    116:  * done in the target machine's byte sex.
                    117:  */
                    118: extern void md_number_to_chars(
                    119:     char *buf,
                    120:     long val,
                    121:     int n);
                    122: 
                    123: /*
                    124:  * md_number_to_imm() is the target machine dependent routine that puts out
                    125:  * a binary value of size 4, 2, or 1 bytes into the specified buffer with
                    126:  * reguard to a possible relocation entry (the fixP->fx_r_type field in the fixS
                    127:  * structure pointed to by fixP) for the section with the ordinal nsect.  This
                    128:  * is done in the target machine's byte sex using it's relocation types.
                    129:  */
                    130: extern void md_number_to_imm(
                    131:     unsigned char *buf,
                    132:     long val,
                    133:     int n,
                    134:     fixS *fixP,
                    135:     int nsect);
                    136: 
                    137: /*
                    138:  * md_estimate_size_before_relax() is called as part of the algorithm in
                    139:  * relax_section() in layout.c that drives the span dependent branch algorithm.
                    140:  * It is called once for each machine dependent frag to allow things like
                    141:  * braches to undefined symbols to be "relaxed" to their maximum size.
                    142:  * For machines with all instructions of the same size (RISC machines) this
                    143:  * won't ever be called.
                    144:  */
                    145: extern int md_estimate_size_before_relax(
                    146:     fragS *fragP,
                    147:     int nsect);
                    148: 
                    149: /*
                    150:  * md_convert_frag() is called on each machine dependent frag after the span
                    151:  * dependent branch algorithm has been run to determine the sizes and addresses
                    152:  * of all the fragments.  This routine is to put the bytes inside the fragment
                    153:  * and make it conform to the "relaxed" final size.  For machines with all
                    154:  * instructions of the same size (RISC machines) this won't ever be called.
                    155:  */
                    156: extern void md_convert_frag(
                    157:     fragS *fragP);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.