A bunch of changes to COFF support. See the ChangeLog.
[deliverable/binutils-gdb.git] / gas / config / tc-vax.c
index 11095c69076a0f6d1b009c4f444fac84c9ef7de6..3d76647c5b933047f24022c0ebb87a94f4b53948 100644 (file)
@@ -1,23 +1,21 @@
-/* vax.c - vax-specific -
-   Copyright (C) 1987, 1991 Free Software Foundation, Inc.
+/* tc-vax.c - vax-specific -
+   Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
 
-This file is part of GAS, the GNU Assembler.
+   This file is part of GAS, the GNU Assembler.
 
-GAS is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
+   GAS is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
-GAS is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GAS is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* $Id$ */
+   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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* JF I moved almost all the vax specific stuff into this one file 'cuz RMS
    seems to think its a good idea.  I hope I managed to get all the VAX-isms */
@@ -25,13 +23,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "as.h"
 
-#include "read.h"
-#include "flonum.h"
 #include "vax-inst.h"
 #include "obstack.h"           /* For FRAG_APPEND_1_CHAR macro in "frags.h" */
-#include "frags.h"
-#include "expr.h"
-#include "symbols.h"
 
 /* These chars start a comment anywhere in a source file (except inside
    another comment */
@@ -41,6 +34,8 @@ const char comment_chars[] = "#";
 /* Note that for the VAX the are the same as comment_chars above. */
 const char line_comment_chars[] = "#";
 
+const char line_separator_chars[] = "";
+
 /* Chars that can be used to separate mant from exp in floating point nums */
 const char EXP_CHARS[] = "eE";
 
@@ -52,19 +47,19 @@ const char FLT_CHARS[] = "dDfFgGhH";
 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
    changed in read.c .  Ideally it shouldn't have to know about it at all,
    but nothing is ideal around here.
- */
  */
 
 static expressionS             /* Hold details of an operand expression */
- exp_of_operand[VIT_MAX_OPERANDS];
 exp_of_operand[VIT_MAX_OPERANDS];
 
 static struct vit
v;                            /* A vax instruction after decoding. */
 v;                           /* A vax instruction after decoding. */
 
 LITTLENUM_TYPE big_operand_bits[VIT_MAX_OPERANDS][SIZE_OF_LARGE_NUMBER];
- /* Hold details of big operands. */
+/* Hold details of big operands. */
 FLONUM_TYPE float_operand[VIT_MAX_OPERANDS];
- /* Above is made to point into */
- /* big_operand_bits by md_begin(). */
+/* Above is made to point into */
+/* big_operand_bits by md_begin(). */
 \f
 /*
  * For VAX, relative addresses of "just the right length" are easy.
@@ -84,184 +79,138 @@ FLONUM_TYPE float_operand[VIT_MAX_OPERANDS];
  * The address usually has some constant bytes in it as well.
  *
 
-groups for VAX address relaxing.
-
-1.     "foo" pc-relative.
      length of byte, word, long
-
-2a.    J<cond> where <cond> is a simple flag test.
      length of byte, word, long.
      VAX opcodes are:        (Hex)
              bneq/bnequ      12
              beql/beqlu      13
              bgtr            14
              bleq            15
              bgeq            18
              blss            19
              bgtru           1a
              blequ           1b
              bvc             1c
              bvs             1d
              bgequ/bcc       1e
              blssu/bcs       1f
      Always, you complement 0th bit to reverse condition.
      Always, 1-byte opcode, then 1-byte displacement.
-
-2b.    J<cond> where cond tests a memory bit.
      length of byte, word, long.
      Vax opcodes are:        (Hex)
              bbs             e0
              bbc             e1
              bbss            e2
              bbcs            e3
              bbsc            e4
              bbcc            e5
              bbssi           e6
              bbcci           e7
      Always, you complement 0th bit to reverse condition.
      Always, 1-byte opcde, longword-address, byte-address, 1-byte-displacement
-
-2c.    J<cond> where cond tests low-order memory bit
      length of byte,word,long.
      Vax opcodes are:        (Hex)
              blbs            e8
              blbc            e9
      Always, you complement 0th bit to reverse condition.
      Always, 1-byte opcode, longword-address, 1-byte displacement.
-
-3.     Jbs/Jbr.
      length of byte,word,long.
      Vax opcodes are:        (Hex)
              bsbb            10
              brb             11
      These are like (2) but there is no condition to reverse.
      Always, 1 byte opcode, then displacement/absolute.
-
-4a.    JacbX
      length of word, long.
      Vax opcodes are:        (Hex)
              acbw            3d
              acbf            4f
              acbd            6f
              abcb            9d
              acbl            f1
              acbg          4ffd
              acbh          6ffd
      Always, we cannot reverse the sense of the branch; we have a word
      displacement.
      The double-byte op-codes don't hurt: we never want to modify the
      opcode, so we don't care how many bytes are between the opcode and
      the operand.
-
-4b.    JXobXXX
      length of long, long, byte.
      Vax opcodes are:        (Hex)
              aoblss          f2
              aobleq          f3
              sobgeq          f4
              sobgtr          f5
      Always, we cannot reverse the sense of the branch; we have a byte
      displacement.
-
-The only time we need to modify the opcode is for class 2 instructions.
-After relax() we may complement the lowest order bit of such instruction
-to reverse sense of branch.
-
-For class 2 instructions, we store context of "where is the opcode literal".
-We can change an opcode's lowest order bit without breaking anything else.
-
-We sometimes store context in the operand literal. This way we can figure out
-after relax() what the original addressing mode was.
-*/
+ groups for VAX address relaxing.
+
+ 1.    "foo" pc-relative.
+ length of byte, word, long
+
+ 2a.   J<cond> where <cond> is a simple flag test.
+ length of byte, word, long.
VAX opcodes are:      (Hex)
bneq/bnequ    12
beql/beqlu    13
bgtr          14
bleq          15
bgeq          18
blss          19
bgtru         1a
blequ         1b
bvc           1c
bvs           1d
bgequ/bcc     1e
blssu/bcs     1f
+ Always, you complement 0th bit to reverse condition.
+ Always, 1-byte opcode, then 1-byte displacement.
+
+ 2b.   J<cond> where cond tests a memory bit.
+ length of byte, word, long.
Vax opcodes are:      (Hex)
bbs           e0
bbc           e1
bbss          e2
bbcs          e3
bbsc          e4
bbcc          e5
bbssi         e6
bbcci         e7
+ Always, you complement 0th bit to reverse condition.
+ Always, 1-byte opcde, longword-address, byte-address, 1-byte-displacement
+
+ 2c.   J<cond> where cond tests low-order memory bit
+ length of byte,word,long.
Vax opcodes are:      (Hex)
blbs          e8
blbc          e9
+ Always, you complement 0th bit to reverse condition.
+ Always, 1-byte opcode, longword-address, 1-byte displacement.
+
+ 3.    Jbs/Jbr.
+ length of byte,word,long.
Vax opcodes are:      (Hex)
bsbb          10
brb           11
+ These are like (2) but there is no condition to reverse.
+ Always, 1 byte opcode, then displacement/absolute.
+
+ 4a.   JacbX
+ length of word, long.
Vax opcodes are:      (Hex)
acbw          3d
acbf          4f
acbd          6f
abcb          9d
acbl          f1
acbg        4ffd
acbh        6ffd
+ Always, we cannot reverse the sense of the branch; we have a word
+ displacement.
+ The double-byte op-codes don't hurt: we never want to modify the
+ opcode, so we don't care how many bytes are between the opcode and
+ the operand.
+
+ 4b.   JXobXXX
+ length of long, long, byte.
Vax opcodes are:      (Hex)
aoblss                f2
aobleq                f3
sobgeq                f4
sobgtr                f5
+ Always, we cannot reverse the sense of the branch; we have a byte
+ displacement.
+
+ The only time we need to modify the opcode is for class 2 instructions.
+ After relax() we may complement the lowest order bit of such instruction
+ to reverse sense of branch.
+
+ For class 2 instructions, we store context of "where is the opcode literal".
+ We can change an opcode's lowest order bit without breaking anything else.
+
+ We sometimes store context in the operand literal. This way we can figure out
+ after relax() what the original addressing mode was.
+ */
 \f
- /* These displacements are relative to */
- /* the start address of the displacement. */
- /* The first letter is Byte, Word. */
- /* 2nd letter is Forward, Backward. */
+/* These displacements are relative to */
+/* the start address of the displacement. */
+/* The first letter is Byte, Word. */
+/* 2nd letter is Forward, Backward. */
 #define BF (1+ 127)
 #define BB (1+-128)
 #define WF (2+ 32767)
 #define WB (2+-32768)
- /* Dont need LF, LB because they always */
- /* reach. [They are coded as 0.] */
+/* Dont need LF, LB because they always */
+/* reach. [They are coded as 0.] */
 
 
 #define C(a,b) ENCODE_RELAX(a,b)
- /* This macro has no side-effects. */
+/* This macro has no side-effects. */
 #define ENCODE_RELAX(what,length) (((what) << 2) + (length))
 
 const relax_typeS
-md_relax_table[] =
+  md_relax_table[] =
 {
-  {
-    1, 1, 0, 0
-  },                           /* error sentinel   0,0 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           0,1 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           0,2 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           0,3 */
-  {
-    BF + 1, BB + 1, 2, C (1, 1)
-  },                           /* B^"foo"          1,0 */
-  {
-    WF + 1, WB + 1, 3, C (1, 2)
-  },                           /* W^"foo"          1,1 */
-  {
-    0, 0, 5, 0
-  },                           /* L^"foo"          1,2 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           1,3 */
-  {
-    BF, BB, 1, C (2, 1)
-  },                           /* b<cond> B^"foo"  2,0 */
-  {
-    WF + 2, WB + 2, 4, C (2, 2)
-  },                           /* br.+? brw X      2,1 */
-  {
-    0, 0, 7, 0
-  },                           /* br.+? jmp X      2,2 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           2,3 */
-  {
-    BF, BB, 1, C (3, 1)
-  },                           /* brb B^foo        3,0 */
-  {
-    WF, WB, 2, C (3, 2)
-  },                           /* brw W^foo        3,1 */
-  {
-    0, 0, 5, 0
-  },                           /* Jmp L^foo        3,2 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           3,3 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           4,0 */
-  {
-    WF, WB, 2, C (4, 2)
-  },                           /* acb_ ^Wfoo       4,1 */
-  {
-    0, 0, 10, 0
-  },                           /* acb_,br,jmp L^foo4,2 */
-  {
-    1, 1, 0, 0
-  },                           /* unused           4,3 */
-  {
-    BF, BB, 1, C (5, 1)
-  },                           /* Xob___,,foo      5,0 */
-  {
-    WF + 4, WB + 4, 6, C (5, 2)
-  },                           /* Xob.+2,brb.+3,brw5,1 */
-  {
-    0, 0, 9, 0
-  },                           /* Xob.+2,brb.+6,jmp5,2 */
+  {1, 1, 0, 0},                        /* error sentinel   0,0 */
+  {1, 1, 0, 0},                        /* unused           0,1 */
+  {1, 1, 0, 0},                        /* unused           0,2 */
+  {1, 1, 0, 0},                        /* unused           0,3 */
+  {BF + 1, BB + 1, 2, C (1, 1)},/* B^"foo"         1,0 */
+  {WF + 1, WB + 1, 3, C (1, 2)},/* W^"foo"         1,1 */
+  {0, 0, 5, 0},                        /* L^"foo"          1,2 */
+  {1, 1, 0, 0},                        /* unused           1,3 */
+  {BF, BB, 1, C (2, 1)},       /* b<cond> B^"foo"  2,0 */
+  {WF + 2, WB + 2, 4, C (2, 2)},/* br.+? brw X     2,1 */
+  {0, 0, 7, 0},                        /* br.+? jmp X      2,2 */
+  {1, 1, 0, 0},                        /* unused           2,3 */
+  {BF, BB, 1, C (3, 1)},       /* brb B^foo        3,0 */
+  {WF, WB, 2, C (3, 2)},       /* brw W^foo        3,1 */
+  {0, 0, 5, 0},                        /* Jmp L^foo        3,2 */
+  {1, 1, 0, 0},                        /* unused           3,3 */
+  {1, 1, 0, 0},                        /* unused           4,0 */
+  {WF, WB, 2, C (4, 2)},       /* acb_ ^Wfoo       4,1 */
+  {0, 0, 10, 0},               /* acb_,br,jmp L^foo4,2 */
+  {1, 1, 0, 0},                        /* unused           4,3 */
+  {BF, BB, 1, C (5, 1)},       /* Xob___,,foo      5,0 */
+  {WF + 4, WB + 4, 6, C (5, 2)},/* Xob.+2,brb.+3,brw5,1 */
+  {0, 0, 9, 0},                        /* Xob.+2,brb.+6,jmp5,2 */
 };
 
 #undef C
@@ -278,7 +227,7 @@ const pseudo_typeS md_pseudo_table[] =
   {"ffloat", float_cons, 'f'},
   {"gfloat", float_cons, 'g'},
   {"hfloat", float_cons, 'h'},
-  {0}
+  {0},
 };
 
 #define STATE_PC_RELATIVE              (1)
@@ -294,7 +243,20 @@ const pseudo_typeS md_pseudo_table[] =
 
 
 #define min(a, b)      ((a) < (b) ? (a) : (b))
-\f
+
+#if __STDC__ == 1
+
+int flonum_gen2vax (char format_letter, FLONUM_TYPE * f, LITTLENUM_TYPE * words);
+static void vip_end (void);
+static void vip_op_defaults (char *immediate, char *indirect, char *displen);
+
+#else /* not __STDC__ */
+
+int flonum_gen2vax ();
+static void vip_end ();
+static void vip_op_defaults ();
+
+#endif /* not __STDC__ */
 
 void
 md_begin ()
@@ -304,9 +266,9 @@ md_begin ()
   FLONUM_TYPE *fP;
   int i;
 
-  if (*(errtxt = vip_begin (TRUE, "$", "*", "`")))
+  if (*(errtxt = vip_begin (1, "$", "*", "`")))
     {
-      as_fatal("VIP_BEGIN error:%s", errtxt);
+      as_fatal ("VIP_BEGIN error:%s", errtxt);
     }
 
   for (i = 0, fP = float_operand;
@@ -342,19 +304,19 @@ md_number_to_chars (con, value, nbytes)
     }
   /* XXX line number probably botched for this warning message. */
   if (value != 0 && value != -1)
-    as_bad("Displacement (%ld) long for instruction field length (%d).", v, n);
+    as_bad ("Displacement (%ld) long for instruction field length (%d).", v, n);
 }
 
 /* Fix up some data or instructions after we find out the value of a symbol
    that they reference.  */
 
 void                           /* Knows about order of bytes in address. */
-md_apply_fix(fixP, value)
+md_apply_fix (fixP, value)
      fixS *fixP;               /* Fixup struct pointer */
      long value;               /* The value of the bits. */
 {
   char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
-  int nbytes;          /* Number of bytes in the output. */
+  int nbytes;                  /* Number of bytes in the output. */
 
   nbytes = fixP->fx_size;
   while (nbytes--)
@@ -364,7 +326,7 @@ md_apply_fix(fixP, value)
     }
 }
 
-long                   /* Knows about the byte order in a word. */
+long                           /* Knows about the byte order in a word. */
 md_chars_to_number (con, nbytes)
      unsigned char con[];      /* Low order byte 1st. */
      int nbytes;               /* Number of bytes in the input. */
@@ -384,12 +346,18 @@ void
 md_assemble (instruction_string)
      char *instruction_string; /* A string: assemble 1 instruction. */
 {
+  /* We saw no errors in any operands - try to make frag(s) */
+  int is_undefined;            /* 1 if operand expression's */
+  /* segment not known yet. */
+  int length_code;
+
   char *p;
   register struct vop *operandP;/* An operand. Scans all operands. */
   char *save_input_line_pointer;
   char c_save;                 /* What used to live after an expression. */
-  struct frag *fragP;          /* Fragment of code we just made. */
-  register int goofed;         /* TRUE: instruction_string bad for all passes. */
+  /* fixme: unused? */
+  /*   struct frag *fragP; *//* Fragment of code we just made. */
+  register int goofed;         /* 1: instruction_string bad for all passes. */
   register struct vop *end_operandP;   /* -> slot just after last operand */
   /* Limit of the for (each operand). */
   register expressionS *expP;  /* -> expression values for this operand */
@@ -404,7 +372,8 @@ md_assemble (instruction_string)
   char *opcode_as_chars;       /* Least significant byte 1st. */
   /* As an array of characters. */
   char *opcode_low_byteP;      /* Least significant byte 1st */
-  struct details *detP;                /* The details of an ADxxx frag. */
+  /* richfix: unused? */
+  /*   struct details *detP; *//* The details of an ADxxx frag. */
   int length;                  /* length (bytes) meant by vop_short. */
   int at;                      /* 0, or 1 if '@' is in addressing mode. */
   int nbytes;                  /* From vop_nbytes: vax_operand_width (in bytes) */
@@ -415,12 +384,12 @@ md_assemble (instruction_string)
 
   if (*(p = vip (&v, instruction_string)))
     {
-      as_fatal("vax_assemble\"%s\" in=\"%s\"", p, instruction_string);
+      as_fatal ("vax_assemble\"%s\" in=\"%s\"", p, instruction_string);
     }
   /*
    * Now we try to find as many as_warn()s as we can. If we do any as_warn()s
-   * then goofed=TRUE. Notice that we don't make any frags yet.
-   * Should goofed be TRUE, then this instruction will wedge in any pass,
+   * then goofed=1. Notice that we don't make any frags yet.
+   * Should goofed be 1, then this instruction will wedge in any pass,
    * and we can safely flush it, without causing interpass symbol phase
    * errors. That is, without changing label values in different passes.
    */
@@ -440,34 +409,33 @@ md_assemble (instruction_string)
 
        operandP < end_operandP;
 
-       operandP++,
-       expP++,
-       floatP++
-    )                          /* for each operand */
-    {
+       operandP++, expP++, floatP++)
+    {                          /* for each operand */
       if (*(operandP->vop_error))
        {
          as_warn ("Ignoring statement because \"%s\"", (operandP->vop_error));
-         goofed = TRUE;
+         goofed = 1;
        }
       else
-       {                       /* statement has no syntax goofs: lets sniff the expression */
-         int can_be_short;     /* TRUE if a bignum can be reduced to a short literal. */
+       {
+         /* statement has no syntax goofs: lets sniff the expression */
+         int can_be_short = 0; /* 1 if a bignum can be reduced to a short literal. */
 
          input_line_pointer = operandP->vop_expr_begin;
          c_save = operandP->vop_expr_end[1];
          operandP->vop_expr_end[1] = '\0';
-         /* If to_seg == SEG_PASS1, expression() will have set need_pass_2 = TRUE. */
+         /* If to_seg == SEG_PASS1, expression() will have set need_pass_2 = 1. */
          switch (to_seg = expression (expP))
            {
            case SEG_ABSENT:
              /* for BSD4.2 compatibility, missing expression is absolute 0 */
              to_seg = expP->X_seg = SEG_ABSOLUTE;
              expP->X_add_number = 0;
-             /* for SEG_ABSOLUTE, we shouldnt need to set X_subtract_symbol, X_add_symbol to any particular value. */
-             /* But, we will program defensively. Since this situation occurs */
-             /* rarely so it costs us little to do, and stops Dean */
-             /* worrying about the origin of random bits in expressionS's. */
+             /* For SEG_ABSOLUTE, we shouldn't need to set X_subtract_symbol,
+                X_add_symbol to any particular value.  But, we will program
+                defensively. Since this situation occurs rarely so it costs
+                us little to do, and stops Dean worrying about the origin of
+                random bits in expressionS's.  */
              expP->X_add_symbol = NULL;
              expP->X_subtract_symbol = NULL;
            case SEG_TEXT:
@@ -492,8 +460,8 @@ md_assemble (instruction_string)
               * .words after a CASE opcode, and was never intended for
               * instruction operands.
               */
-             need_pass_2 = TRUE;
-             as_warn("Can't relocate expression");
+             need_pass_2 = 1;
+             as_warn ("Can't relocate expression");
              break;
 
            case SEG_BIG:
@@ -536,15 +504,14 @@ md_assemble (instruction_string)
                          break;
 
                        case 'h':
-                         can_be_short =
-                           (literal_float[0] & 0xFFF8) == 0x4000
-                           && (literal_float[1] & 0xE000) == 0
-                           && literal_float[2] == 0
-                           && literal_float[3] == 0
-                           && literal_float[4] == 0
-                           && literal_float[5] == 0
-                           && literal_float[6] == 0
-                           && literal_float[7] == 0;
+                         can_be_short = ((literal_float[0] & 0xFFF8) == 0x4000
+                                         && (literal_float[1] & 0xE000) == 0
+                                         && literal_float[2] == 0
+                                         && literal_float[3] == 0
+                                         && literal_float[4] == 0
+                                         && literal_float[5] == 0
+                                         && literal_float[6] == 0
+                                         && literal_float[7] == 0);
                          break;
 
                        default:
@@ -610,7 +577,7 @@ md_assemble (instruction_string)
                            }
                          else
                            {   /* Encode short literal now. */
-                             register int temp;
+                             int temp = 0;
 
                              switch (-expP->X_add_number)
                                {
@@ -642,7 +609,7 @@ md_assemble (instruction_string)
                    {           /* I^# seen: set it up if float. */
                      if (expP->X_add_number < 0)
                        {
-                         bcopy (literal_float, floatP->low, sizeof (literal_float));
+                         memcpy (floatP->low, literal_float, sizeof (literal_float));
                        }
                    }           /* if S^# seen. */
                }
@@ -654,17 +621,17 @@ md_assemble (instruction_string)
                }
              expP->X_add_number = floatP->low[0]
                | ((LITTLENUM_MASK & (floatP->low[1])) << LITTLENUM_NUMBER_OF_BITS);
-/*
- * For the SEG_BIG case we have:
- * If vop_short == 's' then a short floating literal is in the
*     lowest 6 bits of floatP -> low [0], which is
*     big_operand_bits [---] [0].
- * If vop_short == 'i' then the appropriate number of elements
*     of big_operand_bits [---] [...] are set up with the correct
*     bits.
- * Also, just in case width is byte word or long, we copy the lowest
- * 32 bits of the number to X_add_number.
- */
+             /*
                               * For the SEG_BIG case we have:
                               * If vop_short == 's' then a short floating literal is in the
                               *      lowest 6 bits of floatP -> low [0], which is
                               *      big_operand_bits [---] [0].
                               * If vop_short == 'i' then the appropriate number of elements
                               *      of big_operand_bits [---] [...] are set up with the correct
                               *      bits.
                               * Also, just in case width is byte word or long, we copy the lowest
                               * 32 bits of the number to X_add_number.
                               */
              break;
 
            default:
@@ -674,516 +641,528 @@ md_assemble (instruction_string)
          if (input_line_pointer != operandP->vop_expr_end + 1)
            {
              as_warn ("Junk at end of expression \"%s\"", input_line_pointer);
-             goofed = TRUE;
+             goofed = 1;
            }
          operandP->vop_expr_end[1] = c_save;
        }
     }                          /* for(each operand) */
+
   input_line_pointer = save_input_line_pointer;
 
-  if (!need_pass_2 && !goofed)
+  if (need_pass_2 || goofed)
     {
-      /* We saw no errors in any operands - try to make frag(s) */
-      int is_undefined;                /* True if operand expression's */
-      /* segment not known yet. */
-      int length_code;
-
-      /* Emit op-code. */
-      /* Remember where it is, in case we want to modify the op-code later. */
-      opcode_low_byteP = frag_more (v.vit_opcode_nbytes);
-      bcopy (v.vit_opcode, opcode_low_byteP, v.vit_opcode_nbytes);
-      opcode_as_number = md_chars_to_number (opcode_as_chars = v.vit_opcode, 4);
-      for (operandP = v.vit_operand,
-          expP = exp_of_operand,
-          floatP = float_operand,
-          end_operandP = v.vit_operand + v.vit_operands;
-
-          operandP < end_operandP;
-
-          operandP++,
-          floatP++,
-          expP++
-       )                       /* for each operand */
+      return;
+    }
+
+
+  /* Emit op-code. */
+  /* Remember where it is, in case we want to modify the op-code later. */
+  opcode_low_byteP = frag_more (v.vit_opcode_nbytes);
+  memcpy (opcode_low_byteP, v.vit_opcode, v.vit_opcode_nbytes);
+  opcode_as_number = md_chars_to_number (opcode_as_chars = v.vit_opcode, 4);
+  for (operandP = v.vit_operand,
+       expP = exp_of_operand,
+       floatP = float_operand,
+       end_operandP = v.vit_operand + v.vit_operands;
+
+       operandP < end_operandP;
+
+       operandP++,
+       floatP++,
+       expP++)
+    {                          /* for each operand */
+      if (operandP->vop_ndx >= 0)
        {
-         if (operandP->vop_ndx >= 0)
-           {
-             /* indexed addressing byte */
-             /* Legality of indexed mode already checked: it is OK */
-             FRAG_APPEND_1_CHAR (0x40 + operandP->vop_ndx);
-           }                   /* if(vop_ndx>=0) */
-
-         /* Here to make main operand frag(s). */
-         this_add_number = expP->X_add_number;
-         this_add_symbol = expP->X_add_symbol;
-         this_subtract_symbol = expP->X_subtract_symbol;
-         to_seg = expP->X_seg;
-         is_undefined = (to_seg == SEG_UNKNOWN);
-         know (to_seg == SEG_UNKNOWN
-               ||to_seg == SEG_ABSOLUTE
-               ||to_seg == SEG_DATA
-               ||to_seg == SEG_TEXT
-               ||to_seg == SEG_BSS
-               ||to_seg == SEG_BIG
-           );
-         at = operandP->vop_mode & 1;
-         length = operandP->vop_short == 'b' ? 1 : operandP->vop_short == 'w' ? 2 : operandP->vop_short == 'l' ? 4 : 0;
-         nbytes = operandP->vop_nbytes;
-         if (operandP->vop_access == 'b')
+         /* indexed addressing byte */
+         /* Legality of indexed mode already checked: it is OK */
+         FRAG_APPEND_1_CHAR (0x40 + operandP->vop_ndx);
+       }                       /* if(vop_ndx>=0) */
+
+      /* Here to make main operand frag(s). */
+      this_add_number = expP->X_add_number;
+      this_add_symbol = expP->X_add_symbol;
+      this_subtract_symbol = expP->X_subtract_symbol;
+      to_seg = expP->X_seg;
+      is_undefined = (to_seg == SEG_UNKNOWN);
+      know (to_seg == SEG_UNKNOWN
+           || to_seg == SEG_ABSOLUTE
+           || to_seg == SEG_DATA
+           || to_seg == SEG_TEXT
+           || to_seg == SEG_BSS
+           || to_seg == SEG_BIG);
+      at = operandP->vop_mode & 1;
+      length = (operandP->vop_short == 'b'
+               ? 1 : (operandP->vop_short == 'w'
+                      ? 2 : (operandP->vop_short == 'l'
+                             ? 4 : 0)));
+      nbytes = operandP->vop_nbytes;
+      if (operandP->vop_access == 'b')
+       {
+         if (to_seg == now_seg || is_undefined)
            {
-             if (to_seg == now_seg || is_undefined)
-               {               /* If is_undefined, then it might BECOME now_seg. */
+             /* If is_undefined, then it might BECOME now_seg. */
+             if (nbytes)
+               {
+                 p = frag_more (nbytes);
+                 fix_new (frag_now, p - frag_now->fr_literal, nbytes,
+                          this_add_symbol, 0, this_add_number, 1, NO_RELOC);
+               }
+             else
+               {               /* to_seg==now_seg || to_seg == SEG_UNKNOWN */
+                 /* nbytes==0 */
+                 length_code = is_undefined ? STATE_UNDF : STATE_BYTE;
+                 if (opcode_as_number & VIT_OPCODE_SPECIAL)
+                   {
+                     if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
+                       {
+                         /* br or jsb */
+                         frag_var (rs_machine_dependent, 5, 1,
+                           ENCODE_RELAX (STATE_ALWAYS_BRANCH, length_code),
+                                   this_add_symbol, this_add_number,
+                                   opcode_low_byteP);
+                       }
+                     else
+                       {
+                         if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
+                           {
+                             length_code = STATE_WORD;
+                             /* JF: There is no state_byte for this one! */
+                             frag_var (rs_machine_dependent, 10, 2,
+                                       ENCODE_RELAX (STATE_COMPLEX_BRANCH, length_code),
+                                       this_add_symbol, this_add_number,
+                                       opcode_low_byteP);
+                           }
+                         else
+                           {
+                             know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
+                             frag_var (rs_machine_dependent, 9, 1,
+                             ENCODE_RELAX (STATE_COMPLEX_HOP, length_code),
+                                       this_add_symbol, this_add_number,
+                                       opcode_low_byteP);
+                           }
+                       }
+                   }
+                 else
+                   {
+                     know (operandP->vop_width == VAX_WIDTH_CONDITIONAL_JUMP);
+                     frag_var (rs_machine_dependent, 7, 1,
+                      ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, length_code),
+                               this_add_symbol, this_add_number,
+                               opcode_low_byteP);
+                   }
+               }
+           }
+         else
+           {                   /* to_seg != now_seg && to_seg != SEG_UNKNOWN */
+             /*
+                                * --- SEG FLOAT MAY APPEAR HERE ----
+                                */
+             if (to_seg == SEG_ABSOLUTE)
+               {
                  if (nbytes)
                    {
+                     know (!(opcode_as_number & VIT_OPCODE_SYNTHETIC));
                      p = frag_more (nbytes);
-                     fix_new (frag_now, p - frag_now->fr_literal, nbytes,
-                              this_add_symbol, 0, this_add_number, 1);
+                     /* Conventional relocation. */
+                     fix_new (frag_now, p - frag_now->fr_literal,
+                     nbytes, &abs_symbol, 0, this_add_number, 1, NO_RELOC);
                    }
                  else
-                   {           /* to_seg==now_seg || to_seg == SEG_UNKNOWN */
-                     /* nbytes==0 */
-                     length_code = is_undefined ? STATE_UNDF : STATE_BYTE;
+                   {
+                     know (opcode_as_number & VIT_OPCODE_SYNTHETIC);
                      if (opcode_as_number & VIT_OPCODE_SPECIAL)
                        {
                          if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
                            {
                              /* br or jsb */
-                             frag_var (rs_machine_dependent, 5, 1,
-                                       ENCODE_RELAX (STATE_ALWAYS_BRANCH, length_code),
-                                       this_add_symbol, this_add_number,
-                                       opcode_low_byteP);
+                             *opcode_low_byteP = opcode_as_chars[0] + VAX_WIDEN_LONG;
+                             know (opcode_as_chars[1] == 0);
+                             p = frag_more (5);
+                             p[0] = VAX_ABSOLUTE_MODE; /* @#... */
+                             md_number_to_chars (p + 1, this_add_number, 4);
+                             /* Now (eg) JMP @#foo or JSB @#foo. */
                            }
                          else
                            {
                              if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
                                {
-                                 length_code = STATE_WORD;     /* JF: There is no state_byte for this one! */
-                                 frag_var (rs_machine_dependent, 10, 2,
-                                           ENCODE_RELAX (STATE_COMPLEX_BRANCH, length_code),
-                                           this_add_symbol, this_add_number,
-                                           opcode_low_byteP);
+                                 p = frag_more (10);
+                                 p[0] = 2;
+                                 p[1] = 0;
+                                 p[2] = VAX_BRB;
+                                 p[3] = 6;
+                                 p[4] = VAX_JMP;
+                                 p[5] = VAX_ABSOLUTE_MODE;     /* @#... */
+                                 md_number_to_chars (p + 6, this_add_number, 4);
+                                 /*
+                                                                        * Now (eg)     ACBx    1f
+                                                                        *              BRB     2f
+                                                                        *      1:      JMP     @#foo
+                                                                        *      2:
+                                                                        */
                                }
                              else
                                {
                                  know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
-                                 frag_var (rs_machine_dependent, 9, 1,
-                                           ENCODE_RELAX (STATE_COMPLEX_HOP, length_code),
-                                           this_add_symbol, this_add_number,
-                                           opcode_low_byteP);
+                                 p = frag_more (9);
+                                 p[0] = 2;
+                                 p[1] = VAX_BRB;
+                                 p[2] = 6;
+                                 p[3] = VAX_JMP;
+                                 p[4] = VAX_PC_RELATIVE_MODE + 1;      /* @#... */
+                                 md_number_to_chars (p + 5, this_add_number, 4);
+                                 /*
+                                                                        * Now (eg)     xOBxxx  1f
+                                                                        *              BRB     2f
+                                                                        *      1:      JMP     @#foo
+                                                                        *      2:
+                                                                        */
                                }
                            }
                        }
                      else
                        {
-                         know (operandP->vop_width == VAX_WIDTH_CONDITIONAL_JUMP);
-                         frag_var (rs_machine_dependent, 7, 1,
-                                   ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, length_code),
-                                   this_add_symbol, this_add_number,
-                                   opcode_low_byteP);
+                         /* b<cond> */
+                         *opcode_low_byteP ^= 1;
+                         /* To reverse the condition in a VAX branch, complement the lowest order
+                                                          bit. */
+                         p = frag_more (7);
+                         p[0] = 6;
+                         p[1] = VAX_JMP;
+                         p[2] = VAX_ABSOLUTE_MODE;     /* @#... */
+                         md_number_to_chars (p + 3, this_add_number, 4);
+                         /*
+                                                        * Now (eg)     BLEQ    1f
+                                                        *              JMP     @#foo
+                                                        *      1:
+                                                        */
                        }
                    }
                }
              else
-               {               /* to_seg != now_seg && to_seg != SEG_UNKNOWN */
-/*
- * --- SEG FLOAT MAY APPEAR HERE ----
- */
-                 if (to_seg == SEG_ABSOLUTE)
+               {               /* to_seg != now_seg && to_seg != SEG_UNKNOWN && to_Seg != SEG_ABSOLUTE */
+                 if (nbytes > 0)
                    {
-                     if (nbytes)
-                       {
-                         know (!(opcode_as_number & VIT_OPCODE_SYNTHETIC));
-                         p = frag_more (nbytes);
-                         /* Conventional relocation. */
-                         fix_new (frag_now, p - frag_now->fr_literal,
-                               nbytes, &abs_symbol, 0, this_add_number, 1);
-                       }
-                     else
+                     /* Pc-relative. Conventional relocation. */
+                     know (!(opcode_as_number & VIT_OPCODE_SYNTHETIC));
+                     p = frag_more (nbytes);
+                     fix_new (frag_now, p - frag_now->fr_literal,
+                     nbytes, &abs_symbol, 0, this_add_number, 1, NO_RELOC);
+                   }
+                 else
+                   {
+                     know (opcode_as_number & VIT_OPCODE_SYNTHETIC);
+                     if (opcode_as_number & VIT_OPCODE_SPECIAL)
                        {
-                         know (opcode_as_number & VIT_OPCODE_SYNTHETIC);
-                         if (opcode_as_number & VIT_OPCODE_SPECIAL)
+                         if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
                            {
-                             if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
-                               {
-                                 /* br or jsb */
-                                 *opcode_low_byteP = opcode_as_chars[0] + VAX_WIDEN_LONG;
-                                 know (opcode_as_chars[1] == 0);
-                                 p = frag_more (5);
-                                 p[0] = VAX_ABSOLUTE_MODE;     /* @#... */
-                                 md_number_to_chars (p + 1, this_add_number, 4);
-                                 /* Now (eg) JMP @#foo or JSB @#foo. */
-                               }
-                             else
-                               {
-                                 if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
-                                   {
-                                     p = frag_more (10);
-                                     p[0] = 2;
-                                     p[1] = 0;
-                                     p[2] = VAX_BRB;
-                                     p[3] = 6;
-                                     p[4] = VAX_JMP;
-                                     p[5] = VAX_ABSOLUTE_MODE; /* @#... */
-                                     md_number_to_chars (p + 6, this_add_number, 4);
-                                     /*
-                                      * Now (eg)       ACBx    1f
-                                      *                BRB     2f
-                                      *        1:      JMP     @#foo
-                                      *        2:
-                                      */
-                                   }
-                                 else
-                                   {
-                                     know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
-                                     p = frag_more (9);
-                                     p[0] = 2;
-                                     p[1] = VAX_BRB;
-                                     p[2] = 6;
-                                     p[3] = VAX_JMP;
-                                     p[4] = VAX_PC_RELATIVE_MODE + 1;  /* @#... */
-                                     md_number_to_chars (p + 5, this_add_number, 4);
-                                     /*
-                                      * Now (eg)       xOBxxx  1f
-                                      *                BRB     2f
-                                      *        1:      JMP     @#foo
-                                      *        2:
-                                      */
-                                   }
-                               }
+                             /* br or jsb */
+                             know (opcode_as_chars[1] == 0);
+                             *opcode_low_byteP = opcode_as_chars[0] + VAX_WIDEN_LONG;
+                             p = frag_more (5);
+                             p[0] = VAX_PC_RELATIVE_MODE;
+                             fix_new (frag_now,
+                                      p + 1 - frag_now->fr_literal, 4,
+                                      this_add_symbol, 0,
+                                      this_add_number, 1, NO_RELOC);
+                             /* Now eg JMP foo or JSB foo. */
                            }
                          else
                            {
-                             /* b<cond> */
-                             *opcode_low_byteP ^= 1;   /* To reverse the condition in a VAX branch, complement the lowest order bit. */
-                             p = frag_more (7);
-                             p[0] = 6;
-                             p[1] = VAX_JMP;
-                             p[2] = VAX_ABSOLUTE_MODE; /* @#... */
-                             md_number_to_chars (p + 3, this_add_number, 4);
-                             /*
-                              * Now (eg)       BLEQ    1f
-                              *                JMP     @#foo
-                              *        1:
-                              */
-                           }
-                       }
-                   }
-                 else
-                   {           /* to_seg != now_seg && to_seg != SEG_UNKNOWN && to_Seg != SEG_ABSOLUTE */
-                     if (nbytes > 0)
-                       {
-                         /* Pc-relative. Conventional relocation. */
-                         know (!(opcode_as_number & VIT_OPCODE_SYNTHETIC));
-                         p = frag_more (nbytes);
-                         fix_new (frag_now, p - frag_now->fr_literal,
-                               nbytes, &abs_symbol, 0, this_add_number, 1);
-                       }
-                     else
-                       {
-                         know (opcode_as_number & VIT_OPCODE_SYNTHETIC);
-                         if (opcode_as_number & VIT_OPCODE_SPECIAL)
-                           {
-                             if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
+                             if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
                                {
-                                 /* br or jsb */
-                                 know (opcode_as_chars[1] == 0);
-                                 *opcode_low_byteP = opcode_as_chars[0] + VAX_WIDEN_LONG;
-                                 p = frag_more (5);
-                                 p[0] = VAX_PC_RELATIVE_MODE;
+                                 p = frag_more (10);
+                                 p[0] = 0;
+                                 p[1] = 2;
+                                 p[2] = VAX_BRB;
+                                 p[3] = 6;
+                                 p[4] = VAX_JMP;
+                                 p[5] = VAX_PC_RELATIVE_MODE;
                                  fix_new (frag_now,
-                                          p + 1 - frag_now->fr_literal, 4,
+                                          p + 6 - frag_now->fr_literal, 4,
                                           this_add_symbol, 0,
-                                          this_add_number, 1);
-                                 /* Now eg JMP foo or JSB foo. */
+                                          this_add_number, 1, NO_RELOC);
+                                 /*
+                                                                        * Now (eg)     ACBx    1f
+                                                                        *              BRB     2f
+                                                                        *      1:      JMP     foo
+                                                                        *      2:
+                                                                        */
                                }
                              else
                                {
-                                 if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
-                                   {
-                                     p = frag_more (10);
-                                     p[0] = 0;
-                                     p[1] = 2;
-                                     p[2] = VAX_BRB;
-                                     p[3] = 6;
-                                     p[4] = VAX_JMP;
-                                     p[5] = VAX_PC_RELATIVE_MODE;
-                                     fix_new (frag_now,
-                                           p + 6 - frag_now->fr_literal, 4,
-                                              this_add_symbol, 0,
-                                              this_add_number, 1);
-                                     /*
-                                      * Now (eg)       ACBx    1f
-                                      *                BRB     2f
-                                      *        1:      JMP     foo
-                                      *        2:
-                                      */
-                                   }
-                                 else
-                                   {
-                                     know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
-                                     p = frag_more (10);
-                                     p[0] = 2;
-                                     p[1] = VAX_BRB;
-                                     p[2] = 6;
-                                     p[3] = VAX_JMP;
-                                     p[4] = VAX_PC_RELATIVE_MODE;
-                                     fix_new (frag_now,
-                                              p + 5 - frag_now->fr_literal,
-                                              4, this_add_symbol, 0,
-                                              this_add_number, 1);
-                                     /*
-                                      * Now (eg)       xOBxxx  1f
-                                      *                BRB     2f
-                                      *        1:      JMP     foo
-                                      *        2:
-                                      */
-                                   }
+                                 know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
+                                 p = frag_more (10);
+                                 p[0] = 2;
+                                 p[1] = VAX_BRB;
+                                 p[2] = 6;
+                                 p[3] = VAX_JMP;
+                                 p[4] = VAX_PC_RELATIVE_MODE;
+                                 fix_new (frag_now,
+                                          p + 5 - frag_now->fr_literal,
+                                          4, this_add_symbol, 0,
+                                          this_add_number, 1, NO_RELOC);
+                                 /*
+                                                                        * Now (eg)     xOBxxx  1f
+                                                                        *              BRB     2f
+                                                                        *      1:      JMP     foo
+                                                                        *      2:
+                                                                        */
                                }
                            }
-                         else
-                           {
-                             know (operandP->vop_width == VAX_WIDTH_CONDITIONAL_JUMP);
-                             *opcode_low_byteP ^= 1;   /* Reverse branch condition. */
-                             p = frag_more (7);
-                             p[0] = 6;
-                             p[1] = VAX_JMP;
-                             p[2] = VAX_PC_RELATIVE_MODE;
-                             fix_new (frag_now, p + 3 - frag_now->fr_literal,
-                                      4, this_add_symbol, 0,
-                                      this_add_number, 1);
-                           }
+                       }
+                     else
+                       {
+                         know (operandP->vop_width == VAX_WIDTH_CONDITIONAL_JUMP);
+                         *opcode_low_byteP ^= 1;       /* Reverse branch condition. */
+                         p = frag_more (7);
+                         p[0] = 6;
+                         p[1] = VAX_JMP;
+                         p[2] = VAX_PC_RELATIVE_MODE;
+                         fix_new (frag_now, p + 3 - frag_now->fr_literal,
+                                  4, this_add_symbol, 0,
+                                  this_add_number, 1, NO_RELOC);
                        }
                    }
                }
            }
-         else
+       }
+      else
+       {
+         know (operandP->vop_access != 'b');   /* So it is ordinary operand. */
+         know (operandP->vop_access != ' ');   /* ' ' target-independent: elsewhere. */
+         know (operandP->vop_access == 'a'
+               || operandP->vop_access == 'm'
+               || operandP->vop_access == 'r'
+               || operandP->vop_access == 'v'
+               || operandP->vop_access == 'w');
+         if (operandP->vop_short == 's')
            {
-             know (operandP->vop_access != 'b');       /* So it is ordinary operand. */
-             know (operandP->vop_access != ' ');       /* ' ' target-independent: elsewhere. */
-             know (operandP->vop_access == 'a' || operandP->vop_access == 'm' || operandP->vop_access == 'r' || operandP->vop_access == 'v' || operandP->vop_access == 'w');
-             if (operandP->vop_short == 's')
+             if (to_seg == SEG_ABSOLUTE)
                {
-                 if (to_seg == SEG_ABSOLUTE)
-                   {
-                     if (this_add_number < 0 || this_add_number >= 64)
-                       {
-                         as_warn ("Short literal overflow(%d.), immediate mode assumed.", this_add_number);
-                         operandP->vop_short = 'i';
-                         operandP->vop_mode = 8;
-                         operandP->vop_reg = 0xF;
-                       }
-                   }
-                 else
+                 if (this_add_number < 0 || this_add_number >= 64)
                    {
-                     as_warn ("Forced short literal to immediate mode. now_seg=%s to_seg=%s", segment_name(now_seg), segment_name(to_seg));
+                     as_warn ("Short literal overflow(%d.), immediate mode assumed.", this_add_number);
                      operandP->vop_short = 'i';
                      operandP->vop_mode = 8;
                      operandP->vop_reg = 0xF;
                    }
                }
-             if (operandP->vop_reg >= 0 && (operandP->vop_mode < 8 || (operandP->vop_reg != 0xF && operandP->vop_mode < 10)))
-               {               /* One byte operand. */
-                 know (operandP->vop_mode > 3);
-                 FRAG_APPEND_1_CHAR (operandP->vop_mode << 4 | operandP->vop_reg);
-                 /* All 1-bytes except S^# happen here. */
-               }
              else
-               {               /* {@}{q^}foo{(Rn)} or S^#foo */
-                 if (operandP->vop_reg == -1 && operandP->vop_short != 's')
-                   {           /* "{@}{q^}foo" */
-                     if (to_seg == now_seg)
+               {
+                 as_warn ("Forced short literal to immediate mode. now_seg=%s to_seg=%s",
+                          segment_name (now_seg), segment_name (to_seg));
+                 operandP->vop_short = 'i';
+                 operandP->vop_mode = 8;
+                 operandP->vop_reg = 0xF;
+               }
+           }
+         if (operandP->vop_reg >= 0 && (operandP->vop_mode < 8
+                 || (operandP->vop_reg != 0xF && operandP->vop_mode < 10)))
+           {
+             /* One byte operand. */
+             know (operandP->vop_mode > 3);
+             FRAG_APPEND_1_CHAR (operandP->vop_mode << 4 | operandP->vop_reg);
+             /* All 1-bytes except S^# happen here. */
+           }
+         else
+           {                   /* {@}{q^}foo{(Rn)} or S^#foo */
+             if (operandP->vop_reg == -1 && operandP->vop_short != 's')
+               {
+                 /* "{@}{q^}foo" */
+                 if (to_seg == now_seg)
+                   {
+                     if (length == 0)
                        {
-                         if (length == 0)
-                           {
-                             know (operandP->vop_short == ' ');
-                             p = frag_var (rs_machine_dependent, 10, 2,
+                         know (operandP->vop_short == ' ');
+                         p = frag_var (rs_machine_dependent, 10, 2,
                               ENCODE_RELAX (STATE_PC_RELATIVE, STATE_BYTE),
+                                       this_add_symbol, this_add_number,
+                                       opcode_low_byteP);
+                         know (operandP->vop_mode == 10 + at);
+                         *p = at << 4;
+                         /* At is the only context we need to carry to */
+                         /* other side of relax() process. */
+                         /* Must be in the correct bit position of VAX */
+                         /* operand spec. byte. */
+                       }
+                     else
+                       {
+                         know (length);
+                         know (operandP->vop_short != ' ');
+                         p = frag_more (length + 1);
+                         /* JF is this array stuff really going to work? */
+                         p[0] = 0xF | ((at + "?\12\14?\16"[length]) << 4);
+                         fix_new (frag_now, p + 1 - frag_now->fr_literal,
+                                  length, this_add_symbol, 0,
+                                  this_add_number, 1, NO_RELOC);
+                       }
+                   }
+                 else
+                   {           /* to_seg != now_seg */
+                     if (this_add_symbol == NULL)
+                       {
+                         know (to_seg == SEG_ABSOLUTE);
+                         /* Do @#foo: simpler relocation than foo-.(pc) anyway. */
+                         p = frag_more (5);
+                         p[0] = VAX_ABSOLUTE_MODE;     /* @#... */
+                         md_number_to_chars (p + 1, this_add_number, 4);
+                         if (length && length != 4)
+                           {
+                             as_warn ("Length specification ignored. Address mode 9F used");
+                           }
+                       }
+                     else
+                       {
+                         /* {@}{q^}other_seg */
+                         know ((length == 0 && operandP->vop_short == ' ')
+                            || (length > 0 && operandP->vop_short != ' '));
+                         if (is_undefined)
+                           {
+                             /*
+                                                                * We have a SEG_UNKNOWN symbol. It might
+                                                                * turn out to be in the same segment as
+                                                                * the instruction, permitting relaxation.
+                                                                */
+                             p = frag_var (rs_machine_dependent, 5, 2,
+                              ENCODE_RELAX (STATE_PC_RELATIVE, STATE_UNDF),
                                            this_add_symbol, this_add_number,
-                                           opcode_low_byteP);
-                             know (operandP->vop_mode == 10 + at);
-                             *p = at << 4;
-                             /* At is the only context we need to carry to */
-                             /* other side of relax() process. */
-                             /* Must be in the correct bit position of VAX */
-                             /* operand spec. byte. */
+                                           0);
+                             p[0] = at << 4;
                            }
                          else
                            {
-                             know (length);
-                             know (operandP->vop_short != ' ');
+                             if (length == 0)
+                               {
+                                 know (operandP->vop_short == ' ');
+                                 length = 4;   /* Longest possible. */
+                               }
                              p = frag_more (length + 1);
-                             /* JF is this array stuff really going to work? */
                              p[0] = 0xF | ((at + "?\12\14?\16"[length]) << 4);
-                             fix_new (frag_now, p + 1 - frag_now->fr_literal,
+                             md_number_to_chars (p + 1, this_add_number, length);
+                             fix_new (frag_now,
+                                      p + 1 - frag_now->fr_literal,
                                       length, this_add_symbol, 0,
-                                      this_add_number, 1);
+                                      this_add_number, 1, NO_RELOC);
                            }
                        }
+                   }
+               }
+             else
+               {               /* {@}{q^}foo(Rn) or S^# or I^# or # */
+                 if (operandP->vop_mode < 0xA)
+                   {           /* # or S^# or I^# */
+                     /* know(   (length == 0 && operandP->vop_short == ' ')
+                                                  || (length >  0 && operandP->vop_short != ' ')); */
+                     if (length == 0
+                         && to_seg == SEG_ABSOLUTE
+                         && operandP->vop_mode == 8    /* No '@'. */
+                         && this_add_number < 64
+                         && this_add_number >= 0)
+                       {
+                         operandP->vop_short = 's';
+                       }
+                     if (operandP->vop_short == 's')
+                       {
+                         FRAG_APPEND_1_CHAR (this_add_number);
+                       }
                      else
-                       {       /* to_seg != now_seg */
-                         if (this_add_symbol == NULL)
+                       {       /* I^#... */
+                         know (nbytes);
+                         p = frag_more (nbytes + 1);
+                         know (operandP->vop_reg == 0xF);
+                         p[0] = (operandP->vop_mode << 4) | 0xF;
+                         if (to_seg == SEG_ABSOLUTE)
                            {
-                             know (to_seg == SEG_ABSOLUTE);
-                             /* Do @#foo: simpler relocation than foo-.(pc) anyway. */
-                             p = frag_more (5);
-                             p[0] = VAX_ABSOLUTE_MODE; /* @#... */
-                             md_number_to_chars (p + 1, this_add_number, 4);
-                             if (length && length != 4)
+                             /*
+                                                                * If nbytes > 4, then we are scrod. We don't know if the
+                                                                * high order bytes are to be 0xFF or 0x00.
+                                                                * BSD4.2 & RMS say use 0x00. OK --- but this
+                                                                * assembler needs ANOTHER rewrite to
+                                                                * cope properly with this bug.
+                                                                */
+                             md_number_to_chars (p + 1, this_add_number, min (4, nbytes));
+                             if (nbytes > 4)
                                {
-                                 as_warn ("Length specification ignored. Address mode 9F used");
+                                 memset (p + 5, '\0', nbytes - 4);
                                }
                            }
                          else
                            {
-                             /* {@}{q^}other_seg */
-                             know ((length == 0 && operandP->vop_short == ' ')
-                                 ||(length > 0 && operandP->vop_short != ' '));
-                             if (is_undefined)
+                             if (to_seg == SEG_BIG)
                                {
                                  /*
-                                  * We have a SEG_UNKNOWN symbol. It might
-                                  * turn out to be in the same segment as
-                                  * the instruction, permitting relaxation.
-                                  */
-                                 p = frag_var (rs_machine_dependent, 5, 2,
-                                               ENCODE_RELAX (STATE_PC_RELATIVE, STATE_UNDF),
-                                          this_add_symbol, this_add_number,
-                                               0);
-                                 p[0] = at << 4;
-                               }
-                             else
-                               {
-                                 if (length == 0)
+                                                                        * Problem here is to get the bytes in the right order.
+                                                                        * We stored our constant as LITTLENUMs, not bytes.
+                                                                        */
+                                 LITTLENUM_TYPE *lP;
+
+                                 lP = floatP->low;
+                                 if (nbytes & 1)
                                    {
-                                     know (operandP->vop_short == ' ');
-                                     length = 4;       /* Longest possible. */
+                                     know (nbytes == 1);
+                                     p[1] = *lP;
                                    }
-                                 p = frag_more (length + 1);
-                                 p[0] = 0xF | ((at + "?\12\14?\16"[length]) << 4);
-                                 md_number_to_chars (p + 1, this_add_number, length);
-                                 fix_new (frag_now,
-                                          p + 1 - frag_now->fr_literal,
-                                          length, this_add_symbol, 0,
-                                          this_add_number, 1);
-                               }
-                           }
-                       }
-                   }
-                 else
-                   {           /* {@}{q^}foo(Rn) or S^# or I^# or # */
-                     if (operandP->vop_mode < 0xA)
-                       {       /* # or S^# or I^# */
-                         /* know(   (length == 0 && operandP->vop_short == ' ')
-                              || (length >  0 && operandP->vop_short != ' ')); */
-                         if (length == 0
-                             && to_seg == SEG_ABSOLUTE
-                             && operandP->vop_mode == 8        /* No '@'. */
-                             && this_add_number < 64
-                             && this_add_number >= 0)
-                           {
-                             operandP->vop_short = 's';
-                           }
-                         if (operandP->vop_short == 's')
-                           {
-                             FRAG_APPEND_1_CHAR (this_add_number);
-                           }
-                         else
-                           {   /* I^#... */
-                             know (nbytes);
-                             p = frag_more (nbytes + 1);
-                             know (operandP->vop_reg == 0xF);
-                             p[0] = (operandP->vop_mode << 4) | 0xF;
-                             if (to_seg == SEG_ABSOLUTE)
-                               {
-/*
- * If nbytes > 4, then we are scrod. We don't know if the
- * high order bytes are to be 0xFF or 0x00.
- * BSD4.2 & RMS say use 0x00. OK --- but this
- * assembler needs ANOTHER rewrite to
- * cope properly with this bug.
- */
-                                 md_number_to_chars (p + 1, this_add_number, min (4, nbytes));
-                                 if (nbytes > 4)
+                                 else
                                    {
-                                     bzero (p + 5, nbytes - 4);
+                                     for (p++; nbytes; nbytes -= 2, p += 2, lP++)
+                                       {
+                                         md_number_to_chars (p, *lP, 2);
+                                       }
                                    }
                                }
                              else
                                {
-                                 if (to_seg == SEG_BIG)
-                                   {
-/*
- * Problem here is to get the bytes in the right order.
- * We stored our constant as LITTLENUMs, not bytes.
- */
-                                     LITTLENUM_TYPE *lP;
-
-                                     lP = floatP->low;
-                                     if (nbytes & 1)
-                                       {
-                                         know (nbytes == 1);
-                                         p[1] = *lP;
-                                       }
-                                     else
-                                       {
-                                         for (p++; nbytes; nbytes -= 2, p += 2, lP++)
-                                           {
-                                             md_number_to_chars (p, *lP, 2);
-                                           }
-                                       }
-                                   }
-                                 else
-                                   {
-                                     fix_new (frag_now, p + 1 - frag_now->fr_literal,
-                                              nbytes, this_add_symbol, 0,
-                                              this_add_number, 0);
-                                   }
+                                 fix_new (frag_now, p + 1 - frag_now->fr_literal,
+                                          nbytes, this_add_symbol, 0,
+                                          this_add_number, 0, NO_RELOC);
                                }
                            }
                        }
-                     else
-                       {       /* {@}{q^}foo(Rn) */
-                         know ((length == 0 && operandP->vop_short == ' ')
-                             ||(length > 0 && operandP->vop_short != ' '));
-                         if (length == 0)
+                   }
+                 else
+                   {           /* {@}{q^}foo(Rn) */
+                     know ((length == 0 && operandP->vop_short == ' ')
+                           || (length > 0 && operandP->vop_short != ' '));
+                     if (length == 0)
+                       {
+                         if (to_seg == SEG_ABSOLUTE)
                            {
-                             if (to_seg == SEG_ABSOLUTE)
-                               {
-                                 register long test;
+                             register long test;
 
-                                 test = this_add_number;
+                             test = this_add_number;
 
-                                 if (test < 0)
-                                   test = ~test;
+                             if (test < 0)
+                               test = ~test;
 
-                                 length = test & 0xffff8000 ? 4
-                                   : test & 0xffffff80 ? 2
-                                   : 1;
-                               }
-                             else
-                               {
-                                 length = 4;
-                               }
-                           }
-                         p = frag_more (1 + length);
-                         know (operandP->vop_reg >= 0);
-                         p[0] = operandP->vop_reg
-                           | ((at | "?\12\14?\16"[length]) << 4);
-                         if (to_seg == SEG_ABSOLUTE)
-                           {
-                             md_number_to_chars (p + 1, this_add_number, length);
+                             length = test & 0xffff8000 ? 4
+                               : test & 0xffffff80 ? 2
+                               : 1;
                            }
                          else
                            {
-                             fix_new (frag_now, p + 1 - frag_now->fr_literal,
-                                      length, this_add_symbol, 0,
-                                      this_add_number, 0);
+                             length = 4;
                            }
                        }
+                     p = frag_more (1 + length);
+                     know (operandP->vop_reg >= 0);
+                     p[0] = operandP->vop_reg
+                       | ((at | "?\12\14?\16"[length]) << 4);
+                     if (to_seg == SEG_ABSOLUTE)
+                       {
+                         md_number_to_chars (p + 1, this_add_number, length);
+                       }
+                     else
+                       {
+                         fix_new (frag_now, p + 1 - frag_now->fr_literal,
+                                  length, this_add_symbol, 0,
+                                  this_add_number, 0, NO_RELOC);
+                       }
                    }
-               }               /* if(single-byte-operand) */
-           }
-       }                       /* for(operandP) */
-    }                          /* if(!need_pass_2&&!goofed) */
+               }
+           }                   /* if(single-byte-operand) */
+       }
+    }                          /* for(operandP) */
 }                              /* vax_assemble() */
 \f
 /*
@@ -1210,7 +1189,7 @@ md_estimate_size_before_relax (fragP, segment)
   switch (fragP->fr_subtype)
     {
     case ENCODE_RELAX (STATE_PC_RELATIVE, STATE_UNDF):
-      if (S_GET_SEGMENT(fragP->fr_symbol) == segment)
+      if (S_GET_SEGMENT (fragP->fr_symbol) == segment)
        {                       /* A relaxable case. */
          fragP->fr_subtype = ENCODE_RELAX (STATE_PC_RELATIVE, STATE_BYTE);
        }
@@ -1220,13 +1199,13 @@ md_estimate_size_before_relax (fragP, segment)
          p[0] |= VAX_PC_RELATIVE_MODE; /* Preserve @ bit. */
          fragP->fr_fix += 1 + 4;
          fix_new (fragP, old_fr_fix + 1, 4, fragP->fr_symbol, 0,
-                  fragP->fr_offset, 1);
+                  fragP->fr_offset, 1, NO_RELOC);
          frag_wane (fragP);
        }
       break;
 
     case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_UNDF):
-      if (S_GET_SEGMENT(fragP->fr_symbol) == segment)
+      if (S_GET_SEGMENT (fragP->fr_symbol) == segment)
        {
          fragP->fr_subtype = ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_BYTE);
        }
@@ -1239,13 +1218,13 @@ md_estimate_size_before_relax (fragP, segment)
          p[2] = VAX_PC_RELATIVE_MODE;  /* ...(PC) */
          fragP->fr_fix += 1 + 1 + 1 + 4;
          fix_new (fragP, old_fr_fix + 3, 4, fragP->fr_symbol, 0,
-                  fragP->fr_offset, 1);
+                  fragP->fr_offset, 1, NO_RELOC);
          frag_wane (fragP);
        }
       break;
 
     case ENCODE_RELAX (STATE_COMPLEX_BRANCH, STATE_UNDF):
-      if (S_GET_SEGMENT(fragP->fr_symbol) == segment)
+      if (S_GET_SEGMENT (fragP->fr_symbol) == segment)
        {
          fragP->fr_subtype = ENCODE_RELAX (STATE_COMPLEX_BRANCH, STATE_WORD);
        }
@@ -1260,13 +1239,13 @@ md_estimate_size_before_relax (fragP, segment)
          p[5] = VAX_PC_RELATIVE_MODE;  /* ...(pc) */
          fragP->fr_fix += 2 + 2 + 1 + 1 + 4;
          fix_new (fragP, old_fr_fix + 6, 4, fragP->fr_symbol, 0,
-                  fragP->fr_offset, 1);
+                  fragP->fr_offset, 1, NO_RELOC);
          frag_wane (fragP);
        }
       break;
 
     case ENCODE_RELAX (STATE_COMPLEX_HOP, STATE_UNDF):
-      if (S_GET_SEGMENT(fragP->fr_symbol) == segment)
+      if (S_GET_SEGMENT (fragP->fr_symbol) == segment)
        {
          fragP->fr_subtype = ENCODE_RELAX (STATE_COMPLEX_HOP, STATE_BYTE);
        }
@@ -1280,13 +1259,13 @@ md_estimate_size_before_relax (fragP, segment)
          p[4] = VAX_PC_RELATIVE_MODE;  /* ...(pc) */
          fragP->fr_fix += 1 + 2 + 1 + 1 + 4;
          fix_new (fragP, old_fr_fix + 5, 4, fragP->fr_symbol, 0,
-                  fragP->fr_offset, 1);
+                  fragP->fr_offset, 1, NO_RELOC);
          frag_wane (fragP);
        }
       break;
 
     case ENCODE_RELAX (STATE_ALWAYS_BRANCH, STATE_UNDF):
-      if (S_GET_SEGMENT(fragP->fr_symbol) == segment)
+      if (S_GET_SEGMENT (fragP->fr_symbol) == segment)
        {
          fragP->fr_subtype = ENCODE_RELAX (STATE_ALWAYS_BRANCH, STATE_BYTE);
        }
@@ -1297,7 +1276,7 @@ md_estimate_size_before_relax (fragP, segment)
          p[0] = VAX_PC_RELATIVE_MODE;  /* ...(PC) */
          fragP->fr_fix += 1 + 4;
          fix_new (fragP, old_fr_fix + 1, 4, fragP->fr_symbol, 0,
-                  fragP->fr_offset, 1);
+                  fragP->fr_offset, 1, NO_RELOC);
          frag_wane (fragP);
        }
       break;
@@ -1320,19 +1299,20 @@ md_estimate_size_before_relax (fragP, segment)
  *     Caller will turn frag into a ".space 0".
  */
 void
-md_convert_frag (fragP)
+md_convert_frag (headers, fragP)
+     object_headers *headers;
      register fragS *fragP;
 {
-  register char *addressP;     /* -> _var to change. */
-  register char *opcodeP;      /* -> opcode char(s) to change. */
-  register short int length_code;      /* 2=long 1=word 0=byte */
-  register short int extension;        /* Size of relaxed address. */
+  char *addressP;              /* -> _var to change. */
+  char *opcodeP;               /* -> opcode char(s) to change. */
+  short int length_code;       /* 2=long 1=word 0=byte */
+  short int extension = 0;     /* Size of relaxed address. */
   /* Added to fr_fix: incl. ALL var chars. */
-  register symbolS *symbolP;
-  register long where;
-  register long address_of_var;
+  symbolS *symbolP;
+  long where;
+  long address_of_var;
   /* Where, in file space, is _var of *fragP? */
-  register long target_address;
+  long target_address = 0;
   /* Where, in file space, does addr point? */
 
   know (fragP->fr_type == rs_machine_dependent);
@@ -1343,10 +1323,12 @@ md_convert_frag (fragP)
   opcodeP = fragP->fr_opcode;
   symbolP = fragP->fr_symbol;
   know (symbolP);
-  target_address = symbolP->sy_value + fragP->fr_offset;
+  target_address = S_GET_VALUE (symbolP) + fragP->fr_offset;
   address_of_var = fragP->fr_address + where;
+
   switch (fragP->fr_subtype)
     {
+
     case ENCODE_RELAX (STATE_PC_RELATIVE, STATE_BYTE):
       know (*addressP == 0 || *addressP == 0x10);      /* '@' bit. */
       addressP[0] |= 0xAF;     /* Byte displacement. */
@@ -1453,7 +1435,7 @@ md_convert_frag (fragP)
       break;
     }
   fragP->fr_fix += extension;
-}
+}                              /* md_convert_frag() */
 
 /* Translate internal format of relocation info into target format.
 
@@ -1461,7 +1443,8 @@ md_convert_frag (fragP)
    are symbolnum, least sig. byte first.  Last byte is broken up with
    the upper nibble as nuthin, bit 3 as extern, bits 2 & 1 as length, and
    bit 0 as pcrel. */
-void 
+#ifdef comment
+void
 md_ri_to_chars (the_bytes, ri)
      char *the_bytes;
      struct reloc_info_generic ri;
@@ -1475,7 +1458,44 @@ md_ri_to_chars (the_bytes, ri)
   the_bytes[7] = (((ri.r_extern << 3) & 0x08) | ((ri.r_length << 1) & 0x06) |
                  ((ri.r_pcrel << 0) & 0x01)) & 0x0F;
 }
-\f
+
+#endif /* comment */
+
+void 
+tc_aout_fix_to_chars (where, fixP, segment_address_in_file)
+     char *where;
+     fixS *fixP;
+     relax_addressT segment_address_in_file;
+{
+  /*
+        * In: length of relocation (or of address) in chars: 1, 2 or 4.
+        * Out: GNU LD relocation length code: 0, 1, or 2.
+        */
+
+  static unsigned char nbytes_r_length[] =
+  {42, 0, 1, 42, 2};
+  long r_symbolnum;
+
+  know (fixP->fx_addsy != NULL);
+
+  md_number_to_chars (where,
+       fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file,
+                     4);
+
+  r_symbolnum = (S_IS_DEFINED (fixP->fx_addsy)
+                ? S_GET_TYPE (fixP->fx_addsy)
+                : fixP->fx_addsy->sy_number);
+
+  where[6] = (r_symbolnum >> 16) & 0x0ff;
+  where[5] = (r_symbolnum >> 8) & 0x0ff;
+  where[4] = r_symbolnum & 0x0ff;
+  where[7] = ((((!S_IS_DEFINED (fixP->fx_addsy)) << 3) & 0x08)
+             | ((nbytes_r_length[fixP->fx_size] << 1) & 0x06)
+             | (((fixP->fx_pcrel << 0) & 0x01) & 0x0f));
+
+  return;
+}                              /* tc_aout_fix_to_chars() */
+
 /*
  *       BUGS, GRIPES,  APOLOGIA, etc.
  *
@@ -1542,9 +1562,9 @@ md_ri_to_chars (the_bytes, ri)
  *     source file, and changed the makefile.
  */
 
-static char *op_hash = NULL;   /* handle of the OPCODE hash table */
- /* NULL means any use before vip_begin() */
- /* will crash */
+static struct hash_control *op_hash = NULL;    /* handle of the OPCODE hash table */
+/* NULL means any use before vip_begin() */
+/* will crash */
 
 /*
  * In: 1 character, from "bdfghloqpw" being the data-type of an operand
@@ -1587,7 +1607,7 @@ static const short int vax_operand_width_size[256] =
  * So change 'vax.opcodes', then re-generate this table.
  */
 
-#include "vax-opcode.h"
+#include "opcode/vax.h"
 \f
 /*
  * This is a table of optional op-codes. All of them represent
@@ -1625,102 +1645,62 @@ static const short int vax_operand_width_size[256] =
  */
 #if (VIT_OPCODE_SYNTHETIC != 0x80000000)
 You have just broken the encoding below, which assumes the sign bit
- means 'I am an imaginary instruction'.
 means 'I am an imaginary instruction'.
 #endif
 
 #if (VIT_OPCODE_SPECIAL != 0x40000000)
- You have just broken the encoding below, which assumes the 0x40 M bit means
- 'I am not to be "optimised" the way normal branches are'.
 You have just broken the encoding below, which assumes the 0x40 M bit means
 'I am not to be "optimised" the way normal branches are'.
 #endif
 
 static const struct vot
- synthetic_votstrs[] =
 synthetic_votstrs[] =
 {
-  {"jbsb",
-   {"b-", 0xC0000010}},                /* BSD 4.2 */
- /* jsb used already */
-  {"jbr",
-   {"b-", 0xC0000011}},                /* BSD 4.2 */
-  {"jr",
-   {"b-", 0xC0000011}},                /* consistent */
-  {"jneq",
-   {"b?", 0x80000012}},
-  {"jnequ",
-   {"b?", 0x80000012}},
-  {"jeql",
-   {"b?", 0x80000013}},
-  {"jeqlu",
-   {"b?", 0x80000013}},
-  {"jgtr",
-   {"b?", 0x80000014}},
-  {"jleq",
-   {"b?", 0x80000015}},
- /* un-used opcodes here */
-  {"jgeq",
-   {"b?", 0x80000018}},
-  {"jlss",
-   {"b?", 0x80000019}},
-  {"jgtru",
-   {"b?", 0x8000001a}},
-  {"jlequ",
-   {"b?", 0x8000001b}},
-  {"jvc",
-   {"b?", 0x8000001c}},
-  {"jvs",
-   {"b?", 0x8000001d}},
-  {"jgequ",
-   {"b?", 0x8000001e}},
-  {"jcc",
-   {"b?", 0x8000001e}},
-  {"jlssu",
-   {"b?", 0x8000001f}},
-  {"jcs",
-   {"b?", 0x8000001f}},
-
-  {"jacbw",
-   {"rwrwmwb!", 0xC000003d}},
-  {"jacbf",
-   {"rfrfmfb!", 0xC000004f}},
-  {"jacbd",
-   {"rdrdmdb!", 0xC000006f}},
-  {"jacbb",
-   {"rbrbmbb!", 0xC000009d}},
-  {"jacbl",
-   {"rlrlmlb!", 0xC00000f1}},
-  {"jacbg",
-   {"rgrgmgb!", 0xC0004ffd}},
-  {"jacbh",
-   {"rhrhmhb!", 0xC0006ffd}},
-
-  {"jbs",
-   {"rlvbb?", 0x800000e0}},
-  {"jbc",
-   {"rlvbb?", 0x800000e1}},
-  {"jbss",
-   {"rlvbb?", 0x800000e2}},
-  {"jbcs",
-   {"rlvbb?", 0x800000e3}},
-  {"jbsc",
-   {"rlvbb?", 0x800000e4}},
-  {"jbcc",
-   {"rlvbb?", 0x800000e5}},
-  {"jbssi",
-   {"rlvbb?", 0x800000e6}},
-  {"jbcci",
-   {"rlvbb?", 0x800000e7}},
-  {"jlbs",
-   {"rlb?", 0x800000e8}},      /* JF changed from rlvbb? */
-  {"jlbc",
-   {"rlb?", 0x800000e9}},      /* JF changed from rlvbb? */
-
-  {"jaoblss",
-   {"rlmlb:", 0xC00000f2}},
-  {"jaobleq",
-   {"rlmlb:", 0xC00000f3}},
-  {"jsobgeq",
-   {"mlb:", 0xC00000f4}},      /* JF was rlmlb: */
-  {"jsobgtr",
-   {"mlb:", 0xC00000f5}},      /* JF was rlmlb: */
+  {"jbsb",     {"b-", 0xC0000010}},            /* BSD 4.2 */
+/* jsb used already */
+  {"jbr",      {"b-", 0xC0000011}},            /* BSD 4.2 */
+  {"jr",       {"b-", 0xC0000011}},            /* consistent */
+  {"jneq",     {"b?", 0x80000012}},
+  {"jnequ",    {"b?", 0x80000012}},
+  {"jeql",     {"b?", 0x80000013}},
+  {"jeqlu",    {"b?", 0x80000013}},
+  {"jgtr",     {"b?", 0x80000014}},
+  {"jleq",     {"b?", 0x80000015}},
+/* un-used opcodes here */
+  {"jgeq",     {"b?", 0x80000018}},
+  {"jlss",     {"b?", 0x80000019}},
+  {"jgtru",    {"b?", 0x8000001a}},
+  {"jlequ",    {"b?", 0x8000001b}},
+  {"jvc",      {"b?", 0x8000001c}},
+  {"jvs",      {"b?", 0x8000001d}},
+  {"jgequ",    {"b?", 0x8000001e}},
+  {"jcc",      {"b?", 0x8000001e}},
+  {"jlssu",    {"b?", 0x8000001f}},
+  {"jcs",      {"b?", 0x8000001f}},
+
+  {"jacbw",    {"rwrwmwb!", 0xC000003d}},
+  {"jacbf",    {"rfrfmfb!", 0xC000004f}},
+  {"jacbd",    {"rdrdmdb!", 0xC000006f}},
+  {"jacbb",    {"rbrbmbb!", 0xC000009d}},
+  {"jacbl",    {"rlrlmlb!", 0xC00000f1}},
+  {"jacbg",    {"rgrgmgb!", 0xC0004ffd}},
+  {"jacbh",    {"rhrhmhb!", 0xC0006ffd}},
+
+  {"jbs",      {"rlvbb?", 0x800000e0}},
+  {"jbc",      {"rlvbb?", 0x800000e1}},
+  {"jbss",     {"rlvbb?", 0x800000e2}},
+  {"jbcs",     {"rlvbb?", 0x800000e3}},
+  {"jbsc",     {"rlvbb?", 0x800000e4}},
+  {"jbcc",     {"rlvbb?", 0x800000e5}},
+  {"jbssi",    {"rlvbb?", 0x800000e6}},
+  {"jbcci",    {"rlvbb?", 0x800000e7}},
+  {"jlbs",     {"rlb?", 0x800000e8}},  /* JF changed from rlvbb? */
+  {"jlbc",     {"rlb?", 0x800000e9}},  /* JF changed from rlvbb? */
+
+  {"jaoblss",  {"rlmlb:", 0xC00000f2}},
+  {"jaobleq",  {"rlmlb:", 0xC00000f3}},
+  {"jsobgeq",  {"mlb:", 0xC00000f4}},  /* JF was rlmlb: */
+  {"jsobgtr",  {"mlb:", 0xC00000f5}},  /* JF was rlmlb: */
 
 /* CASEx has no branch addresses in our conception of it. */
 /* You should use ".word ..." statements after the "case ...". */
@@ -1742,14 +1722,11 @@ static const struct vot
 
 char *
 vip_begin (synthetic_too, immediate, indirect, displen)
-     int synthetic_too;                /* TRUE means include jXXX op-codes. */
+     int synthetic_too;                /* 1 means include jXXX op-codes. */
      char *immediate, *indirect, *displen;
 {
-  register const struct vot *vP;       /* scan votstrs */
-  register char *retval;       /* error text */
-
-  char *hash_insert ();                /*  */
-  char *hash_new ();           /* lies */
+  const struct vot *vP;                /* scan votstrs */
+  char *retval;                        /* error text */
 
   if ((op_hash = hash_new ()))
     {
@@ -1787,10 +1764,11 @@ vip_begin (synthetic_too, immediate, indirect, displen)
  * We don't have to do any cleanup ourselves: all of our operand
  * symbol table is static, and free()ing it is naughty.
  */
+static void 
 vip_end ()
 {
 }
-\f
+
 /*
  *                  v i p ( )
  *
@@ -1832,21 +1810,19 @@ vip (vitP, instring)
   /* with '\0' temporarily). */
   register vax_opcodeT oc;     /* Op-code of this instruction. */
 
-  struct vot_wot *hash_find ();
   char *vip_op ();
 
   bug = "";
   if (*instring == ' ')
     ++instring;                        /* Skip leading whitespace. */
-  for (p = instring; *p && *p != ' '; p++)
-    ;                          /* MUST end in end-of-string or exactly 1 space. */
+  for (p = instring; *p && *p != ' '; p++);;   /* MUST end in end-of-string or exactly 1 space. */
   /* Scanned up to end of operation-code. */
   /* Operation-code is ended with whitespace. */
   if (p - instring == 0)
     {
       vitP->vit_error = "No operator";
       count = 0;
-      bzero (vitP->vit_opcode, sizeof (vitP->vit_opcode));
+      memset (vitP->vit_opcode, '\0', sizeof (vitP->vit_opcode));
     }
   else
     {
@@ -1857,13 +1833,13 @@ vip (vitP, instring)
        * pointing to character just past that.
        * We trust instring points to an op-name, with no whitespace.
        */
-      vwP = hash_find (op_hash, instring);
+      vwP = (struct vot_wot *) hash_find (op_hash, instring);
       *p = c;                  /* Restore char after op-code. */
       if (vwP == 0)
        {
          vitP->vit_error = "Unknown operator";
          count = 0;
-         bzero (vitP->vit_opcode, sizeof (vitP->vit_opcode));
+         memset (vitP->vit_opcode, '\0', sizeof (vitP->vit_opcode));
        }
       else
        {
@@ -1944,7 +1920,7 @@ char answer[100];         /* human types a line of vax assembler here */
 char *mybug;                   /* "" or an internal logic diagnostic */
 int mycount;                   /* number of operands */
 struct vop *myvop;             /* scan operands from myvit */
-int mysynth;                   /* TRUE means want synthetic opcodes. */
+int mysynth;                   /* 1 means want synthetic opcodes. */
 char my_immediate[200];
 char my_indirect[200];
 char my_displen[200];
@@ -2028,7 +2004,7 @@ main ()
 
 /* end of vax_ins_parse.c */
 
- /* JF this used to be a separate file also */
+/* JF this used to be a separate file also */
 /* vax_reg_parse.c - convert a VAX register name to a number */
 
 /* Copyright (C) 1987 Free Software Foundation, Inc. A part of GNU. */
@@ -2218,14 +2194,10 @@ vax_reg_parse (c1, c2, c3)      /* 3 chars of register name */
  */
 
 
- /* vax registers we need to know */
-/* JF #define SP      (14)
+/* vax registers we need to know */
+/* JF #define SP      (14) */
 /* JF for one big happy file #define PC      (15) */
 
- /* useful ideas */
-/* #define TRUE    (1) */
-/* #define FALSE   (0) */
-\f
 /*
  * Because this module is useful for both VMS and UN*X style assemblers
  * and because of the variety of UN*X assemblers we must recognise
@@ -2235,10 +2207,10 @@ vax_reg_parse (c1, c2, c3)      /* 3 chars of register name */
  * 3 concepts that DEC writes '#', '@', '^'.
  */
 
- /* character tests */
-#define VIP_IMMEDIATE 01 /* Character is like DEC # */
-#define VIP_INDIRECT  02 /* Char is like DEC @ */
-#define VIP_DISPLEN   04 /* Char is like DEC ^ */
+/* character tests */
+#define VIP_IMMEDIATE 01       /* Character is like DEC # */
+#define VIP_INDIRECT  02       /* Char is like DEC @ */
+#define VIP_DISPLEN   04       /* Char is like DEC ^ */
 
 #define IMMEDIATEP(c)  (vip_metacharacters [(c)&0xff]&VIP_IMMEDIATE)
 #define INDIRECTP(c)   (vip_metacharacters [(c)&0xff]&VIP_INDIRECT)
@@ -2254,24 +2226,25 @@ vax_reg_parse (c1, c2, c3)      /* 3 chars of register name */
 #define S VIP_INDIRECT,
 #define D VIP_DISPLEN,
 static const char
-vip_metacharacters[256] = {
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*^@ ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O*/
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^_*/
-_ _ _ _ I _ _ _ _ _ S _ _ _ _ _/*sp !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /*/
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?*/
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*@  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O*/
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _*/
-D _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*`  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o*/
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/*p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~  ^?*/
-
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  vip_metacharacters[256] =
+{
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /* ^@ ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O*/
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /* ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^_ */
+  _ _ _ _ I _ _ _ _ _ S _ _ _ _ _      /* sp !  "  #  $  %  & '  (  )  *  +  ,  -  .  / */
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /*0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?*/
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /*@  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O*/
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /*P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _*/
+  D _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /*`  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o*/
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      /*p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~  ^?*/
+
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
 };
 #undef _
 #undef I
@@ -2284,38 +2257,44 @@ static char vip_metacharacters[256];
 #if 0
 static
 #ifdef __GNUC__
-inline
+  inline
 #endif
 static void
-vip_op_1(bit,syms)
-int bit;
-char *syms;
+vip_op_1 (bit, syms)
+     int bit;
+     char *syms;
 {
   unsigned char t;
 
-  while(t= *syms++)
-    vip_metacharacters[t]|=bit;
+  while (t = *syms++)
+    vip_metacharacters[t] |= bit;
 }
+
 #else
 #define vip_op_1(bit,syms) {           \
-  unsigned char t;                     \
-  char *table=vip_metacharacters;      \
-  while(t= *syms++)                    \
-    table[t]|=bit;                     \
- }
+                                           unsigned char t;                    \
+                                               char *table=vip_metacharacters; \
+                                                   while(t= *syms++)                   \
+                                                       table[t]|=bit;                  \
                                                  }
 #endif
 
+static void 
 vip_op_defaults (immediate, indirect, displen) /* can be called any time */
-     char *immediate,          /* Strings of characters for each job. */
-     *indirect, *displen;      /* more arguments may appear in future! */
+     char *immediate;          /* Strings of characters for each job. */
+     char *indirect;
+     char *displen;            /* more arguments may appear in future! */
 {
   vip_op_1 (VIP_IMMEDIATE, immediate);
   vip_op_1 (VIP_INDIRECT, indirect);
   vip_op_1 (VIP_DISPLEN, displen);
+
+  return;
 }
-#endif
 
+#endif
 \f
+
 /*
  * Dec defines the semantics of address modes (and values)
  * by a two-letter code, explained here.
@@ -2360,14 +2339,14 @@ vip_op_defaults (immediate, indirect, displen)  /* can be called any time */
  *
  * After parsing we have:
  *
- * at                     TRUE if leading '@' (or Un*x '*')
+ * at                     1 if leading '@' (or Un*x '*')
  * len                    takes one value from " bilsw". eg B^ -> 'b'.
- * hash                   TRUE if leading '#' (or Un*x '$')
+ * hash                   1 if leading '#' (or Un*x '$')
  * expr_begin, expr_end   the expression we did not parse
  *                        even though we don't interpret it, we make use
  *                        of its presence or absence.
  * sign                   -1: -(Rn)    0: absent    +1: (Rn)+
- * paren                  TRUE if () are around register
+ * paren                  1 if () are around register
  * reg                    major register number 0:15    -1 means absent
  * ndx                    index register number 0:15    -1 means absent
  *
@@ -2375,39 +2354,40 @@ vip_op_defaults (immediate, indirect, displen)  /* can be called any time */
  */
 \f
 char *                         /* (code here) bug message, "" = OK */
- /* our code bug, NOT bad assembly language */
+/* our code bug, NOT bad assembly language */
 vip_op (optext, vopP)
-     char *optext;             /* user's input string e.g.: */
- /* "@B^foo@bar(AP)[FP]:" */
-     struct vop *vopP;         /* In: vop_access, vop_width. */
- /* Out: _ndx, _reg, _mode, _short, _warn, */
- /* _error _expr_begin, _expr_end, _nbytes. */
- /* vop_nbytes : number of bytes in a datum. */
+     /* user's input string e.g.: "@B^foo@bar(AP)[FP]:" */
+     char *optext;
+     /* Input fields: vop_access, vop_width.
+       Output fields: _ndx, _reg, _mode, _short, _warn,
+       _error _expr_begin, _expr_end, _nbytes.
+       vop_nbytes : number of bytes in a datum. */
+     struct vop *vopP;
 {
   char *p;                     /* track operand text forward */
   char *q;                     /* track operand text backward */
-  int at;                      /* TRUE if leading '@' ('*') seen */
+  int at;                      /* 1 if leading '@' ('*') seen */
   char len;                    /* one of " bilsw" */
-  int hash;                    /* TRUE if leading '#' ('$') seen */
-  int sign;                    /* -1, 0 or +1 */
-  int paren;                   /* TRUE if () surround register */
-  int reg;                     /* register number, -1:absent */
-  int ndx;                     /* index register number -1:absent */
+  int hash;                    /* 1 if leading '#' ('$') seen */
+  int sign = 0;                        /* -1, 0 or +1 */
+  int paren = 0;               /* 1 if () surround register */
+  int reg = 0;                 /* register number, -1:absent */
+  int ndx = 0;                 /* index register number -1:absent */
   char *bug;                   /* report any logic error in here, ""==OK */
   char *err;                   /* report illegal operand, ""==OK */
   /* " " is a FAKE error: means we won */
   /* ANY err that begins with ' ' is a fake. */
   /* " " is converted to "" before return */
   char *wrn;                   /* warn about weird modes pf address */
-  char *oldq;                  /* preserve q in case we backup */
-  int mode;                    /* build up 4-bit operand mode here */
+  char *oldq = NULL;           /* preserve q in case we backup */
+  int mode = 0;                        /* build up 4-bit operand mode here */
   /* note: index mode is in ndx, this is */
   /* the major mode of operand address */
-/*
- * Notice how we move wrong-arg-type bugs INSIDE this module: if we
- * get the types wrong below, we lose at compile time rather than at
- * lint or run time.
- */
+  /*
       * Notice how we move wrong-arg-type bugs INSIDE this module: if we
       * get the types wrong below, we lose at compile time rather than at
       * lint or run time.
       */
   char access;                 /* vop_access. */
   char width;                  /* vop_width. */
 
@@ -2425,17 +2405,17 @@ vip_op (optext, vopP)
     p++;                       /* skip over whitespace */
 
   if (at = INDIRECTP (*p))
-    {                          /* TRUE if *p=='@'(or '*' for Un*x) */
+    {                          /* 1 if *p=='@'(or '*' for Un*x) */
       p++;                     /* at is determined */
       if (*p == ' ')           /* Expect all whitespace reduced to ' '. */
        p++;                    /* skip over whitespace */
     }
 
   /*
-   * This code is subtle. It tries to detect all legal (letter)'^'
-   * but it doesn't waste time explicitly testing for premature '\0' because
-   * this case is rejected as a mismatch against either (letter) or '^'.
-   */
+        * This code is subtle. It tries to detect all legal (letter)'^'
+        * but it doesn't waste time explicitly testing for premature '\0' because
+        * this case is rejected as a mismatch against either (letter) or '^'.
+        */
   {
     register char c;
 
@@ -2451,16 +2431,16 @@ vip_op (optext, vopP)
   if (*p == ' ')               /* Expect all whitespace reduced to ' '. */
     p++;                       /* skip over whitespace */
 
-  if (hash = IMMEDIATEP (*p))  /* TRUE if *p=='#' ('$' for Un*x) */
+  if (hash = IMMEDIATEP (*p))  /* 1 if *p=='#' ('$' for Un*x) */
     p++;                       /* hash is determined */
 
   /*
-   * p points to what may be the beginning of an expression.
-   * We have peeled off the front all that is peelable.
-   * We know at, len, hash.
-   *
-   * Lets point q at the end of the text and parse that (backwards).
-   */
+        * p points to what may be the beginning of an expression.
+        * We have peeled off the front all that is peelable.
+        * We know at, len, hash.
+        *
+        * Lets point q at the end of the text and parse that (backwards).
+        */
 
   for (q = p; *q; q++)
     ;
@@ -2472,13 +2452,13 @@ vip_op (optext, vopP)
   /* run back over *p */
 
   /*
-   * As a matter of policy here, we look for [Rn], although both Rn and S^#
-   * forbid [Rn]. This is because it is easy, and because only a sick
-   * cyborg would have [...] trailing an expression in a VAX-like assembler.
-   * A meticulous parser would first check for Rn followed by '(' or '['
-   * and not parse a trailing ']' if it found another. We just ban expressions
-   * ending in ']'.
-   */
+        * As a matter of policy here, we look for [Rn], although both Rn and S^#
+        * forbid [Rn]. This is because it is easy, and because only a sick
+        * cyborg would have [...] trailing an expression in a VAX-like assembler.
+        * A meticulous parser would first check for Rn followed by '(' or '['
+        * and not parse a trailing ']' if it found another. We just ban expressions
+        * ending in ']'.
+        */
   if (*q == ']')
     {
       while (q >= p && *q != '[')
@@ -2499,9 +2479,9 @@ vip_op (optext, vopP)
          else
            ndx = -1;
          /*
-          * Since we saw a ']' we will demand a register name in the [].
-          * If luser hasn't given us one: be rude.
-          */
+                        * Since we saw a ']' we will demand a register name in the [].
+                        * If luser hasn't given us one: be rude.
+                        */
          if (ndx < 0)
            err = "bad register in []";
          else if (ndx == PC)
@@ -2514,10 +2494,10 @@ vip_op (optext, vopP)
     ndx = -1;                  /* no ']', so no iNDeX register */
 
   /*
-   * If err = "..." then we lost: run away.
-   * Otherwise ndx == -1 if there was no "[...]".
-   * Otherwise, ndx is index register number, and q points before "[...]".
-   */
+        * If err = "..." then we lost: run away.
+        * Otherwise ndx == -1 if there was no "[...]".
+        * Otherwise, ndx is index register number, and q points before "[...]".
+        */
 \f
   if (*q == ' ' && q >= p)     /* Expect all whitespace reduced to ' '. */
     q--;
@@ -2535,7 +2515,7 @@ vip_op (optext, vopP)
 
       if (*q == ')' && q > p + 2)
        {
-         paren = TRUE;         /* assume we have "(...)" */
+         paren = 1;            /* assume we have "(...)" */
          while (q >= p && *q != '(')
            q--;
          /* either q<p or we got matching '(' */
@@ -2562,7 +2542,7 @@ vip_op (optext, vopP)
              if (reg < 0)
                {
                  /* JF allow parenthasized expressions.  I hope this works */
-                 paren = FALSE;
+                 paren = 0;
                  while (*q != ')')
                    q++;
                  /* err = "unknown register in ()"; */
@@ -2576,20 +2556,20 @@ vip_op (optext, vopP)
            }
          /*
           * If err == "..." then we lost.
-          * Otherwise paren==TRUE and reg = register in "()".
+          * Otherwise paren==1 and reg = register in "()".
           */
        }
       else
-       paren = FALSE;
+       paren = 0;
       /*
        * If err == "..." then we lost.
        * Otherwise, q points just before "(Rn)", if any.
-       * If there was a "(...)" then paren==TRUE, and reg is the register.
+       * If there was a "(...)" then paren==1, and reg is the register.
        */
 \f
       /*
        * We should only seek '-' of "-(...)" if:
-       *   we saw "(...)"                    paren == TRUE
+       *   we saw "(...)"                    paren == 1
        *   we have no errors so far          ! *err
        *   we did not see '+' of "(...)+"    sign < 1
        * We don't check len. We want a specific error message later if
@@ -2680,7 +2660,7 @@ vip_op (optext, vopP)
        err = " ";
     }
 \f
-/* Since nobody seems to use it: comment this 'feature'(?) out for now. */
+  /* Since nobody seems to use it: comment this 'feature'(?) out for now. */
 #ifdef NEVER
   /*
    * Case of stand-alone operand. e.g. ".long foo"
@@ -2754,12 +2734,12 @@ vip_op (optext, vopP)
   /*
    * Case of S^#.
    *
-   * in:  at       FALSE
+   * in:  at       0
    *      len      's'               definition
-   *      hash     TRUE              demand
+   *      hash     1              demand
    *      p:q                        demand not empty
-   *      sign     0                 by paren==FALSE
-   *      paren    FALSE             by "()" scan logic because "S^" seen
+   *      sign     0                 by paren==0
+   *      paren    0             by "()" scan logic because "S^" seen
    *      reg      -1                or nn by mistake
    *      ndx      -1
    *
@@ -2786,8 +2766,8 @@ vip_op (optext, vopP)
              reg = 0;
            }
          /*
-          * We have all the expression we will ever get.
-          */
+                        * We have all the expression we will ever get.
+                        */
          if (p > q)
            err = "S^# needs expression";
          else if (access == 'r')
@@ -2803,12 +2783,12 @@ vip_op (optext, vopP)
   /*
    * Case of -(Rn), which is weird case.
    *
-   * in:  at       FALSE
+   * in:  at       0
    *      len      '
-   *      hash     FALSE
+   *      hash     0
    *      p:q      q<p
    *      sign     -1                by definition
-   *      paren    TRUE              by definition
+   *      paren    1              by definition
    *      reg      present           by definition
    *      ndx      optional
    *
@@ -2840,8 +2820,8 @@ vip_op (optext, vopP)
    */
   if (paren && !sign && !hash && !at && len == ' ' && p > q)
     {
-      at = TRUE;
-      paren = FALSE;
+      at = 1;
+      paren = 0;
     }
 
   /*
@@ -2849,10 +2829,10 @@ vip_op (optext, vopP)
    *
    * in:  at
    *      len      ' '
-   *      hash     FALSE
+   *      hash     0
    *      p:q      q<p
    *      sign     +1                by definition
-   *      paren    TRUE              by definition
+   *      paren    1              by definition
    *      reg      present           by definition
    *      ndx      optional
    *
@@ -2882,10 +2862,10 @@ vip_op (optext, vopP)
    *
    * in:  at
    *      len      ' ' or 'i'
-   *      hash     TRUE              by definition
+   *      hash     1              by definition
    *      p:q
    *      sign     0
-   *      paren    FALSE
+   *      paren    0
    *      reg      absent
    *      ndx      optional
    *
@@ -2906,18 +2886,18 @@ vip_op (optext, vopP)
          if (reg >= 0)
            {
              /*
-             * SHIT! we saw #Rnn! Put the Rnn back into the expression.
-             * By using oldq, we don't need to know how long Rnn was.
-             * KLUDGE!
-             */
+              * SHIT! we saw #Rnn! Put the Rnn back into the expression.
+              * By using oldq, we don't need to know how long Rnn was.
+              * KLUDGE!
+              */
              q = oldq;
              reg = -1;         /* no register any more */
            }
          err = " ";            /* win */
 
-               /* JF a bugfix, I think! */
-         if(at && access=='a')
-           vopP->vop_nbytes=4;
+         /* JF a bugfix, I think! */
+         if (at && access == 'a')
+           vopP->vop_nbytes = 4;
 
          mode = (at ? 9 : 8);
          reg = PC;
@@ -2927,7 +2907,7 @@ vip_op (optext, vopP)
     }
   /*
    * If !*err, then        sign == 0
-   *                       hash == FALSE
+   *                       hash == 0
    */
 \f
   /*
@@ -2936,10 +2916,10 @@ vip_op (optext, vopP)
    *
    * in:  at       optional
    *      len      ' '
-   *      hash     FALSE             by program logic
+   *      hash     0             by program logic
    *      p:q      empty
    *      sign     0                 by program logic
-   *      paren    FALSE             by definition
+   *      paren    0             by definition
    *      reg      present           by definition
    *      ndx      optional
    *
@@ -2965,12 +2945,12 @@ vip_op (optext, vopP)
       else
        {
          /*
-         * Idea here is to detect from length of datum
-         * and from register number if we will touch PC.
-         * Warn if we do.
-         * vop_nbytes is number of bytes in operand.
-         * Compute highest byte affected, compare to PC0.
-         */
+          * Idea here is to detect from length of datum
+          * and from register number if we will touch PC.
+          * Warn if we do.
+          * vop_nbytes is number of bytes in operand.
+          * Compute highest byte affected, compare to PC0.
+          */
          if ((vopP->vop_nbytes + reg * 4) > 60)
            wrn = "PC part of operand unpredictable";
          err = " ";            /* win */
@@ -2978,29 +2958,29 @@ vip_op (optext, vopP)
        }
     }
   /*
-   * If !*err,        sign  == 0
-   *                  hash  == FALSE
-   *                  paren == TRUE  OR reg==-1
-   */
+        * If !*err,        sign  == 0
+        *                  hash  == 0
+        *                  paren == 1  OR reg==-1
+        */
 \f
   /*
-   * Rest of cases fit into one bunch.
-   *
-   * in:  at       optional
-   *      len      ' ' or 'b' or 'w' or 'l'
-   *      hash     FALSE             by program logic
-   *      p:q      expected          (empty is not an error)
-   *      sign     0                 by program logic
-   *      paren    optional
-   *      reg      optional
-   *      ndx      optional
-   *
-   * out: mode     10 + @ + len
-   *      reg      optional
-   *      len      ' ' or 'b' or 'w' or 'l'
-   *      exp                        maybe empty
-   *      ndx      optional          warn if same as reg
-   */
+        * Rest of cases fit into one bunch.
+        *
+        * in:  at       optional
+        *      len      ' ' or 'b' or 'w' or 'l'
+        *      hash     0             by program logic
+        *      p:q      expected          (empty is not an error)
+        *      sign     0                 by program logic
+        *      paren    optional
+        *      reg      optional
+        *      ndx      optional
+        *
+        * out: mode     10 + @ + len
+        *      reg      optional
+        *      len      ' ' or 'b' or 'w' or 'l'
+        *      exp                        maybe empty
+        *      ndx      optional          warn if same as reg
+        */
   if (!*err)
     {
       err = " ";               /* win (always) */
@@ -3042,19 +3022,19 @@ vip_op (optext, vopP)
 \f
 /*
 
-Summary of vip_op outputs.
+  Summary of vip_op outputs.
 
-                       mode    reg     len     ndx
-(Rn) => @Rn
-{@}Rn                  5+@     n       ' '     optional
-branch operand         0       -1      ' '     -1
-S^#foo                 0       -1      's'     -1
--(Rn)                  7       n       ' '     optional
-{@}(Rn)+               8+@     n       ' '     optional
-{@}#foo, no S^         8+@     PC      " i"    optional
-{@}{q^}{(Rn)}          10+@+q  option  " bwl"  optional
+  mode reg     len     ndx
+  (Rn) => @Rn
+  {@}Rn                        5+@     n       ' '     optional
+  branch operand               0       -1      ' '     -1
+  S^#foo                       0       -1      's'     -1
+  -(Rn)                        7       n       ' '     optional
+  {@}(Rn)+             8+@     n       ' '     optional
+  {@}#foo, no S^               8+@     PC      " i"    optional
+  {@}{q^}{(Rn)}                10+@+q  option  " bwl"  optional
 
-*/
+  */
 \f
 #ifdef TEST                    /* #Define to use this testbed. */
 
@@ -3190,7 +3170,7 @@ mumble (text, value)
 
 const int md_short_jump_size = 3;
 const int md_long_jump_size = 6;
-const int md_reloc_size = 8;           /* Size of relocation record */
+const int md_reloc_size = 8;   /* Size of relocation record */
 
 void
 md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
@@ -3215,11 +3195,11 @@ md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
 {
   long offset;
 
-  offset = to_addr - to_symbol->sy_value;
+  offset = to_addr - S_GET_VALUE (to_symbol);
   *ptr++ = 0x17;
   *ptr++ = 0x9F;
   md_number_to_chars (ptr, offset, 4);
-  fix_new (frag, ptr - frag->fr_literal, 4, to_symbol, (symbolS *) 0, (long) 0, 0);
+  fix_new (frag, ptr - frag->fr_literal, 4, to_symbol, (symbolS *) 0, (long) 0, 0, NO_RELOC);
 }
 
 int
@@ -3247,7 +3227,7 @@ md_parse_option (argP, cntP, vecP)
 
     case 'd':
     case 't':
-      opt= **argP;
+      opt = **argP;
       if (**argP)
        {                       /* Rest of argument is filename. */
          temp_name = *argP;
@@ -3264,11 +3244,11 @@ md_parse_option (argP, cntP, vecP)
        }
       else
        {
-         as_warn ("I expected a filename after -%c.",opt);
+         as_warn ("I expected a filename after -%c.", opt);
          temp_name = "{absent}";
        }
 
-      if(opt=='d')
+      if (opt == 'd')
        as_warn ("Displacement length %s ignored!", temp_name);
       else
        as_warn ("I don't need or use temp. file \"%s\".", temp_name);
@@ -3279,13 +3259,13 @@ md_parse_option (argP, cntP, vecP)
       break;
 
 #ifdef VMS
-    case '+':  /* For g++ */
+    case '+':                  /* For g++ */
       break;
 
-    case 'h':  /* No hashing of mixed-case names */
+    case 'h':                  /* No hashing of mixed-case names */
       break;
 
-    case 'H':  /* Show new symbol after hash truncation */
+    case 'H':                  /* Show new symbol after hash truncation */
       break;
 #endif
 
@@ -3306,7 +3286,7 @@ md_undefined_symbol (name)
   return 0;
 }
 
-/* Parse an operand that is machine-specific.  
+/* Parse an operand that is machine-specific.
    We just return without modifying the expression if we have nothing
    to do.  */
 
@@ -3323,7 +3303,7 @@ md_section_align (segment, size)
      segT segment;
      long size;
 {
-  return size;         /* Byte alignment is fine */
+  return size;                 /* Byte alignment is fine */
 }
 
 /* Exactly what point is a PC-relative offset relative TO?
@@ -3335,3 +3315,5 @@ md_pcrel_from (fixP)
 {
   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
 }
+
+/* end of tc-vax.c */
This page took 0.065313 seconds and 4 git commands to generate.