*DECK COMBIT
          IDENT  T8.COM 
          TITLE  ROUTINES COMBIT, TSTCOM
 COMBIT   TITLE  COMPARE TWO BIT FIELDS                                 003530
*                                                                       003540
**    COMBIT - COMPARE TWO FIELDS BIT-FOR-BIT 
*                                                                       003560
*         INPUT  -  B1 = 1                                              003570
*                   B7 = RETURN ADDRESS                                 003580
*                                                                       003590
*         OUTPUT -  X0 = CONDITION CODE (0=EQUAL, NOT-0 = NOT EQUAL)    003600
*                   X1 = POINTER TO LONGER STRING, IF RESIDUE EXISTS    003610
*                                                                       003620
*         PRESERVED  --, --, --, --, --, --, --, --                     003630
*                    A0, --, --, --, --, --, --, --                     003640
*                        B1, --, --, --, --, B6, B7                     003650
*                                                                       003660
*         ON INPUT, POINTERS TO THE TWO FIELDS SHOULD BE IN             003670
*          T.T1 AND T.T2.  THESE POINTERS WILL BE UPDATED ON EXIT       003680
*                                                                       003690
*         TEMPORARY CELLS USED..   T.TEMP                               003700
*                                                                       003710
          SPACE  1
*CALL COM2
          SPACE  4                                                      003730
 COMBIT   SA5    T.T1                                                   003740
          SA3    T.T2                                                   003750
          AX5    36                                                     003760
          SB5    B6          SAVE B6
          AX3    36                                                     003780
          IX4    X3-X5                                                  003790
          PL     X4,COMB.1                                              003800
          BX5    X3          MIN (SIZE1, SIZE2) TO X5 
 COMB.1   SX2    59 
          IX4    X5-X2
          PL     X4,COMB.2A  BR IF 59 OR MORE BITS LEFT 
          BX2    X5          IF LE 59 BITS, USE RESIDUAL
          SX5    B0          NO BITS LEFT FOR NEXT TIME 
          EQ     COMB.2 
 COMB.2A  SX5    X4          BITS LEFT FOR NEXT TIME
 COMB.2   SA1    T.T1                                                   003860
          SB6    COMB.3                                                 003870
          EQ     NXBITS                                                 003880
 COMB.3   SA6    T.TEMP                                                 003890
          SA7    A1                                                     003900
          SA1    T.T2                                                   003910
          SB6    COMB.4                                                 003920
          EQ     NXBITS                                                 003930
 COMB.4   SA2    A6          GET PREVIOUS BIT PATTERN                   003940
          SA7    A1                                                     003950
          IX0    X2-X6
          NZ     X0,COMB.E   NOT EQUAL
          NZ     X5,COMB.1   GO AROUND IF SOME BITS LEFT                003990
*                                                                       004000
          SA2    T.T1        DONE, EQUAL, SEE IF SOME LEFT IN ONE       004010
          BX1    X7          T2                                         004020
          AX7    36                                                     004030
          NZ     X7,COMB.E   THIS ONE                                   004040
          BX1    X2                                                     004050
          AX2    36                                                     004060
          BX0    -X0-X0      X0=-0, FLAG FOR T1 STRING
          NZ     X2,COMB.E   THIS ONE                                   004070
          SX1    B0                                                     004080
 COMB.E   SB6    B5          RESTORE B6 
          JP     B7 
*                                                                       004110
 TSTCOM   TITLE  TEST AND COMPARE ROUTINES                              044910
*                                                                       044920
**    TEST AND COMPARE
 TST.NES  SPACE  2
 TST.EQS  SPACE  2
**    TST.NEX/TST.EQS 
* 
*    THIS SECTION HANDLES CHECKING THE RESULT OF A STRING COMPARE       044950
*    ENTER WITH..   B7 = RETURN ADDRESS                                 044960
*                   X0 = 0 IF EQUAL, SIGN HAS DIRECTION OF INEQUALITY 
          SPACE  2                                                      044980
 TST.EQS  SX0    0
 TST.NES  BSS    0           X0 HAS RESULT OF TEST
          SA1    T.COND 
          SB6    B7          RESTORE B6 EXIT
          ZR     X0,TST.CE   EQUALITY 
          EQ     TST.CM      INEQUALITY 
  
 TST.COM  SPACE  2
**    TST.COM 
* 
*                                                                       045060
*    THIS SECTION HANDLES NUMERIC COMPARISONS.  THE CHECK IS FOR        045070
*      T.NUM  -REL-  T.NUM1, WHERE T.NUM AND T.NUM1 ARE TRIPLE PRECISION045080
*      REAL NUMBERS.  INTEGER ARITHMETIC IS USED, SO BE SURE THAT       045090
*      T.(+0) IS NOMALIZED AND THE EXPONENTS OF T.(+1) AND T.(+2)       045100
*      ARE 48 AND 96 LESS THAN THE EXPONENT OF T.(+0).  IF A QUANTITY   045110
*      IS INFINITE OR INDEFINITE, PLACE IT WITH ZERO MANTISSA IN ALL    045120
*      THREE CELLS (NO DECREASING EXPONENT).                            045130
*                                                                       045140
*                   B6 SHOULD CONTAIN THE RETURN ADDRESS                045150
*                                                                       045160
 TST.COM  SA2    T.NUM       COMPARE VALUES AFTER ROUNDING
          SA3    A2+B1       T.NUM TO D. P. 
          SA4    A3+B1
          SA1    T.COND 
          RX5    X3+X4
          DX3    X2+X5
          FX2    X2+X5
          SA4    T.NUM1 
          SA5    A4+B1
          IX0    X2-X4       T.NUM-T.NUM1 
          NZ     X0,TST.CM
          IX0    X3-X5
          ZR     X0,TST.CE   JP IF EQUAL                                045290
*                                                                       045300
 TST.CM   BSS    0
          SX2    B1 
          AX0    59          SIGN BIT USED FOR SHIFT COUNT
          BX3    X2*X0       1=(A.LT.B), 0=(A.GT.B) 
          SB2    X3+B1       SIGN BIT + 1, FOR SHIFT COUNT
          LX4    X2,B2       POSITION AT GT BIT, OR AT LT BIT 
          BX0    X1*X4       EXTRACT RESULT, 0=TRUE 
          JP     B6          RETURN 
  
 TST.CE   BSS    0
          SX2    B1 
          BX0    X2*X1       EXTRACT EQ BIT FOR RESULT, 0= TRUE 
          JP     B6          RETURN 
*                                                                       045470
          SPACE  2                                                      045480
*                                                                       045490
* COMMON CODE TO HANDLE -SAME TYPE- COMPARES                            045500
*                                                                       045510
*     ENTER WITH  X5 = -SPACE- CODE                                     045520
*                 X2 = CHARACTER SIZE                                   045530
*                                                                       045540
*     COMBIT MUST HAVE ALREADY BEEN CALLED                              045550
*                                                                       045560
 TST.CS   SB7    B6                                                     045570
          NZ     X0,TST.NES   NOT EQUAL                                 045580
          BX5    X5-X0       SAVE X0 SENSE (+0,-0)
          ZR     X1,TST.EQS   EQUAL                                     045590
          SB6    TST.1       MORE TO TEST                               045600
          EQ     NXBITS                                                 045610
 TST.1    PL     X0,TST.EQS   NO MORE, EQUAL                            045620
          BX0    X5 
          AX0    59          RESTORE X0 SENSE 
          BX5    X5-X0       RESTORE SPACE CODE 
          IX6    X5-X6
          BX0    X6-X0       RESULT IN X0 HAS CORRECT SENSE 
          BX5    X5-X0       RE-SAVE SENSE FOR POSSIBLE LATER USE 
          ZR     X0,NXBITS   OK, TRY NEXT                               045640
          EQ     TST.NES     NOT EQUAL                                  045650
*                                                                       045660
          SPACE  2                                                      045670
*                                                                       045680
* COMMON CODE TO HANDLE BIT-BIT COMPARES                                045690
*                                                                       045700
 TST.BB   SB7    TST.2       B-B                                        045710
          EQ     COMBIT                                                 045720
 TST.2    SX5    0           BIT -SPACE-                                045730
          SX2    59          59 INSURES NO +0/-0 PROBLEM                045740
          EQ     TST.CS                                                 045750
*                                                                       045760
          SPACE  2                                                      045770
*                                                                       045780
*  THE MAIN COMPARE LOOP BELOW EXPECTS THE FOLLOWING SETUP..            045790
*         T.M1   =  NUMBER OF BITS IN CHARACTER FROM STRING-1           045800
*         T.M2   =  NUMBER OF BITS IN CHARACTER FROM STRING-2           045810
*          B5    =  TRANSLATE TABLE INFORMATION ADDRESS                 045820
*         T.I2   =  CODE FOR -SPACE- (ZERO IF B- TYPE) IN STRING-2      045830
*                                                                       045840
 TST.SS   SA6    T.M2                                                   045850
          SA7    T.I2                                                   045860
          SB7    B6          SAVE EXIT ADDRESS                          045870
*                                                                       045880
 TST.CX   SA1    T.T1        COMPARE LOOP                               045890
          SA2    T.M1                                                   045900
          SB6    TST.14                                                 045910
          EQ     NXBITS                                                 045920
 TST.14   ZR     X0,TST.16   NO MORE IN STRING-1                        045930
          SA4    B5                                                     045940
          SB2    X4          TABLE BASE                                 045950
          AX4    18                                                     045960
          SA3    X6+B2       GET TABLE ENTRY                            045970
          SA7    A1                                                     045980
          SB3    X4          SHIFT COUNT                                045990
          AX4    18          MASK                                       046000
          SA1    T.T2                                                   046010
          AX3    B3                                                     046020
          BX5    X4*X3                                                  046030
          SA2    T.M2                                                   046040
          SB6    TST.15                                                 046050
          EQ     NXBITS                                                 046060
 TST.15   ZR     X0,TST.18   NO MORE IN STRING-2                        046070
          SA7    A1                                                     046080
          IX0    X5-X6                                                  046090
          ZR     X0,TST.CX   THIS PAIR EQUAL, TRY NEXT PAIR             046100
          EQ     TST.NES     NOT EQUAL
*                                                                       046120
 TST.16   SA5    T.I2        STRING-1 EMPTY                             046130
          SA1    T.T2         SCAN OUT SECOND STRING                    046140
          SA2    T.M2                                                   046150
          SB6    TST.17                                                 046160
          EQ     NXBITS                                                 046170
 TST.17   ZR     X0,TST.EQS  DONE, EQUAL                                046180
          IX0    X5-X6                                                  046190
          ZR     X0,NXBITS                                              046200
          EQ     TST.NES     NOT EQUAL                                  046210
*                                                                       046220
 TST.18   SA4    T.I2        STRING-2 EMPTY                             046230
          SA1    T.T1         SCAN OUT STRING-1                         046240
          SA2    T.M1                                                   046250
          SB6    TST.19                                                 046260
          EQ     TST.20                                                 046270
*                                                                       046280
 TST.19   ZR     X0,TST.EQS  DONE, EQUAL                                046290
          SA5    B5 
          SB2    X5          TABLE BASE 
          AX5    18 
          SA3    X6+B2       GET TABLE ENTRY
          SB3    X5          SHIFT COUNT
          AX5    18          MASK 
          AX3    X3,B3
          BX5    X3*X5
 TST.20   IX0    X5-X4
          ZR     X0,NXBITS   GO ON                                      046390
          EQ     TST.NES     NOT EQUAL                                  046400
*                                                                       046410
          SPACE  2                                                      046420
*                                                                       046430
* COMMON CODE TO HANDLE  BIT - LITERAL STRING COMPARES                  046440
*                                                                       046450
 TST.B1   SX6    1           BITS PER BIT                               046460
          SX7    ZERO.X                                                 046480
          SB5    TR.BTOX                                                046490
 TST.B2   SA6    T.M1 
          SX6    SIZE.X                                                 046500
          EQ     TST.SS                                                 046510
*                                                                       046520
          SPACE  2                                                      046530
*                                                                       046540
* THIS CODE IS COMMON TO ALL TEST POINTS                                046550
*                                                                       046560
*                                                                       046570
 TST..0   SA2    T.NUM       NUMERIC LITERAL                            046580
          SA3    A2+B1                                                  046590
          SA4    A3+B1        JUST MOVE DATA FROM                       046600
          SA1    T.T1        PICK UP SOURCE FOR NEXT CONVERSION 
          RX7    X3+X4       ROUND TO DOUBLE PRECISION
          FX6    X2+X7
          DX7    X2+X7
          SA6    T.NUM1          TO                                     046620
          SA7    A6+B1                                                  046640
          JP     B5                                                     046670
*                                                                       046680
          SPACE  2                                                      046690
*                                                                       046700
 TST..$   SX7    B5          GENERAL ENTRY, SAVING B5                   046710
          SB5    TST.27                                                 046720
          SA7    T.SAVEB5                                               046730
          JP     B4          PERFORM CONVERSION                         046740
*                                                                       046750
 TST.27   SA5    T.SAVEB5 
          SB5    X5                                                     046770
          EQ     TST..0      MOVE TO ITEM-2 POSITION                    046780
*                                                                       046790
          SPACE  2                                                      046800
*                                                                       046810
 TST..1   SB4    TST.28      STRING LITERAL TO BE CONVERTED             046820
          EQ     TST..$                                                 046830
 TST.28   SB4    NEXTNUM                                                046840
          EQ     CONA.X                                                 046850
*                                                                       046860
          SPACE  2                                                      046870
****
          END 
