*DECK QU2CONV 
          IDENT  QU2CONV
          COMMENT  SINGLE + DOUBLE PRECISION CONVERSION 
QU2CONV   TITLE    QU2CONV - SINGLE + DOUBLE PRECISION CONVERSION 
          ENTRY  QU2CONV
          ENTRY  SCALEIN                                                000210
          ENTRY  SCALEFL                                                000220
          EXT    UPPERIN
          EXT    LOWERIN
          EXT    FLAGE
          EXT    EXPONEN
          EXT    SIGN 
          EXT    MANTISS
          EXT    DOUBLE 
 QU2CONV  DATA   0
* 
************************************************************************
*                             INPUT DATA HAS BEEN CONVERTED FROM DISPLAY
*                             CODE AND PLACED IN TWO WORDS OF 54 BITS 
*                             EACH.  UPPERINT HOLDS THE MOST SIGNIFICANT
*                             PART AND LOWERINT THE LEAST.  THEREFORE 
*                             THE DISPLAY CODE VALUE IS NOW CHANGED TO A
*                             108 BIT INTEGER, BASE 10. 
*                             THESE TWO WORDS ARE THEN SPLIT INTO THREE 
*                             WORDS AND PACKED.  THE MOST SIGNIFICANT 
*                             WITH AN EXPONENT OF 96, MIDDLE WITH AN
*                             EXPONENT OF 48, AND THE LEAST WITH AN 
*                             EXPONENT OF  0.  THEY ARE THEN NORMALIZED 
*                             PLACING THEM IN DESCENDING ORDER OF 
*                             SIGNIFICANCE IN  X1, X2, AND X3.
************************************************************************
* 
          SA4    EXPONEN
          SA3    UPPERIN      PUT MOST SIGNIFICANT PART IN  X3
          SA2    LOWERIN      SET X2 TO LESS SIGNIFICANT PART 
          SB6    X4           SET B6 TO THE POWER OF TEN, THIS IS A 
*                             COMBINATION OF THE NUMBER OF PLACES TO
*                             THE RIGHT OF THE DECIMAL AND POWER GIVEN
*                             IN THE DISPLAY CODED VALUE
          MX0    22B          BUILD A MASK IN X0  OF 18 BITS
          SA4    FLAGE                 CONVERSION TYPE
          SB7    QU2CONV     SAVE LOCATION OF RETURN                    000240
          SB1    1            SET B1 = 1
          NG     X4,SINGLE             TRUE=SINGLE, FALSE=DOUBLE
          SB3    2
          EQ     DOUBLEP
SINGLE    SB3    1
DOUBLEP   BSS    0
          BX4    X0*X3        MOVE LEFT 18 BITS OF X3 TO X4 
          IX3    X3-X4        REMOVE LEFT 18 BITS OF X3 SETTING TO ZERO 
          MX0    14B          MASK OF 12 BITS 
          BX5    X0*X2        MOVE LEFT 12 BITS OF X2 TO X5 
          PX7    B0,X2        PACK X7 USING X2 AND B0 (= 0) 
          SB4    60B          SET B4 =  48
          LX3    6            LEFT SHIFT X3  6  BITS
          SB5    B4+B4        SET B5 =  96
          LX5    14B          LEFT SHIFT X5  12 BITS  SO REST IN LOW END
          IX3    X3+X5        ADD LEFT 12 BITS OF X2 FOUND IN X5 NOW
*                             TO X3 
          AX4    52B          RIGHT SHIFT UPPER 18 BITS OF X3 FOUND IN
*                             X4 NOW  42 BITS TO RIGHT
          PX1    B5,X4        PACK X1 USING X4  AND B5 (= 96) 
          SB5    5            SET B5 = 5
          PX2    B4,X3        PACK X2 USING X3 AND B4 (= 48)
          NX1    B0,X1        NORMALIZE X1,  MOST SIGNIFICANT PART
          NZ     X1,DEW       IF X1 NON-ZERO  JUMP TO DEW, VALUE GREATER
*                             THAN    2**96 
          NX1    B0,X2        NORMALIZE X2, PLACE IN X1, THIS IS THE
*                             MOST SIGNIFICANT PART 
          BX2    X7           MOVE X7  TO  X2 
          SX7    B0           SET X7 = 0, SINCE THE LEAST SIGNIFICANT 
*                             PART IS NOW IN  X2
DEW       NX2    B0,X2        NORMALIZE X2, THIS IS EITHER THE VALUE OF 
*                             MIDDLE OR LEAST SIGNFICANCE BUT WILL BE 
*                             TREAT AS THE MIDDLE VALUE 
          DX4    X1+X2        ADD X1,X2 PLACE LOWER HALF OF SUM IN X4 
          NX3    B0,X7        NORMALIZE X7, PLACE IN X3.  THIS IS EITHER
*                             THE LEAST SIGNIFICANT PART OR ZERO
          FX1    X1+X2        ADD X1,X2 PLACE VALUE IN  X1
          SA0    BIG10       POWERS OF TEN TO POWERS OF 2 
          ZR     X1,DEZ       JUMP, ZERO RESULT 
          SX6    B6           SET X6 TO POWER OF 10 
          FX2    X3+X4        ADD NORMALIZED LOWEST BITS TO THE LOWER 
*                             48 BITS OF THE MORE SIGNIFICANT BITS
          MX0    70B          MASK,  56 BITS
          SB4    B0-B1        SET B4 = -1 
          DX3    X3+X4        ADD X3,X4 PLACE LOWER HALF OF SUM IN X3 
          PL     X6,DEY       JUMP IF POSITIVE POWER OF 10
          BX4    -X0          COMPLIMENT MASK (LEFT 4 BITS SET  = 15) 
          SA0    LIL10       POWERS OF TEN TO NEGATIVE POWERS OF 2
          IX7    X4-X6        SUBTRACT POWER OF 10 FROM 15
          BX6    X7-X4        SUBTRACT 15 FROM RESULT IN X7 
          UX1    B6,X1        UNPACK X1, B6 CONTAINS ONE"S COMPLIMENT 
*                             REPRESENTATION OF EXPONENT
*                             BIAS FOR NEGATIVE  SCALING
          SB6    B6+200B      ADD 128 TO B6 
          PX1    B6,X1        PACK X1 USING B6 AS EXPONENT
          SB6    B6-60B       SUBTRACT 48 FROM B6 
          PX2    B6,X2        PACK X2 USING B6 AS EXPONENT
          SB6    B6-60B       SUBTRACT 48 FROM B6 
          PX3    B6,X3        PACK X3 USING B6 AS EXPONENT
DEY       BX7    -X0*X6       LOGICAL PRODUCT OF -X0,X6 
*                             POWER BETWEEN   0  AND  15
          AX6    4            RIGHT SHIFT  X6, 4 PLACES 
          SA4    X7+TEN0           DETERMINE LOCATION OF POWER
          SB6    X6           SET B6 EQUAL TO VALUE LEFT IN X6 AFTER
*                             SHIFT 
          ZR     X7,DEA       JUMP, NO FACTOR  10  TO  10**15 
          FX6    X4*X2        MULTIPLY POWER 10 FOR UPPER HALF
          DX0    X4*X1        MULTIPLY POWER 10 FOR LOWER HALF
          GE     B1,B3,DEE    JUMP IF SINGLE PRECISION
          FX5    X4*X3        MULTIPLY POWER 10 FOR UPPER HALF
          DX3    X4*X2        MULTIPLY POWER 10 FOR LOWER HALF
          FX2    X0+X6        ADD FIRST UPPER AND LOWER HALVES
          ZR     B0,DEI 
DEA       GE     B1,B3,DEF    JUMP, SINGLE PRECISION
          ZR     B0,DEI+1 
DED       DX0    X1*X4
          FX7    X1*X4
          FX3    X1*X5
          OR     X7,PEM6
          FX6    X0+X3
          FX0    X2*X4
DEE       FX1    X1*X4
          FX6    X6+X0
          EQ     B6,B0,DEG    JUMP SCALING COMPLETE 
DEF       SX6    B6 
          SX0    B1 
          BX7    X0*X6
          SB4    B4+B1
          AX6    1
          SA4    A0+B4
          EQ     B4,B5,PEM6   ERROR SCALING  GE  512
          SB6    X6 
          SA5    A4+B5
          NZ     X7,DED       JUMP, POWER IS FRACTION 
DEG       NE     B6,B0,DEF    JUMP, MORE FACTORS IN PRODUCT 
          RX1    X1+X2
          IR     X1,DEZ       JUMP, VALUE IN RANGE
          ZR     B0,PEM6      ERROR, VALUE OUT OF RANGE 
* 
**********************************************************************
*                             THE FOLLOWING SECTION USES THE NEXT    *
*                             POWER OF 10 TO BRING VALUE CLOSER TO   *
*                             THE DESIRED VALUE                      *
**********************************************************************
* 
DEH       DX0    X2*X4
          FX7    X1*X4
          FX6    X3*X4
          OR     X7,PEM6      JUMP, VALUE OUT OF RANGE
          FX3    X0+X6
          FX0    X2*X5
          FX2    X2*X4
          FX3    X3+X0
          FX0    X1*X5
          DX6    X1*X5
          SA5    A5+B5
          FX3    X3+X6
          FX7    X1*X5
          DX6    X1*X4
          DX5    X2+X0
          FX0    X2+X0
          FX3    X3+X7
          FX2    X6+X0
DEI       FX1    X1*X4
          FX3    X5+X3
          DX4    X6+X0
          FX3    X3+X4
          EQ     B6,B0,DEK    JUMP, SCALING COMPLETE
          SX6    B6 
          SX0    B1 
DEJ       BX7    X0*X6        LOGICAL PRODUCT OF POWER MASK AND POWER 
*                             THE FOLLOWING CODE FINDS THE NEXT POWER 
*                             FACTOR TO BE USED 
* 
          SB4    B4+B1        ADD 1 TO B4 
          AX6    1            SHIFT X6, 1 TO RIGHT, THAT IS DROP OFF
*                             LAST POWER FACTOR 
          SA4    A0+B4        ADD B4 TO LOCATION OF THE POWERS IN  A0 
*                             AND PLACE IN X4 
          EQ     B4,B5,PEM6   JUMP, ERROR SCALING  GE  512
          SB6    X6 
          SA5    A4+B5
          NZ     X7,DEH       JUMP, THIS POWER IS A FACTOR
          NE     B6,B0,DEJ    JUMP, MORE FACTORS IN PRODUCT 
DEK       DX4    X1+X2
          FX1    X1+X2
          RX3    X4+X3
          OR     X1,PEM6
          DX2    X1+X3
          FX1    X1+X3
          OR     X1,PEM6      JUMP, VALUE OUT OF RANGE
DEZ       SA3    SIGN         SETS X3 TO ZERO IF POSITIVE, AND TO 
*                             MINUS ZERO (ALL SEVEN"S) IF NEGATIVE
*                             VALUE DESIRED 
          SB4    LIL10
          SB5    A0 
          NE     B4,B5,DEZB   JUMP, POSITIVE SCALING
          UX1    B4,X1        REMOVE BIAS FROM RESULT 
          SB4    B4-200B
          SX4    B4+1777B 
          PX1    B4,X1
          PL     X4,DEZA      JUMP, NO UNDERFLOW
          SX1    B0 
DEZA      SB4    B4-60B 
          SX4    B4+1777B 
          PX2    B4,X2
          PL     X4,DEZB      JUMP, NO UNDERFLOW
          SX2    B0 
DEZB      BX6    X1-X3
          SB1    QU2CONV                                                000260
          BX7    X2-X3
          EQ     B1,B7,DEZC  SCALEINT/SCALEFLT ARE USED AS FUNCTIONS, SO000280
          JP     B7          IF SCALING, RETURN RESULT IN X6            000290
 DEZC     BSS    0                                                      000300
          SA6    MANTISS
          SA7    DOUBLE           STORE UPPER AND LOWER WORDS 
          EQ     QU2CONV               RETURN TO CALLER 
  
 PEM4     SX7    357         INDEFINITE OR INFINITE OPERAND 
          EQ     PEM8        ERROR EXIT 
  
 PEM6     SX7    54          DATA TRUNCATED DURING CONVERSION 
 PEM8     SA7    RETURNC     SET ERROR CODE 
          JP     B7          RETURN TO CALLER                           000330
*                                                                       000340
*                                                                       000350
 SCALEIN  DATA   0                                                      000360
          SB7    SCALEIN     SAVE LOCATION OF RETURN                    000370
          SB4    48                                                     000380
          SA3    X1          LOAD INTEGER BASE INTO X1                  000390
          SA5    A1+1 
          SA4    X5 
          SB6    X4 
          MX0    12                                                     000400
          SX7    B0          INITIALIZE SIGN POSITIVE                   000410
          PL     X3,SI1      CHECK FOR POSITIVE                         000420
          MX7    60          SIGN = -                                   000430
          BX3    -X3         COMPLEMENT                                 000440
 SI1      BX1    X0*X3       REMOVE UPPER 12 BITS OF INTEGER PRIOR TO   000450
          IX4    X3-X1       PACKING, SET TO 0                          000460
          LX1    12          RIGHT JUSTIFY 12 MOST SIGNIFICANT BITS     000470
          PX3    X4          PACK MIDDLE BITS                           000480
          PX1    B4,X1       PACK HIGHEST BITS WITH BIAS OF 48          000490
          NX2    X3          NORMALIZE MIDDLE                           000500
          NX1    X1          NORMALIZE HIGHEST                          000510
          EQ     SCALE                                                  000520
 SCALEFL  DATA   0                                                      000530
          SB7    SCALEFL     SAVE RETURN LOCATION                       000540
          SA2    X1          LOAD FLOATING PT BASE INTO X2              000550
          SX7    B0          INITIALIZE SIGN POSITIVE                   000560
          ID     X2,PEM4     ERROR IF + OR - INDEFINITE 
          OR     X2,PEM4     ERROR IF + OR - INFINITE 
          MX1    0           SET MOST SIGNIFICANT PART TO 0             000570
          PL     X2,SCALE1
          MX7    60          SET SIGN = -                               000590
          BX2    -X2         COMPLEMENT                                 000600
 SCALE1   BSS     0 
          SB1    1
          SA5    A1+B1       LOAD X5 WITH ADDRESS OF SCALE FACTOR       000640
          SA4    X5          X4 = SCALE FACTOR (POWER OF 10)            000660
          SB6    X4          B6 = SCALE FACTOR                          000680
 SCALE    BSS    0                                                      000610
          SB1    1           INITIALIZE INCREMENT VALUE                 000620
          SA7    SIGN        SAVE SIGN                                  000630
          SB5    5           INITIALIZE LOOP CONTROL                    000650
          SB3    B1          B3 = 1, SINGLE PRECISION RESULT REQUESTED  000670
          SX7    B0          SET LEAST SIGNIFICANT PART TO ZERO         000690
          EQ     DEW         GO SCALING                                 000700
          SPACE  4,8
**        POWER OF TEN CONVERSION TABLES. 
* 
*         TEN0 - POWERS OF TEN UP TO 10 ** 15.
* 
*         BIG10 - TRIPLE PRECISION POWERS OF 10 TO POWERS OF 2
* 
*         LIL10 - TRIPLE PRECISION POWERS OF 10 TO NEGATIVE POWERS OF 2 
  
  
          USE    /QU2CON/ 
 TEN0     DATA   1.E0                                                   000110
          DATA   1.E1                                                   000120
          DATA   1.E2                                                   000130
          DATA   1.E3                                                   000140
          DATA   1.E4                                                   000150
          DATA   1.E5                                                   000160
          DATA   1.E6                                                   000170
          DATA   1.E7                                                   000180
          DATA   1.E8                                                   000190
          DATA   1.E9                                                   000200
          DATA   1.E10                                                  000210
          DATA   1.E11                                                  000220
          DATA   1.E12                                                  000230
          DATA   1.E13                                                  000240
          DATA   1.E14                                                  000250
          DATA   1.E15                                                  000260
  
  
  
 BIG10    DATA      20064341571157602000B    1.EEE16   PART 1 
          DATA      20734734265552025560B    1.EEE32   PART 1 
          DATA      22456047403722377717B    1.EEE64   PART 1 
          DATA      25724473510762300351B    1.EEE128  PART 1 
          DATA      34435247735376716771B    1.EEE256  PART 1 
  
          DATA      17250000000000000000B    1.EEE16   PART 2 
          DATA      20135531676010000000B    1.EEE32   PART 2 
          DATA      21655155247457665561B    1.EEE64   PART 2 
          DATA      25124315770633631554B    1.EEE128  PART 2 
          DATA      33636750673556710033B    1.EEE256  PART 2 
  
          DATA      16450000000000000000B    1.EEE16   PART 3 
          DATA      17320000000000000000B    1.EEE32   PART 3 
          DATA      21056166544576650371B    1.EEE64   PART 3 
          DATA      24321553040115601065B    1.EEE128  PART 3 
          DATA      33034617735255702437B    1.EEE256  PART 3 
  
  
  
 LIL10    DATA      16327151262457542115B    1.EEE-16  PART 1 
          DATA      15456373043653242471B    1.EEE-32  PART 1 
          DATA      13735207775211722471B    1.EEE-64  PART 1 
          DATA      10466735010637062274B    1.EEE-128 PART 1 
          DATA      01756003050311261572B    1.EEE-256 PART 1 
  
          DATA      15527025551413537150B    1.EEE-16  PART 2 
          DATA      14654513514767414355B    1.EEE-32  PART 2 
          DATA      13137232247710714327B    1.EEE-64  PART 2 
          DATA      07667112025437131766B    1.EEE-128 PART 2 
          DATA      01150623477244210525B    1.EEE-256 PART 2 
  
          DATA      14723630465154737562B    1.EEE-16  PART 3 
          DATA      14055130051274405534B    1.EEE-32  PART 3 
          DATA      12332173154211025040B    1.EEE-64  PART 3 
          DATA      07066405673367561155B    1.EEE-128 PART 3 
          DATA      00357757552302121101B    1.EEE-256 PART 3 
  
  
  
          USE    /CCONVER/                                              000720
          BSS    11                                                     000730
 RETURNC  BSS    1                                                      000740
          END 
