i386.c (ix86_expand_move): Never add clobbers to move patterns.
authorJan Hubicka <hubicka@freesoft.cz>
Wed, 1 Dec 1999 16:50:46 +0000 (17:50 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 1 Dec 1999 16:50:46 +0000 (16:50 +0000)
* i386.c (ix86_expand_move): Never add clobbers to move patterns.
* i386.md (movsi_xor): New.
(movsi_or): New.
(movsi_1, movhi_1, movqi_1): Remove.
(movsi_2): Rename to movsi_1.
(movhi_2): Rename to movhi_1.
(movqi_2): Rename to movqi_1.
(movdi_1): Remove; remove splitter.
(movdi_2): Rename to movdi_1.
(divmodsi4 splitter): Do not emit clobbers for move patterns.
(long move peep2): Do not create QI or HI mode mov0s
(mov -1,reg -> or peep2s): Enable again, rewrite to single peephole.

From-SVN: r30741

gcc/ChangeLog
gcc/c-gperf.h
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/configure
gcc/java/parse.c

index 8f3c7e1..bcc9e4b 100644 (file)
@@ -1,5 +1,18 @@
 Tue Nov 30 15:20:52 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>
 
+       * i386.c (ix86_expand_move): Never add clobbers to move patterns.
+       * i386.md (movsi_xor): New.
+       (movsi_or): New.
+       (movsi_1, movhi_1, movqi_1): Remove.
+       (movsi_2): Rename to movsi_1.
+       (movhi_2): Rename to movhi_1.
+       (movqi_2): Rename to movqi_1.
+       (movdi_1): Remove; remove splitter.
+       (movdi_2): Rename to movdi_1.
+       (divmodsi4 splitter): Do not emit clobbers for move patterns.
+       (long move peep2): Do not create QI or HI mode mov0s
+       (mov -1,reg -> or peep2s): Enable again, rewrite to single peephole.
+
        * i386.md (zero_extend?i?i2): Rewrite to expanders; new patterns,
        rewrite splitters.
 
index 4d85b1b..504c200 100644 (file)
@@ -1,4 +1,4 @@
-/* C code produced by gperf version 2.7.1 (19981006 egcs) */
+/* C code produced by gperf version 2.7 */
 /* Command-line: gperf -L C -F , 0, 0 -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ./c-parse.gperf  */
 /* Command-line: gperf -L C -F ', 0, 0' -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
 struct resword { const char *name; short token; enum rid rid; };
index 48b8845..e6f6114 100644 (file)
@@ -3614,7 +3614,6 @@ ix86_expand_move (mode, operands)
      rtx operands[];
 {
   int strict = (reload_in_progress || reload_completed);
-  int want_clobber = 0;
   rtx insn;
 
   if (flag_pic && mode == Pmode && symbolic_operand (operands[1], Pmode))
@@ -3653,24 +3652,9 @@ ix86_expand_move (mode, operands)
                   && ! standard_80387_constant_p (operands[1]))
            operands[1] = validize_mem (force_const_mem (mode, operands[1]));
        }
-      else
-       {
-         /* Try to guess when a cc clobber on the move might be fruitful.  */
-         if (!strict
-             && GET_CODE (operands[0]) == REG
-             && operands[1] == const0_rtx
-             && !flag_peephole2)
-           want_clobber = 1;
-       }
     }
 
   insn = gen_rtx_SET (VOIDmode, operands[0], operands[1]);
-  if (want_clobber)
-    {
-      rtx clob;
-      clob = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCmode, FLAGS_REG));
-      insn = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, insn, clob));
-    }
 
   emit_insn (insn);
 }
index 562f08f..6966cf2 100644 (file)
   "pop{l}\\t%0"
   [(set_attr "type" "pop")])
 
-(define_insn "*movsi_1"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,m")
-       (match_operand:SI 1 "general_operand" "rim,ri"))
+(define_insn "*movsi_xor"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operand:SI 1 "const0_operand" "i"))
    (clobber (reg:CC 17))]
-  "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
+  "reload_completed && (!TARGET_USE_MOV0 || optimize_size)"
+  "xor{l}\\t{%0, %0|%0, %0}"
+  [(set_attr "type" "alu1")
+   (set_attr "length" "2")])
+
+(define_insn "*movsi_or"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operand:SI 1 "immediate_operand" "i"))
+   (clobber (reg:CC 17))]
+  "reload_completed && GET_CODE (operands[1]) == CONST_INT
+   && INTVAL (operands[1]) == -1
+   && (TARGET_PENTIUM || optimize_size)"
   "*
 {
-  switch (get_attr_type (insn))
-    {
-    case TYPE_ALU1:
-      if (operands[1] != const0_rtx)
-       abort();
-      return \"xor{l}\\t{%0, %0|%0, %0}\";
-    case TYPE_LEA:
-      return \"lea{l}\\t{%1, %0|%0, %1}\";
-    default:
-      if (flag_pic && SYMBOLIC_CONST (operands[1]))
-       abort();
-      return \"mov{l}\\t{%1, %0|%0, %1}\";
-    }
+  operands[1] = constm1_rtx;
+  return \"or{l}\\t{%1, %0|%1, %0}\";
 }"
-  [(set (attr "type")
-     (cond [(and (match_operand:SI 1 "const0_operand" "")
-                (and (match_operand:SI 0 "register_operand" "")
-                     (eq (symbol_ref "TARGET_USE_MOV0") (const_int 0))))
-             (const_string "alu1")
-           (and (ne (symbol_ref "flag_pic") (const_int 0))
-                (match_operand:SI 1 "symbolic_operand" ""))
-             (const_string "lea")
-          ]
-          (const_string "imov")))])
+  [(set_attr "type" "alu1")
+   (set_attr "length" "3")])
 
-(define_insn "*movsi_2"
+(define_insn "*movsi_1"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,m")
        (match_operand:SI 1 "general_operand" "rinm,rin"))]
   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
 
 (define_insn "*movhi_1"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m")
-       (match_operand:HI 1 "general_operand" "rn,rm,rn"))
-   (clobber (reg:CC 17))]
-  "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
-  "*
-{
-  switch (get_attr_type (insn))
-    {
-    case TYPE_ALU1:
-      /* Clear the whole register -- smaller, faster, better.  */
-      if (operands[1] != const0_rtx)
-       abort();
-      return \"xor{l}\\t%k0, %k0\";
-    case TYPE_IMOVX:
-      return \"movz{wl|x}\\t{%1, %k0|%k0, %1}\";
-    default:
-      if (get_attr_length_prefix (insn) == 0)
-        return \"mov{l}\\t{%k1, %k0|%k0, %k1}\";
-      else
-        return \"mov{w}\\t{%1, %0|%0, %1}\";
-    }
-}"
-  [(set (attr "type")
-     (cond [(and (match_operand:HI 1 "const0_operand" "")
-                (and (match_operand:HI 0 "register_operand" "")
-                     (eq (symbol_ref "TARGET_USE_MOV0") (const_int 0))))
-             (const_string "alu1")
-           (and (ne (symbol_ref "TARGET_MOVX")
-                    (const_int 0))
-                (eq_attr "alternative" "1"))
-             (const_string "imovx")
-          ]
-          (const_string "imov")))
-    (set (attr "length_prefix")
-      (cond [(eq_attr "type" "imovx")
-              (const_string "0")
-            (and (eq_attr "alternative" "0")
-                 (eq (symbol_ref "TARGET_PARTIAL_REG_STALL")
-                     (const_int 0)))
-              (const_string "0")
-           ]
-           (const_string "1")))
-    ; There's no place to override just the immediate length
-    (set (attr "length")
-      (cond [(and (eq_attr "type" "imov")
-                 (and (eq_attr "length_prefix" "0")
-                      (match_operand:HI 1 "immediate_operand" "")))
-              (const_string "5")
-           ]
-           (const_string "*")))])
-
-(define_insn "*movhi_2"
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m")
        (match_operand:HI 1 "general_operand" "rn,rm,rn"))]
   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
   "*
 
 (define_insn "*movqi_1"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=q,q,*r,*r,m")
-       (match_operand:QI 1 "general_operand" "qn,qm,*rn,qm,qn"))
-   (clobber (reg:CC 17))]
-  "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
-  "*
-{
-  switch (get_attr_type (insn))
-    {
-    case TYPE_ALU1:
-      /* Clear the whole register -- smaller, faster, better.  */
-      if (operands[1] != const0_rtx)
-       abort();
-      return \"xor{l}\\t%k0, %k0\";
-    case TYPE_IMOVX:
-      if (!QI_REG_P (operands[1]) && GET_CODE (operands[1]) != MEM)
-       abort ();
-      return \"movz{bl|x}\\t{%1, %k0|%k0, %1}\";
-    default:
-      if (which_alternative == 2)
-        return \"mov{l}\\t{%k1, %k0|%k0, %k1}\";
-      else
-        return \"mov{b}\\t{%1, %0|%0, %1}\";
-    }
-}"
-  [(set (attr "type")
-     (cond [(and (match_operand:QI 1 "const0_operand" "")
-                (and (match_operand:QI 0 "register_operand" "")
-                     (eq (symbol_ref "TARGET_USE_MOV0") (const_int 0))))
-             (const_string "alu1")
-           (eq_attr "alternative" "3")
-             (const_string "imovx")
-           (and (ne (symbol_ref "TARGET_MOVX")
-                    (const_int 0))
-                (eq_attr "alternative" "1"))
-             (const_string "imovx")
-          ]
-          (const_string "imov")))
-    ; There's no place to override just the immediate length
-    (set (attr "length")
-      (cond [(and (eq_attr "type" "imov")
-                 (and (eq_attr "alternative" "2")
-                      (match_operand:HI 1 "immediate_operand" "")))
-              (const_string "5")
-           ]
-           (const_string "*")))])
-
-(define_insn "*movqi_2"
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=q,q,*r,*r,m")
        (match_operand:QI 1 "general_operand" "qn,qm,*rn,qm,qn"))]
   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
   "*
   ""
   "#")
 
-(define_insn "*movdi_1"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o")
-       (match_operand:DI 1 "general_operand" "riFo,riF"))
-   (clobber (reg:CC 17))]
-  "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
-  "#")
-
 (define_insn "*movdi_2"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o")
        (match_operand:DI 1 "general_operand" "riFo,riF"))]
 ;; %%% This multiword shite has got to go.
 (define_split
   [(set (match_operand:DI 0 "nonimmediate_operand" "")
-        (match_operand:DI 1 "general_operand" ""))
-   (clobber (reg:CC 17))]
-  "reload_completed"
-  [(parallel [(set (match_dup 2) (match_dup 5))
-             (clobber (reg:CC 17))])
-   (parallel [(set (match_dup 3) (match_dup 6))
-             (clobber (reg:CC 17))])]
-  "if (ix86_split_long_move (operands)) DONE;")
-  
-(define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "")
         (match_operand:DI 1 "general_operand" ""))]
   "reload_completed"
   [(set (match_dup 2) (match_dup 5))
        (zero_extend:DI (match_operand:SI 1 "register_operand" "")))
    (clobber (reg:CC 17))]
   "reload_completed && true_regnum (operands[0]) == true_regnum (operands[1])"
-  [(parallel [(set (match_dup 4) (const_int 0))
-             (clobber (reg:CC 17))])]
+  [(set (match_dup 4) (const_int 0))]
   "split_di (&operands[0], 1, &operands[3], &operands[4]);")
 
 (define_split 
    (clobber (reg:CC 17))]
   "reload_completed"
   [(set (match_dup 3) (match_dup 1))
-   (parallel [(set (match_dup 4) (const_int 0))
-             (clobber (reg:CC 17))])]
+   (set (match_dup 4) (const_int 0))]
   "split_di (&operands[0], 1, &operands[3], &operands[4]);")
 \f
 ;; Sign extension instructions
        (umod:SI (match_dup 1) (match_dup 2)))
    (clobber (reg:CC 17))]
   "reload_completed"
-  [(parallel [(set (match_dup 3) (const_int 0))
-             (clobber (reg:CC 17))])
+  [(set (match_dup 3) (const_int 0))
    (parallel [(set (match_dup 0)
                   (udiv:SI (match_dup 1) (match_dup 2)))
              (set (match_dup 3)
   "")
 
 (define_expand "udivmodhi4"
-  [(parallel [(set (match_dup 4) (const_int 0))
-             (clobber (reg:CC 17))])
+  [(set (match_dup 4) (const_int 0))
    (parallel [(set (match_operand:HI 0 "register_operand" "")
                   (udiv:HI (match_operand:HI 1 "register_operand" "")
                            (match_operand:HI 2 "nonimmediate_operand" "")))
         (const_int 0))]
   "! optimize_size && get_attr_length (insn) >= ix86_cost->large_insn
    && reg_dead_p (insn, gen_rtx_REG (CCmode, FLAGS_REG))
+   && ! TARGET_USE_MOV0
    && TARGET_SPLIT_LONG_MOVES"
   [(parallel [(set (match_dup 1) (const_int 0))
              (clobber (reg:CC 17))])
         (const_int 0))]
   "! optimize_size && get_attr_length (insn) >= ix86_cost->large_insn
    && reg_dead_p (insn, gen_rtx_REG (CCmode, FLAGS_REG))
+   && ! TARGET_USE_MOV0
    && TARGET_SPLIT_LONG_MOVES"
-  [(parallel [(set (match_dup 1) (const_int 0))
+  [(parallel [(set (match_dup 2) (const_int 0))
              (clobber (reg:CC 17))])
    (set (match_dup 0) (match_dup 1))]
-  "")
+  "operands[2] = gen_rtx_REG (SImode, true_regnum (operands[1]));")
 
 (define_peephole2
   [(match_scratch:QI 1 "q")
         (const_int 0))]
   "! optimize_size && get_attr_length (insn) >= ix86_cost->large_insn
    && reg_dead_p (insn, gen_rtx_REG (CCmode, FLAGS_REG))
+   && ! TARGET_USE_MOV0
    && TARGET_SPLIT_LONG_MOVES"
-  [(parallel [(set (match_dup 1) (const_int 0))
+  [(parallel [(set (match_dup 2) (const_int 0))
              (clobber (reg:CC 17))])
    (set (match_dup 0) (match_dup 1))]
-  "")
+  "operands[2] = gen_rtx_REG (SImode, true_regnum (operands[1]));")
 
 (define_peephole2
   [(match_scratch:SI 2 "r")
    && reg_dead_p (insn, gen_rtx_REG (CCmode, FLAGS_REG))"
   [(parallel [(set (match_dup 0) (const_int 0))
              (clobber (reg:CC 17))])]
-  "")
-
-;; ??? Rewrite these to not introduce the false dependancy.  
-;; Currently they'll trip update_life_info's sanity checks.
+  "operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]));")
 
 ;; For HI and SI modes, or $-1,reg is smaller than mov $-1,reg.
 (define_peephole2
-  [(set (match_operand:SI 0 "register_operand" "")
-       (const_int -1))]
-  "0 && (optimize_size || TARGET_PENTIUM)
-   && reg_dead_p (insn, gen_rtx_REG (CCmode, FLAGS_REG))"
-  [(parallel [(set (match_dup 0)
-                  (ior:SI (match_dup 0) (const_int -1)))
-             (clobber (reg:CC 17))])]
-  "")
-
-(define_peephole2
-  [(set (match_operand:HI 0 "register_operand" "")
+  [(set (match_operand 0 "register_operand" "")
        (const_int -1))]
-  "0 && (optimize_size || TARGET_PENTIUM)
+  "(GET_MODE (operands[0]) == HImode
+    || GET_MODE (operands[0]) == SImode)
+   && (optimize_size || TARGET_PENTIUM)
    && reg_dead_p (insn, gen_rtx_REG (CCmode, FLAGS_REG))"
-  [(parallel [(set (match_dup 0)
-                  (ior:HI (match_dup 0) (const_int -1)))
+  [(parallel [(set (match_dup 0) (const_int -1))
              (clobber (reg:CC 17))])]
-  "")
-
+  "operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]));")
 \f
 ;; Call-value patterns last so that the wildcard operand does not
 ;; disrupt insn-recog's switch tables.
index 3ad423c..962f147 100755 (executable)
@@ -1337,7 +1337,7 @@ else
 fi
 
 # Find some useful tools
-for ac_prog in mawk gawk nawk awk
+for ac_prog in gawk mawk nawk awk
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
index 58b96ca..9085803 100644 (file)
@@ -1,7 +1,6 @@
 
 /*  A Bison parser, made from ./parse.y
- by  GNU Bison version 1.25
-  */
+    by GNU Bison version 1.28  */
 
 #define YYBISON 1  /* Identify Bison output.  */
 
 #define yychar java_char
 #define yydebug java_debug
 #define yynerrs java_nerrs
-#define        PLUS_TK 258
-#define        MINUS_TK        259
-#define        MULT_TK 260
-#define        DIV_TK  261
-#define        REM_TK  262
-#define        LS_TK   263
-#define        SRS_TK  264
-#define        ZRS_TK  265
-#define        AND_TK  266
-#define        XOR_TK  267
-#define        OR_TK   268
-#define        BOOL_AND_TK     269
-#define        BOOL_OR_TK      270
-#define        EQ_TK   271
-#define        NEQ_TK  272
-#define        GT_TK   273
-#define        GTE_TK  274
-#define        LT_TK   275
-#define        LTE_TK  276
-#define        PLUS_ASSIGN_TK  277
-#define        MINUS_ASSIGN_TK 278
-#define        MULT_ASSIGN_TK  279
-#define        DIV_ASSIGN_TK   280
-#define        REM_ASSIGN_TK   281
-#define        LS_ASSIGN_TK    282
-#define        SRS_ASSIGN_TK   283
-#define        ZRS_ASSIGN_TK   284
-#define        AND_ASSIGN_TK   285
-#define        XOR_ASSIGN_TK   286
-#define        OR_ASSIGN_TK    287
-#define        PUBLIC_TK       288
-#define        PRIVATE_TK      289
-#define        PROTECTED_TK    290
-#define        STATIC_TK       291
-#define        FINAL_TK        292
-#define        SYNCHRONIZED_TK 293
-#define        VOLATILE_TK     294
-#define        TRANSIENT_TK    295
-#define        NATIVE_TK       296
-#define        PAD_TK  297
-#define        ABSTRACT_TK     298
-#define        MODIFIER_TK     299
-#define        DECR_TK 300
-#define        INCR_TK 301
-#define        DEFAULT_TK      302
-#define        IF_TK   303
-#define        THROW_TK        304
-#define        BOOLEAN_TK      305
-#define        DO_TK   306
-#define        IMPLEMENTS_TK   307
-#define        THROWS_TK       308
-#define        BREAK_TK        309
-#define        IMPORT_TK       310
-#define        ELSE_TK 311
-#define        INSTANCEOF_TK   312
-#define        RETURN_TK       313
-#define        VOID_TK 314
-#define        CATCH_TK        315
-#define        INTERFACE_TK    316
-#define        CASE_TK 317
-#define        EXTENDS_TK      318
-#define        FINALLY_TK      319
-#define        SUPER_TK        320
-#define        WHILE_TK        321
-#define        CLASS_TK        322
-#define        SWITCH_TK       323
-#define        CONST_TK        324
-#define        TRY_TK  325
-#define        FOR_TK  326
-#define        NEW_TK  327
-#define        CONTINUE_TK     328
-#define        GOTO_TK 329
-#define        PACKAGE_TK      330
-#define        THIS_TK 331
-#define        BYTE_TK 332
-#define        SHORT_TK        333
-#define        INT_TK  334
-#define        LONG_TK 335
-#define        CHAR_TK 336
-#define        INTEGRAL_TK     337
-#define        FLOAT_TK        338
-#define        DOUBLE_TK       339
-#define        FP_TK   340
-#define        ID_TK   341
-#define        REL_QM_TK       342
-#define        REL_CL_TK       343
-#define        NOT_TK  344
-#define        NEG_TK  345
-#define        ASSIGN_ANY_TK   346
-#define        ASSIGN_TK       347
-#define        OP_TK   348
-#define        CP_TK   349
-#define        OCB_TK  350
-#define        CCB_TK  351
-#define        OSB_TK  352
-#define        CSB_TK  353
-#define        SC_TK   354
-#define        C_TK    355
-#define        DOT_TK  356
-#define        STRING_LIT_TK   357
-#define        CHAR_LIT_TK     358
-#define        INT_LIT_TK      359
-#define        FP_LIT_TK       360
-#define        TRUE_TK 361
-#define        FALSE_TK        362
-#define        BOOL_LIT_TK     363
-#define        NULL_TK 364
+#define        PLUS_TK 257
+#define        MINUS_TK        258
+#define        MULT_TK 259
+#define        DIV_TK  260
+#define        REM_TK  261
+#define        LS_TK   262
+#define        SRS_TK  263
+#define        ZRS_TK  264
+#define        AND_TK  265
+#define        XOR_TK  266
+#define        OR_TK   267
+#define        BOOL_AND_TK     268
+#define        BOOL_OR_TK      269
+#define        EQ_TK   270
+#define        NEQ_TK  271
+#define        GT_TK   272
+#define        GTE_TK  273
+#define        LT_TK   274
+#define        LTE_TK  275
+#define        PLUS_ASSIGN_TK  276
+#define        MINUS_ASSIGN_TK 277
+#define        MULT_ASSIGN_TK  278
+#define        DIV_ASSIGN_TK   279
+#define        REM_ASSIGN_TK   280
+#define        LS_ASSIGN_TK    281
+#define        SRS_ASSIGN_TK   282
+#define        ZRS_ASSIGN_TK   283
+#define        AND_ASSIGN_TK   284
+#define        XOR_ASSIGN_TK   285
+#define        OR_ASSIGN_TK    286
+#define        PUBLIC_TK       287
+#define        PRIVATE_TK      288
+#define        PROTECTED_TK    289
+#define        STATIC_TK       290
+#define        FINAL_TK        291
+#define        SYNCHRONIZED_TK 292
+#define        VOLATILE_TK     293
+#define        TRANSIENT_TK    294
+#define        NATIVE_TK       295
+#define        PAD_TK  296
+#define        ABSTRACT_TK     297
+#define        MODIFIER_TK     298
+#define        DECR_TK 299
+#define        INCR_TK 300
+#define        DEFAULT_TK      301
+#define        IF_TK   302
+#define        THROW_TK        303
+#define        BOOLEAN_TK      304
+#define        DO_TK   305
+#define        IMPLEMENTS_TK   306
+#define        THROWS_TK       307
+#define        BREAK_TK        308
+#define        IMPORT_TK       309
+#define        ELSE_TK 310
+#define        INSTANCEOF_TK   311
+#define        RETURN_TK       312
+#define        VOID_TK 313
+#define        CATCH_TK        314
+#define        INTERFACE_TK    315
+#define        CASE_TK 316
+#define        EXTENDS_TK      317
+#define        FINALLY_TK      318
+#define        SUPER_TK        319
+#define        WHILE_TK        320
+#define        CLASS_TK        321
+#define        SWITCH_TK       322
+#define        CONST_TK        323
+#define        TRY_TK  324
+#define        FOR_TK  325
+#define        NEW_TK  326
+#define        CONTINUE_TK     327
+#define        GOTO_TK 328
+#define        PACKAGE_TK      329
+#define        THIS_TK 330
+#define        BYTE_TK 331
+#define        SHORT_TK        332
+#define        INT_TK  333
+#define        LONG_TK 334
+#define        CHAR_TK 335
+#define        INTEGRAL_TK     336
+#define        FLOAT_TK        337
+#define        DOUBLE_TK       338
+#define        FP_TK   339
+#define        ID_TK   340
+#define        REL_QM_TK       341
+#define        REL_CL_TK       342
+#define        NOT_TK  343
+#define        NEG_TK  344
+#define        ASSIGN_ANY_TK   345
+#define        ASSIGN_TK       346
+#define        OP_TK   347
+#define        CP_TK   348
+#define        OCB_TK  349
+#define        CCB_TK  350
+#define        OSB_TK  351
+#define        CSB_TK  352
+#define        SC_TK   353
+#define        C_TK    354
+#define        DOT_TK  355
+#define        STRING_LIT_TK   356
+#define        CHAR_LIT_TK     357
+#define        INT_LIT_TK      358
+#define        FP_LIT_TK       359
+#define        TRUE_TK 360
+#define        FALSE_TK        361
+#define        BOOL_LIT_TK     362
+#define        NULL_TK 363
 
 #line 48 "./parse.y"
 
@@ -433,7 +432,7 @@ typedef union {
 #define        YYFLAG          -32768
 #define        YYNTBASE        110
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 364 ? yytranslate[x] : 266)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 363 ? yytranslate[x] : 266)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -461,18 +460,18 @@ static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-    86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109
+     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109
 };
 
 #if YYDEBUG != 0
@@ -2256,7 +2255,8 @@ static const short yycheck[] = {     3,
 #define YYPURE 1
 
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
+/* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -2273,46 +2273,66 @@ static const short yycheck[] = {     3,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
    This special exception was added by the Free Software Foundation
    in version 1.24 of Bison.  */
 
-#ifndef alloca
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
 #ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
 #define alloca __builtin_alloca
 #else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
 #include <alloca.h>
 #else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+        instead, just don't use alloca.  */
 #include <malloc.h>
+#endif
 #else /* not MSDOS, or __TURBOC__ */
 #if defined(_AIX)
-#include <malloc.h>
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
  #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
+                and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
 #endif /* __hpux */
+#endif
 #endif /* not _AIX */
 #endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
 
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
+#else
+#define YYSTACK_ALLOC malloc
+#endif
 
 /* Note: there must be only one dollar sign in this file.
    It is replaced by the list of actions, each action
@@ -2322,8 +2342,8 @@ void *alloca ();
 #define yyclearin      (yychar = YYEMPTY)
 #define YYEMPTY                -2
 #define YYEOF          0
-#define YYACCEPT       return(0)
-#define YYABORT        return(1)
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT        goto yyabortlab
 #define YYERROR                goto yyerrlab1
 /* Like YYERROR except do call yyerror.
    This remains here temporarily to ease the
@@ -2404,12 +2424,12 @@ int yydebug;                    /*  nonzero means print parse trace     */
 #ifndef YYMAXDEPTH
 #define YYMAXDEPTH 10000
 #endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
 \f
+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
+
 #if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
 #define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
 #else                          /* not GNU C or C++ */
@@ -2421,7 +2441,7 @@ static void
 __yy_memcpy (to, from, count)
      char *to;
      char *from;
-     int count;
+     unsigned int count;
 {
   register char *f = from;
   register char *t = to;
@@ -2436,10 +2456,10 @@ __yy_memcpy (to, from, count)
 /* This is the most reliable way to avoid incompatibilities
    in available built-in functions on various systems.  */
 static void
-__yy_memcpy (char *to, char *from, int count)
+__yy_memcpy (char *to, char *from, unsigned int count)
 {
-  register char *f = from;
   register char *t = to;
+  register char *f = from;
   register int i = count;
 
   while (i-- > 0)
@@ -2449,7 +2469,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 217 "/usr/lib/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -2470,6 +2490,15 @@ __yy_memcpy (char *to, char *from, int count)
 #define YYPARSE_PARAM_DECL
 #endif /* not YYPARSE_PARAM */
 
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
+int yyparse (void);
+#endif
+#endif
+
 int
 yyparse(YYPARSE_PARAM_ARG)
      YYPARSE_PARAM_DECL
@@ -2498,6 +2527,7 @@ yyparse(YYPARSE_PARAM_ARG)
 #endif
 
   int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
 
 #ifdef YYPURE
   int yychar;
@@ -2582,18 +2612,32 @@ yynewstate:
       if (yystacksize >= YYMAXDEPTH)
        {
          yyerror("parser stack overflow");
+         if (yyfree_stacks)
+           {
+             free (yyss);
+             free (yyvs);
+#ifdef YYLSP_NEEDED
+             free (yyls);
+#endif
+           }
          return 2;
        }
       yystacksize *= 2;
       if (yystacksize > YYMAXDEPTH)
        yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+                  size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+                  size * (unsigned int) sizeof (*yyvsp));
 #ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+                  size * (unsigned int) sizeof (*yylsp));
 #endif
 #endif /* no yyoverflow */
 
@@ -4746,7 +4790,7 @@ case 495:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 543 "/usr/lib/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4941,6 +4985,30 @@ yyerrhandle:
 
   yystate = yyn;
   goto yynewstate;
+
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
 }
 #line 2343 "./parse.y"