[COMMITTED] algol68: consolidate relational standard operators

Jose E. Marchesi jemarch@gnu.org
Sun Apr 6 09:29:40 GMT 2025


---
 gcc/algol68/a68-low-bits.cc       |  17 ++
 gcc/algol68/a68-low-bools.cc      |  17 ++
 gcc/algol68/a68-low-chars.cc      |  53 ++++++
 gcc/algol68/a68-low-ints.cc       |  28 +--
 gcc/algol68/a68-low-prelude.cc    | 234 +++++++++++++++--------
 gcc/algol68/a68-low-reals.cc      |  24 +--
 gcc/algol68/a68-parser-prelude.cc | 304 +++++++++++++++---------------
 gcc/algol68/a68.h                 |  68 +++++--
 8 files changed, 469 insertions(+), 276 deletions(-)

diff --git a/gcc/algol68/a68-low-bits.cc b/gcc/algol68/a68-low-bits.cc
index afbcbe370a9..093f5581969 100644
--- a/gcc/algol68/a68-low-bits.cc
+++ b/gcc/algol68/a68-low-bits.cc
@@ -251,3 +251,20 @@ a68_bits_shift (tree shift, tree bits)
 				   bits,
 				   fold_build1 (ABS_EXPR, TREE_TYPE (shift), shift)));
 }
+
+/* Given two bits values, build an expression that calculates whether A = B.  */
+
+tree
+a68_bits_eq (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, EQ_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two bits values, build an expression that calculates whether A /=
+   B.  */
+
+tree
+a68_bits_ne (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, NE_EXPR, boolean_type_node, a, b);
+}
diff --git a/gcc/algol68/a68-low-bools.cc b/gcc/algol68/a68-low-bools.cc
index 01f0db17b71..0ed29bdd7dd 100644
--- a/gcc/algol68/a68-low-bools.cc
+++ b/gcc/algol68/a68-low-bools.cc
@@ -50,3 +50,20 @@ a68_bool_abs (tree val)
 {
   return fold_convert (a68_int_type, val);
 }
+
+/* Given two boolean values, build an expression that calculates whether A = B.  */
+
+tree
+a68_bool_eq (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, EQ_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two boolean values, build an expression that calculates whether A /=
+   B.  */
+
+tree
+a68_bool_ne (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, NE_EXPR, boolean_type_node, a, b);
+}
diff --git a/gcc/algol68/a68-low-chars.cc b/gcc/algol68/a68-low-chars.cc
index e1d57777e7d..7a21345940e 100644
--- a/gcc/algol68/a68-low-chars.cc
+++ b/gcc/algol68/a68-low-chars.cc
@@ -107,3 +107,56 @@ a68_char_abs (tree val)
 {
   return fold_convert (a68_int_type, val);
 }
+
+/* Given two characters, build an expression that calculates whether A = B.  */
+
+tree
+a68_char_eq (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, EQ_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two characters, build an expression that calculates whether A /=
+   B.  */
+
+tree
+a68_char_ne (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, NE_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two characters, build an expression that calculates
+   whether A < B.  */
+
+tree
+a68_char_lt (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, LT_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two characters, build an expression that calculates
+   whether A <= B.  */
+
+tree
+a68_char_le (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, LE_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two characters, build an expression that calculates
+   whether A > B.  */
+
+tree
+a68_char_gt (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, GT_EXPR, boolean_type_node, a, b);
+}
+
+/* Given two characters, build an expression that calculates
+   whether A >= B.  */
+
+tree
+a68_char_ge (tree a, tree b, location_t loc)
+{
+  return fold_build2_loc (loc, GE_EXPR, boolean_type_node, a, b);
+}
diff --git a/gcc/algol68/a68-low-ints.cc b/gcc/algol68/a68-low-ints.cc
index d23ff5e730f..0c90751cd95 100644
--- a/gcc/algol68/a68-low-ints.cc
+++ b/gcc/algol68/a68-low-ints.cc
@@ -185,54 +185,54 @@ a68_int_div (MOID_T *m, tree a, tree b, location_t loc)
    whether A = B.  */
 
 tree
-a68_int_eq (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_int_eq (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, EQ_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, EQ_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two integral values of mode M, build an expression that calculates
    whether A /= B.  */
 
 tree
-a68_int_ne (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_int_ne (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, NE_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, NE_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two integral values of mode M, build an expression that calculates
    whether A < B.  */
 
 tree
-a68_int_lt (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_int_lt (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, LT_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, LT_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two integral values of mode M, build an expression that calculates
    whether A <= B.  */
 
 tree
-a68_int_le (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_int_le (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, LE_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, LE_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two integral values of mode M, build an expression that calculates
    whether A > B.  */
 
 tree
-a68_int_gt (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_int_gt (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, GT_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, GT_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two integral values of mode M, build an expression that calculates
    whether A >= B.  */
 
 tree
-a68_int_ge (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_int_ge (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, GE_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, GE_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two integral values of mode M, build and expression that calculates the
@@ -251,7 +251,7 @@ a68_int_mod (MOID_T *m, tree a, tree b, location_t loc)
 
   r = save_expr (r);
   return fold_build3_loc (loc, COND_EXPR, CTYPE (m),
-			  a68_int_lt (m, r, build_int_cst (CTYPE (m), 0)),
+			  a68_int_lt (r, build_int_cst (CTYPE (m), 0)),
 			  a68_int_plus (m, r, a68_int_abs (b)),
 			  r);
 }
@@ -299,6 +299,6 @@ a68_int_pow (MOID_T *m, tree a, tree b, location_t loc)
   a68_add_stmt (p);
   tree calculate_p = a68_pop_range ();
   return fold_build3_loc (loc, COND_EXPR, CTYPE (m),
-			  a68_int_ge (m, b, zero),
+			  a68_int_ge (b, zero),
 			  calculate_p, zero);
 }
diff --git a/gcc/algol68/a68-low-prelude.cc b/gcc/algol68/a68-low-prelude.cc
index 22f4cc96a0f..9a66036717b 100644
--- a/gcc/algol68/a68-low-prelude.cc
+++ b/gcc/algol68/a68-low-prelude.cc
@@ -270,121 +270,183 @@ a68_lower_rdiv3 (NODE_T *p, LOW_CTX_T ctx)
 }
 
 tree
-a68_lower_eq3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_int_eq3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
 
-  MOID_T *m = MOID (p);
-  if (m == M_INT || m == M_LONG_INT || m == M_LONG_LONG_INT
-      || m == M_SHORT_INT || m == M_SHORT_SHORT_INT)
-    return a68_int_eq (m, op1, op2, a68_get_node_location (p));
-  else if (m == M_REAL || m == M_LONG_REAL || m == M_LONG_LONG_REAL)
-    return a68_real_eq (m, op1, op2, a68_get_node_location (p));
-  else
-    /* XXX */
-    return fold_build2_loc (a68_get_node_location (p),
-			    EQ_EXPR, CTYPE (MOID (p)), op1, op2);
+  return a68_int_eq (op1, op2, a68_get_node_location (p));
 }
 
 tree
-a68_lower_ne3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_int_ne3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
 
-  MOID_T *m = MOID (p);
-  if (m == M_INT || m == M_LONG_INT || m == M_LONG_LONG_INT
-      || m == M_SHORT_INT || m == M_SHORT_SHORT_INT)
-    return a68_int_ne (m, op1, op2, a68_get_node_location (p));
-  else if (m == M_REAL || m == M_LONG_REAL || m == M_LONG_LONG_REAL)
-    return a68_real_ne (m, op1, op2, a68_get_node_location (p));
-  else
-    /* XXX */
-    return fold_build2_loc (a68_get_node_location (p),
-			    NE_EXPR,
-			    CTYPE (MOID (p)),
-			    op1, op2);
+  return a68_int_ne (op1, op2, a68_get_node_location (p));
 }
 
 tree
-a68_lower_lt3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_int_lt3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
 
-  MOID_T *m = MOID (p);
-  if (m == M_INT || m == M_LONG_INT || m == M_LONG_LONG_INT
-      || m == M_SHORT_INT || m == M_SHORT_SHORT_INT)
-    return a68_int_lt (m, op1, op2, a68_get_node_location (p));
-  else if (m == M_REAL || m == M_LONG_REAL || m == M_LONG_LONG_REAL)
-    return a68_real_lt (m, op1, op2, a68_get_node_location (p));
-  else
-    /* XXX */
-    return fold_build2_loc (a68_get_node_location (p),
-			    LT_EXPR,
-			    CTYPE (MOID (p)),
-			    op1, op2);
+  return a68_int_lt (op1, op2, a68_get_node_location (p));
 }
 
 tree
-a68_lower_gt3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_int_le3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
 
-  MOID_T *m = MOID (p);
-  if (m == M_INT || m == M_LONG_INT || m == M_LONG_LONG_INT
-      || m == M_SHORT_INT || m == M_SHORT_SHORT_INT)
-    return a68_int_gt (m, op1, op2, a68_get_node_location (p));
-  else if (m == M_REAL || m == M_LONG_REAL || m == M_LONG_LONG_REAL)
-    return a68_real_gt (m, op1, op2, a68_get_node_location (p));
-  else
-    /* XXX */
-    return fold_build2_loc (a68_get_node_location (p),
-			    GT_EXPR,
-			    CTYPE (MOID (p)),
-			    op1, op2);
+  return a68_int_le (op1, op2, a68_get_node_location (p));
 }
 
 tree
-a68_lower_ge3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_int_gt3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
 
-  MOID_T *m = MOID (p);
-  if (m == M_INT || m == M_LONG_INT || m == M_LONG_LONG_INT
-      || m == M_SHORT_INT || m == M_SHORT_SHORT_INT)
-    return a68_int_ge (m, op1, op2, a68_get_node_location (p));
-  else if (m == M_REAL || m == M_LONG_REAL || m == M_LONG_LONG_REAL)
-    return a68_real_ge (m, op1, op2, a68_get_node_location (p));
-  else
-    /* XXX */
-    return fold_build2_loc (a68_get_node_location (p),
-			    GE_EXPR,
-			    CTYPE (MOID (p)),
-			    op1, op2);
+  return a68_int_gt (op1, op2, a68_get_node_location (p));
 }
 
 tree
-a68_lower_le3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_int_ge3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
 
-  MOID_T *m = MOID (p);
-  if (m == M_INT || m == M_LONG_INT || m == M_LONG_LONG_INT
-      || m == M_SHORT_INT || m == M_SHORT_SHORT_INT)
-    return a68_int_le (m, op1, op2, a68_get_node_location (p));
-  else if (m == M_REAL || m == M_LONG_REAL || m == M_LONG_LONG_REAL)
-    return a68_real_le (m, op1, op2, a68_get_node_location (p));
-  else
-    /* XXX */
-    return fold_build2_loc (a68_get_node_location (p),
-			    LE_EXPR,
-			    CTYPE (MOID (p)),
-			    op1, op2);
+  return a68_int_ge (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_real_eq3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_real_eq (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_real_ne3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_real_ne (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_real_lt3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_real_lt (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_real_le3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_real_le (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_real_gt3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_real_gt (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_real_ge3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_real_ge (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_char_eq3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_char_eq (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_char_ne3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_char_ne (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_char_lt3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_char_lt (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_char_le3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_char_le (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_char_gt3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_char_gt (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_char_ge3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_char_ge (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_bool_eq3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_bool_eq (op1, op2, a68_get_node_location (p));
+}
+
+tree
+a68_lower_bool_ne3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+
+  return a68_bool_ne (op1, op2, a68_get_node_location (p));
 }
 
 tree
@@ -1001,7 +1063,23 @@ a68_lower_bitelem3 (NODE_T *p, LOW_CTX_T ctx)
 }
 
 tree
-a68_lower_bitle3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_bit_eq3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+  return a68_bits_eq (op1, op2);
+}
+
+tree
+a68_lower_bit_ne3 (NODE_T *p, LOW_CTX_T ctx)
+{
+  tree op1 = a68_lower_tree (SUB (p), ctx);
+  tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
+  return a68_bits_ne (op1, op2);
+}
+
+tree
+a68_lower_bit_le3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
@@ -1009,7 +1087,7 @@ a68_lower_bitle3 (NODE_T *p, LOW_CTX_T ctx)
 }
 
 tree
-a68_lower_bitge3 (NODE_T *p, LOW_CTX_T ctx)
+a68_lower_bit_ge3 (NODE_T *p, LOW_CTX_T ctx)
 {
   tree op1 = a68_lower_tree (SUB (p), ctx);
   tree op2 = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
diff --git a/gcc/algol68/a68-low-reals.cc b/gcc/algol68/a68-low-reals.cc
index 34c8be5b95c..4afc1fc04b3 100644
--- a/gcc/algol68/a68-low-reals.cc
+++ b/gcc/algol68/a68-low-reals.cc
@@ -504,54 +504,54 @@ a68_real_div (MOID_T *m, tree a, tree b, location_t loc)
    A = B.  */
 
 tree
-a68_real_eq (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_real_eq (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, EQ_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, EQ_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two real values of mode M, build an expression that calculates whether
    A /= B.  */
 
 tree
-a68_real_ne (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_real_ne (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, NE_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, NE_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two real values of mode M, build an expression that calculates whether
    A < B.  */
 
 tree
-a68_real_lt (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_real_lt (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, LT_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, LT_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two real values of mode M, build an expression that calculates
    whether A <= B.  */
 
 tree
-a68_real_le (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_real_le (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, LE_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, LE_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two real values of mode M, build an expression that calculates whether
    A > B.  */
 
 tree
-a68_real_gt (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_real_gt (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, GT_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, GT_EXPR, boolean_type_node, a, b);
 }
 
 /* Given two real values of mode M, build an expression that calculates whether
    A >= B.  */
 
 tree
-a68_real_ge (MOID_T *m ATTRIBUTE_UNUSED, tree a, tree b, location_t loc)
+a68_real_ge (tree a, tree b, location_t loc)
 {
-  return fold_build2_loc (loc, GE_EXPR, integer_type_node, a, b);
+  return fold_build2_loc (loc, GE_EXPR, boolean_type_node, a, b);
 }
 
 /* Exponentiation involving real values.
diff --git a/gcc/algol68/a68-parser-prelude.cc b/gcc/algol68/a68-parser-prelude.cc
index 0203cfc48ee..3b836d8d9e2 100644
--- a/gcc/algol68/a68-parser-prelude.cc
+++ b/gcc/algol68/a68-parser-prelude.cc
@@ -531,24 +531,24 @@ stand_prelude (void)
   m = a68_proc (M_BOOL, M_BOOL, M_BOOL, NO_MOID);
   a68_op (A68_STD, "OR", m, a68_lower_or3);
   a68_op (A68_STD, "AND", m, a68_lower_and3);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
+  a68_op (A68_STD, "=", m, a68_lower_bool_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_bool_ne3);
+  a68_op (A68_STD, "EQ", m, a68_lower_bool_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_bool_ne3);
   /* CHAR operators.  */
   m = a68_proc (M_BOOL, M_CHAR, M_CHAR, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_char_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_char_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_char_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_char_le3);
+  a68_op (A68_STD, ">", m, a68_lower_char_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_char_ge3);
+  a68_op (A68_STD, "EQ", m, a68_lower_char_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_char_ne3);
+  a68_op (A68_STD, "LT", m, a68_lower_char_lt3);
+  a68_op (A68_STD, "LE", m, a68_lower_char_le3);
+  a68_op (A68_STD, "GT", m, a68_lower_char_gt3);
+  a68_op (A68_STD, "GE", m, a68_lower_char_ge3);
   m = a68_proc (M_INT, M_CHAR, NO_MOID);
   a68_op (A68_STD, "ABS", m, a68_lower_charabs2);
   m = a68_proc (M_CHAR, M_INT, NO_MOID);
@@ -619,18 +619,18 @@ stand_prelude (void)
   a68_op (A68_STD, "OVERAB", m, a68_lower_overab3);
   a68_op (A68_STD, "MODAB", m, a68_lower_modab3);
   m = a68_proc (M_BOOL, M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, NO_MOID);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
+  a68_op (A68_STD, "EQ", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "GE", m, a68_lower_int_ge3);
+  a68_op (A68_STD, "GT", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "LE", m, a68_lower_int_le3);
+  a68_op (A68_STD, "LT", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "=", m, a68_lower_int_eq3);
+  a68_op (A68_STD, ">=", m, a68_lower_int_ge3);
+  a68_op (A68_STD, ">", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "<=", m, a68_lower_int_le3);
+  a68_op (A68_STD, "<", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
   m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
   a68_op (A68_STD, "^", m, a68_lower_pow_int);
@@ -666,18 +666,18 @@ stand_prelude (void)
   a68_op (A68_STD, "OVERAB", m, a68_lower_overab3);
   a68_op (A68_STD, "MODAB", m, a68_lower_modab3);
   m = a68_proc (M_BOOL, M_SHORT_INT, M_SHORT_INT, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "LT", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_int_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_int_le3);
+  a68_op (A68_STD, ">", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "GT", m, a68_lower_int_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_int_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_int_ge3);
   m = a68_proc (M_SHORT_INT, M_SHORT_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
   a68_op (A68_STD, "^", m, a68_lower_pow_int);
@@ -694,18 +694,18 @@ stand_prelude (void)
   m = a68_proc (M_BOOL, M_INT, NO_MOID);
   a68_op (A68_STD, "ODD", m, a68_lower_odd2);
   m = a68_proc (M_BOOL, M_INT, M_INT, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_int_le3);
+  a68_op (A68_STD, ">", m, a68_lower_int_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_int_ge3);
+  a68_op (A68_STD, "EQ", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "LT", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "LE", m, a68_lower_int_le3);
+  a68_op (A68_STD, "GT", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "GE", m, a68_lower_int_ge3);
   m = a68_proc (M_INT, M_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "+", m, a68_lower_plus_int);
   a68_op (A68_STD, "-", m, a68_lower_minus_int);
@@ -761,18 +761,18 @@ stand_prelude (void)
   a68_op (A68_STD, "OVERAB", m, a68_lower_overab3);
   a68_op (A68_STD, "MODAB", m, a68_lower_modab3);
   m = a68_proc (M_BOOL, M_LONG_INT, M_LONG_INT, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "LT", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_int_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_int_le3);
+  a68_op (A68_STD, ">", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "GT", m, a68_lower_int_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_int_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_int_ge3);
   m = a68_proc (M_LONG_REAL, M_LONG_INT, M_LONG_INT, NO_MOID);
   a68_op (A68_STD, "/", m, a68_lower_rdiv3);
   m = a68_proc (M_LONG_INT, M_LONG_INT, M_INT, NO_MOID);
@@ -811,31 +811,31 @@ stand_prelude (void)
   m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
   a68_op (A68_STD, "/", m, a68_lower_rdiv3);
   m = a68_proc (M_BOOL, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
+  a68_op (A68_STD, "EQ", m, a68_lower_int_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_int_ne3);
+  a68_op (A68_STD, "GE", m, a68_lower_int_ge3);
+  a68_op (A68_STD, "GT", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "LE", m, a68_lower_int_le3);
+  a68_op (A68_STD, "LT", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "=", m, a68_lower_int_eq3);
+  a68_op (A68_STD, ">=", m, a68_lower_int_ge3);
+  a68_op (A68_STD, ">", m, a68_lower_int_gt3);
+  a68_op (A68_STD, "<=", m, a68_lower_int_le3);
+  a68_op (A68_STD, "<", m, a68_lower_int_lt3);
+  a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
   m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
   a68_op (A68_STD, "^", m, a68_lower_pow_int);
   /* SHORT SHORT BITS operators  */
   m = a68_proc (M_BOOL, M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<=", m, a68_lower_bitle3);
-  a68_op (A68_STD, "LE", m, a68_lower_bitle3);
-  a68_op (A68_STD, ">=", m, a68_lower_bitge3);
-  a68_op (A68_STD, "GE", m, a68_lower_bitge3);
+  a68_op (A68_STD, "=", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "<=", m, a68_lower_bit_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_bit_le3);
+  a68_op (A68_STD, ">=", m, a68_lower_bit_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_bit_ge3);
   m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID);
   a68_op (A68_STD, "NOT", m, a68_lower_bitnot2);
   a68_op (A68_STD, "~", m, a68_lower_bitnot2);
@@ -864,14 +864,14 @@ stand_prelude (void)
   a68_op (A68_STD, "NOT", m, a68_lower_bitnot2);
   a68_op (A68_STD, "~", m, a68_lower_bitnot2);
   m = a68_proc (M_BOOL, M_SHORT_BITS, M_SHORT_BITS, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<=", m, a68_lower_bitle3);
-  a68_op (A68_STD, "LE", m, a68_lower_bitle3);
-  a68_op (A68_STD, ">=", m, a68_lower_bitge3);
-  a68_op (A68_STD, "GE", m, a68_lower_bitge3);
+  a68_op (A68_STD, "=", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "<=", m, a68_lower_bit_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_bit_le3);
+  a68_op (A68_STD, ">=", m, a68_lower_bit_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_bit_ge3);
   m = a68_proc (M_SHORT_BITS, M_SHORT_BITS, M_SHORT_BITS, NO_MOID);
   a68_op (A68_STD, "AND", m, a68_lower_bitand3);
   a68_op (A68_STD, "OR", m, a68_lower_bitior3);
@@ -895,14 +895,14 @@ stand_prelude (void)
   a68_op (A68_STD, "NOT", m, a68_lower_bitnot2);
   a68_op (A68_STD, "~", m, a68_lower_bitnot2);
   m = a68_proc (M_BOOL, M_BITS, M_BITS, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "<=", m, a68_lower_bitle3);
-  a68_op (A68_STD, ">=", m, a68_lower_bitge3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "LE", m, a68_lower_bitle3);
-  a68_op (A68_STD, "GE", m, a68_lower_bitge3);
+  a68_op (A68_STD, "=", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "<=", m, a68_lower_bit_le3);
+  a68_op (A68_STD, ">=", m, a68_lower_bit_ge3);
+  a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "LE", m, a68_lower_bit_le3);
+  a68_op (A68_STD, "GE", m, a68_lower_bit_ge3);
   m = a68_proc (M_BITS, M_BITS, M_BITS, NO_MOID);
   a68_op (A68_STD, "AND", m, a68_lower_bitand3);
   a68_op (A68_STD, "OR", m, a68_lower_bitior3);
@@ -926,14 +926,14 @@ stand_prelude (void)
   a68_op (A68_STD, "NOT", m, a68_lower_bitnot2);
   a68_op (A68_STD, "~", m, a68_lower_bitnot2);
   m = a68_proc (M_BOOL, M_LONG_BITS, M_LONG_BITS, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<=", m, a68_lower_bitle3);
-  a68_op (A68_STD, "LE", m, a68_lower_bitle3);
-  a68_op (A68_STD, ">=", m, a68_lower_bitge3);
-  a68_op (A68_STD, "GE", m, a68_lower_bitge3);
+  a68_op (A68_STD, "=", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "<=", m, a68_lower_bit_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_bit_le3);
+  a68_op (A68_STD, ">=", m, a68_lower_bit_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_bit_ge3);
   m = a68_proc (M_LONG_BITS, M_LONG_BITS, M_LONG_BITS, NO_MOID);
   a68_op (A68_STD, "AND", m, a68_lower_bitand3);
   a68_op (A68_STD, "OR", m, a68_lower_bitior3);
@@ -950,14 +950,14 @@ stand_prelude (void)
   a68_op (A68_STD, "LENG", m,  a68_lower_bitleng2);
   /* LONG LONG BITS operators  */
   m = a68_proc (M_BOOL, M_LONG_LONG_BITS, M_LONG_LONG_BITS, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<=", m, a68_lower_bitle3);
-  a68_op (A68_STD, "LE", m, a68_lower_bitle3);
-  a68_op (A68_STD, ">=", m, a68_lower_bitge3);
-  a68_op (A68_STD, "GE", m, a68_lower_bitge3);
+  a68_op (A68_STD, "=", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_bit_ne3);
+  a68_op (A68_STD, "<=", m, a68_lower_bit_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_bit_le3);
+  a68_op (A68_STD, ">=", m, a68_lower_bit_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_bit_ge3);
   m = a68_proc (M_LONG_LONG_BITS, M_LONG_LONG_BITS, NO_MOID);
   a68_op (A68_STD, "NOT", m, a68_lower_bitnot2);
   a68_op (A68_STD, "~", m, a68_lower_bitnot2);
@@ -987,18 +987,18 @@ stand_prelude (void)
   a68_op (A68_STD, "ROUND", m, a68_lower_round2);
   a68_op (A68_STD, "ENTIER", m, a68_lower_entier2);
   m = a68_proc (M_BOOL, M_REAL, M_REAL, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_real_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_real_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_real_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_real_le3);
+  a68_op (A68_STD, ">", m, a68_lower_real_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_real_ge3);
+  a68_op (A68_STD, "EQ", m, a68_lower_real_eq3);
+  a68_op (A68_STD, "NE", m, a68_lower_real_ne3);
+  a68_op (A68_STD, "LT", m, a68_lower_real_lt3);
+  a68_op (A68_STD, "LE", m, a68_lower_real_le3);
+  a68_op (A68_STD, "GT", m, a68_lower_real_gt3);
+  a68_op (A68_STD, "GE", m, a68_lower_real_ge3);
   m = A68_MCACHE (proc_real_real_real);
   a68_op (A68_STD, "+", m, a68_lower_plus_real);
   a68_op (A68_STD, "-", m, a68_lower_minus_real);
@@ -1051,18 +1051,18 @@ stand_prelude (void)
   a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3);
   a68_op (A68_STD, "DIVAB", m, a68_lower_divab3);
   m = a68_proc (M_BOOL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_real_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_real_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_real_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_real_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_real_lt3);
+  a68_op (A68_STD, "LT", m, a68_lower_real_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_real_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_real_le3);
+  a68_op (A68_STD, ">", m, a68_lower_real_gt3);
+  a68_op (A68_STD, "GT", m, a68_lower_real_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_real_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_real_ge3);
   m = a68_proc (M_LONG_REAL, M_LONG_REAL, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
   a68_op (A68_STD, "^", m, a68_lower_pow_real);
@@ -1095,18 +1095,18 @@ stand_prelude (void)
   a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3);
   a68_op (A68_STD, "DIVAB", m, a68_lower_divab3);
   m = a68_proc (M_BOOL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
-  a68_op (A68_STD, "=", m, a68_lower_eq3);
-  a68_op (A68_STD, "EQ", m, a68_lower_eq3);
-  a68_op (A68_STD, "/=", m, a68_lower_ne3);
-  a68_op (A68_STD, "NE", m, a68_lower_ne3);
-  a68_op (A68_STD, "<", m, a68_lower_lt3);
-  a68_op (A68_STD, "LT", m, a68_lower_lt3);
-  a68_op (A68_STD, "<=", m, a68_lower_le3);
-  a68_op (A68_STD, "LE", m, a68_lower_le3);
-  a68_op (A68_STD, ">", m, a68_lower_gt3);
-  a68_op (A68_STD, "GT", m, a68_lower_gt3);
-  a68_op (A68_STD, ">=", m, a68_lower_ge3);
-  a68_op (A68_STD, "GE", m, a68_lower_ge3);
+  a68_op (A68_STD, "=", m, a68_lower_real_eq3);
+  a68_op (A68_STD, "EQ", m, a68_lower_real_eq3);
+  a68_op (A68_STD, "/=", m, a68_lower_real_ne3);
+  a68_op (A68_STD, "NE", m, a68_lower_real_ne3);
+  a68_op (A68_STD, "<", m, a68_lower_real_lt3);
+  a68_op (A68_STD, "LT", m, a68_lower_real_lt3);
+  a68_op (A68_STD, "<=", m, a68_lower_real_le3);
+  a68_op (A68_STD, "LE", m, a68_lower_real_le3);
+  a68_op (A68_STD, ">", m, a68_lower_real_gt3);
+  a68_op (A68_STD, "GT", m, a68_lower_real_gt3);
+  a68_op (A68_STD, ">=", m, a68_lower_real_ge3);
+  a68_op (A68_STD, "GE", m, a68_lower_real_ge3);
   m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
   a68_op (A68_STD, "^", m, a68_lower_pow_real);
diff --git a/gcc/algol68/a68.h b/gcc/algol68/a68.h
index eae4809053d..70905095d39 100644
--- a/gcc/algol68/a68.h
+++ b/gcc/algol68/a68.h
@@ -482,10 +482,14 @@ tree a68_bits_xor (tree bits1, tree bits2);
 tree a68_bits_elem (NODE_T *p, tree pos, tree bits);
 tree a68_bits_subset (tree bits1, tree bits2);
 tree a68_bits_shift (tree shift, tree bits);
+tree a68_bits_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_bits_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 
 /* a68-low_bools.cc  */
 
 tree a68_bool_abs (tree val);
+tree a68_bool_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_bool_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 
 /* a68-low-ints.cc  */
 
@@ -503,12 +507,12 @@ tree a68_int_mult (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION)
 tree a68_int_div (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 tree a68_int_mod (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 tree a68_int_pow (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_int_eq (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_int_ne (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_int_lt (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_int_le (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_int_gt (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_int_ge (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_int_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_int_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_int_lt (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_int_le (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_int_gt (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_int_ge (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 
 /* a68-low-complex.cc  */
 
@@ -572,12 +576,12 @@ tree a68_real_div (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION)
 tree a68_real_mod (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 tree a68_real_pow (MOID_T *m, MOID_T *a_mode, MOID_T *b_mode,
 		   tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_real_eq (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_real_ne (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_real_lt (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_real_le (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_real_gt (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
-tree a68_real_ge (MOID_T *m, tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_real_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_real_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_real_lt (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_real_le (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_real_gt (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_real_ge (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 
 
 /* a68-low-strings.cc  */
@@ -593,6 +597,12 @@ char *a68_string_process_breaks (const char *str);
 tree a68_char_max (void);
 tree a68_char_repr (NODE_T *p, tree val);
 tree a68_char_abs (tree val);
+tree a68_char_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_char_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_char_lt (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_char_le (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_char_gt (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
+tree a68_char_ge (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
 
 /* a68-low-multiples.cc  */
 
@@ -812,12 +822,26 @@ tree a68_lower_divab3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_rdiv3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_over3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_mod3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_eq3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_ne3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_lt3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_gt3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_ge3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_le3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_int_eq3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_int_ne3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_int_lt3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_int_le3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_int_gt3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_int_ge3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_real_eq3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_real_ne3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_real_lt3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_real_le3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_real_gt3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_real_ge3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_char_eq3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_char_ne3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_char_lt3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_char_le3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_char_gt3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_char_ge3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bool_eq3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bool_ne3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_plusab3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_minusab3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_overab3 (NODE_T *p, LOW_CTX_T ctx);
@@ -854,14 +878,18 @@ tree a68_lower_bin2 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitabs2 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitleng2 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitshorten2 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bit_eq3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bit_ne3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitnot2 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitand3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitior3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_bitxor3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_shl3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_shr3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_bitle3 (NODE_T *p, LOW_CTX_T ctx);
-tree a68_lower_bitge3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bit_eq3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bit_ne3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bit_le3 (NODE_T *p, LOW_CTX_T ctx);
+tree a68_lower_bit_ge3 (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_maxint (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_minint (NODE_T *p, LOW_CTX_T ctx);
 tree a68_lower_maxbits (NODE_T *p, LOW_CTX_T ctx);
-- 
2.30.2



More information about the Algol68 mailing list