home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / cctools / as / md.h < prev    next >
Text File  |  1993-09-09  |  5KB  |  158 lines

  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);
  158.