
  FUNCTION [INLINE] clp$longreal_compare
    (    left_operand: longreal;
         right_operand: longreal;
         same_sign_infinities_order: clt$same_sign_infinities_order):
        clt$comparison_result;

?? PUSH (LISTEXT := ON) ??

    VAR
      comparison_result: clt$comparison_result,
      ignore_comparison_status: mlt$error,
      left_class: clt$real_number_class,
      right_class: clt$real_number_class;


    left_class := clp$longreal_classify (left_operand);
    right_class := clp$longreal_classify (right_operand);

    IF (left_class = clc$real_indefinite) OR
          (right_class = clc$real_indefinite) THEN
      comparison_result := clc$unordered;
    ELSEIF left_class > right_class THEN
      comparison_result := clc$left_is_greater;
    ELSEIF right_class > left_class THEN
      comparison_result := clc$right_is_greater;
    ELSE
      CASE left_class {and right_class} OF
      = clc$real_zero =
        comparison_result := clc$equal;
      = clc$real_positive_infinite, clc$real_negative_infinite =
        IF same_sign_infinities_order = clc$infinities_equal THEN
          comparison_result := clc$equal;
        ELSE
          comparison_result := clc$unordered;
        IFEND;
      ELSE
        mlp$compare_floating (^left_operand, mlc$double_precision,
              ^right_operand, mlc$double_precision, comparison_result,
              ignore_comparison_status);
      CASEND;
    IFEND;

    clp$longreal_compare := comparison_result;

  FUNCEND clp$longreal_compare;

*copyc clt$comparison_result
*copyc clt$real_number_classes
*copyc clt$same_sign_infinities_order
?? POP ??
*copyc clp$longreal_classify
*copyc mlp$compare_floating
