TVadd.3.TEXT   [plain text]


! First some easy integer cases.
3+	 ALL   1   1   OK   2
3+	 ALL   1   2   OK   3
3+	 ALL   2   1   OK   3
3+	 ALL   2   2   OK   4
3+	 =0>   2   -2   OK	 0
3+	 <	 2	 -2	  OK   -0
3+	 =0>   5   -5   OK	 0
3+	 <	 5	 -5	  OK   -0
3+	 ALL   1   7   OK   8
3+	 ALL   5   -1   OK	 4
3+	 ALL   2   -5   OK	 -3
3+	 ALL   5   -0   OK	 5
3+	 ALL   5   +0   OK	 5
! Infinity vs Infinity.
3+	 ALL   H   H   OK   H   ok - affine sum
3+	 ALL   -H   -H	 OK	  -H
3+	 ALL   -H   H   i   Q   different signs
3+	 ALL   H   -H   i   Q
! Infinity vs huge.
3+	 ALL   H   Hm1	 OK	  H
3+	 ALL   H   -Hm1	  OK   H
3+	 ALL   -H   Hm1	  OK   -H
3+	 ALL   -H   -Hm1   OK   -H
3+	 ALL   Hm1	 H	 OK	  H
3+	 ALL   Hm1	 -H	  OK   -H
3+	 ALL   -Hm1	  H	  OK   H
3+	 ALL   -Hm1	  -H   OK   -H
! Infinity vs 0.
3+	 ALL   H   0   OK   H
3+	 ALL   H   -0   OK	 H
3+	 ALL   -H   0   OK	 -H
3+	 ALL   -H   -0	 OK	  -H
3+	 ALL   0   H   OK   H
3+	 ALL   -0   H   OK	 H
3+	 ALL   0   -H   OK	 -H
3+	 ALL   -0   -H	 OK	  -H
! Infinity vs denormalized.
3+	 ALL   H   Ed1	 OK	  H
3+	 ALL   -H   Ed1	  OK   -H
3+	 ALL   H   -Ed1	  OK   H
3+	 ALL   -H   -Ed1   OK   -H
3+	 ALL   0i3	 H	 OK	  H
3+	 ALL   0i3	 -H	  OK   -H
3+	 ALL   -0i3	  H	  OK   H
3+	 ALL   -0i3	  -H   OK   -H
! Zero vs finite -- watch that sign of 0 is meaningless.
3+	 ALL   0   Hm1	 OK	  Hm1
3+	 ALL   -0   Hm1	  OK   Hm1
3+	 ALL   -Hm1	  0	  OK   -Hm1
3+	 ALL   -Hm1	  -0   OK   -Hm1
3+	 ALL   1   -0   OK	 1
3+	 ALL   -1   -0	 OK	  -1
3+	 ALL   0   1   OK   1
3+	 ALL   -0   -1	 OK	  -1
! Zero vs denormalized -- underflows.
3+	 ALL   0   Ed1	 OK	  Ed1
3+	 ALL   -0   Ed1	  OK   Ed1
3+	 ALL   0   -Ed1	  OK   -Ed1
3+	 ALL   -0   -Ed1   OK   -Ed1
3+	 ALL   0i3	 0	 OK	  0i3
3+	 ALL   0i3	 -0	  OK   0i3
3+	 ALL   -0i3	  0	  OK   -0i3
3+	 ALL   -0i3	  -0   OK   -0i3
! Zero vs tiny -- just in case.
3+	 ALL   -0   -E	 OK	  -E
3+	 ALL   E   0   OK   E
3+	 ALL   0   -E   OK	 -E
3+	 ALL   -E   0   OK	 -E
! Zero vs Zero -- watch signs and rounding modes.
3+	 =0>   0   -0   OK	 0
3+	 =0>   -0   0   OK	 0
3+	 <	 0	 -0	  OK   -0
3+	 <	 -0	  0	  OK   -0
3+	 ALL   0   0   OK   0
3+	 ALL   -0   -0	 OK	  -0
! Double a number -- may overflow so watch rounding mode.
3+	 =>	  Hm1   Hm1	  xo   H
3+	 0<	  Hm1   Hm1	  xo   Hd1
3+	 =<	  -Hm1	 -Hm1   xo	 -H
3+	 0>	  -Hm1	 -Hm1   xo	 -Hd1
3+	 ALL   Hm1d2   Hm1d2   OK   Hd2
3+	 ALL   -Hm1d2   -Hm1d2	 OK	  -Hd2
3+	 =>	  Hd2   Hd2	  xo   H
3+	 0<	  Hd2   Hd2	  xo   Hd1
3+	 =<	  -Hd2	 -Hd2   xo	 -H
3+	 0>	  -Hd2	 -Hd2   xo	 -Hd1
! Double an innocent number.
3+	 ALL   1   1   OK   2
3+	 ALL   3   3   OK   6
3+	 ALL   E   E   OK   Ep1
3+	 ALL   Hm2	 Hm2   OK   Hm1
! Double a tiny number -- may underflow.
3+	 ALL   Ed1	 Ed1   OK   Ep1d2
3+	 ALL   -Ed1	  -Ed1	 OK	  -Ep1d2
3+	 ALL   0i4	 0i4   OK   0i8
3+	 ALL   -0i4	  -0i4	 OK	  -0i8
3+	 ALL   0i1	 0i1   OK   0i2
3+	 ALL   -0i1	  -0i1	 OK	  -0i2
! Cancellation to 0 -- to plus 0.
3+	 =0>   Hm1	 -Hm1   OK	 0
3+	 =0>   -Hm1d2   Hm1d2   OK	 0
3+	 =0>   1   -1   OK	 0
3+	 =0>   -3   3   OK	 0
3+	 =0>   E   -E   OK	 0
3+	 =0>   -E   E   OK	 0
3+	 =0>   Ed4	 -Ed4   OK	 0
3+	 =0>   -Ed1	  Ed1   OK	 0	 no underflow
3+	 =0>   0i1	 -0i1   OK	 0
3+	 =0>   -0i1	  0i1   OK	 0
3+	    =0>	    Hd1	 -Hd1 OK	  0
! Cancellation to 0 -- to minus 0.
3+	 <	 Hm1   -Hm1	  OK   -0
3+	 <	 -Hm1d2	  Hm1d2	  OK   -0
3+	 <	 1	 -1	  OK   -0
3+	 <	 -3	  3	  OK   -0
3+	 <	 E	 -E	  OK   -0
3+	 <	 -E	  E	  OK   -0
3+	 <	 Ed4   -Ed4	  OK   -0
3+	 <	 -Ed1   Ed1	  OK   -0   no underflow
3+	 <	 0i1   -0i1	  OK   -0
3+	 <	 -0i1   0i1	  OK   -0
3+	    <	    Hd1	 -Hd1 OK  -0
! Cancel forcing normalization of LSB (no rounding errors).
! Difference is in last place of larger number.
! Medium numbers...
3+	 ALL   1i1	 -1	  OK   1u1
3+	 ALL   -1i1	  1	  OK   -1u1
3+	 ALL   1i1	 -1i2   OK	 -1u1
3+	 ALL   -1i1	  1i2   OK	 1u1
3+	 ALL   2   -2i1	  OK   -2u1
3+	 ALL   -2   2i1	  OK   2u1
3+	 ALL   2i4	 -2i3   OK	 2u1
3+	 ALL   -2i4	  2i3   OK	 -2u1
3+	 ALL   4d1	 -4d2   OK	 3u1
3+	 ALL   -4d1	  4d2   OK	 -3u1
3+	 ALL   2d4	 -2d3   OK	 -1u1
3+	 ALL   -2d4	  2d3   OK	 1u1
! Huge numbers...
3+	 ALL   Hm1i1   -Hm1	  OK   Hm1u1
3+	 ALL   -Hm1i1   Hm1	  OK   -Hm1u1
3+	 ALL   Hm1i1   -Hm1i2   OK	 -Hm1u1
3+	 ALL   -Hm1i1   Hm1i2   OK	 Hm1u1
3+	 ALL   Hm2	 -Hm2i1	  OK   -Hm2u1
3+	 ALL   -Hm2	  Hm2i1	  OK   Hm2u1
3+	 ALL   Hm2i4   -Hm2i3   OK	 Hm2u1
3+	 ALL   -Hm2i4   Hm2i3   OK	 -Hm2u1
3+	 ALL   Hm2d1   -Hm2d2   OK	 Hm3u1
3+	 ALL   -Hm2d1   Hm2d2   OK	 -Hm3u1
3+	 ALL   -Hd2	  Hd1   OK	 Hd1u1
3+	 ALL   Hd2	 -Hd1   OK	 -Hd1u1
! Tiny numbers...
3+	 ALL   -Ei1	  E	  OK   -Eu1
3+	 ALL   Ei1	 -E	  OK   Eu1
3+	 ALL   -Ed1	  E	  OK   Eu1
3+	 ALL   Ed1	 -E	  OK   -Eu1
3+	 ALL   Ei1	 -Ei2   OK	 -Eu1
3+	 ALL   -Ei1	  Ei2   OK	 Eu1
3+	 ALL   Ed1	 -Ed2   OK	 Eu1
3+	 ALL   -Ed1	  Ed2   OK	 -Eu1
3+	 ALL   Ed3	 -Ed2   OK	 -Eu1
3+	 ALL   -Ed3	  Ed2   OK	 Eu1
3+	 ALL   0i2	 -0i1   OK	 Eu1
3+	 ALL   -0i2	  0i1   OK	 -Eu1
3+	 ALL   0i3	 -0i2   OK	 Eu1
3+	 ALL   -0i3	  0i2   OK	 -Eu1
! Normalize from round bit -- set up tests so that operands have
! exponents differing by 1 unit.
! Medium numbers...
3+	 ALL   2   -2d1	  OK   1u1
3+	 ALL   -2   2d1	  OK   -1u1
3+	 ALL   -2d1	  2	  OK   1u1
3+	 ALL   2d1	 -2	  OK   -1u1
3+	 ALL   4i1	 -4d1   OK	 3u3
3+	 ALL   -4i1	  4d1   OK	 -3u3
3+	 ALL   4d1	 -4i2   OK	 -3u5
3+	 ALL   -4d1	  4i2   OK	 3u5
3+	 ALL   2i1	 -1i1   OK	 1i1
3+	 ALL   -2i1	  1i1   OK	 -1i1
3+	 ALL   2i2	 -1i1   OK	 1i3
3+	 ALL   -2i2	  1i1   OK	 -1i3
3+	 ALL   2i2	 -1i3   OK	 1i1
3+	 ALL   -2i2	  1i3   OK	 -1i1
! Huge numbers...
3+	 ALL   Hm2	 -Hm2d1	  OK   Hm3u1
3+	 ALL   -Hm2	  Hm2d1	  OK   -Hm3u1
3+	 ALL   -Hm1d1   Hm1	  OK   Hm2u1
3+	 ALL   Hm1d1   -Hm1	  OK   -Hm2u1
3+	 ALL   Hm4i1   -Hm4d1   OK	 Hm5u3
3+	 ALL   -Hm4i1   Hm4d1   OK	 -Hm5u3
3+	 ALL   Hm2d1   -Hm2i2   OK	 -Hm3u5
3+	 ALL   -Hm2d1   Hm2i2   OK	 Hm3u5
3+	 ALL   Hm2i1   -Hm1i1   OK	 -Hm2i1
3+	 ALL   -Hm2i1   Hm1i1   OK	 Hm2i1
3+	 ALL   Hm1i2   -Hm2i1   OK	 Hm2i3
3+	 ALL   -Hm1i2   Hm2i1   OK	 -Hm2i3
3+	 ALL   Hm2i2   -Hm3i3   OK	 Hm3i1
3+	 ALL   -Hm2i2   Hm3i3   OK	 -Hm3i1
! Tiny numbers...
3+	 ALL   Ep1	 -Ep1d1	  OK   Eu1
3+	 ALL   -Ep1	  Ep1d1	  OK   -Eu1
3+	 ALL   -Ep1d1   Ep1	  OK   Eu1
3+	 ALL   Ep1d1   -Ep1	  OK   -Eu1
3+	 ALL   Ep1i1   -Ep1d1   OK	 Eu3
3+	 ALL   -Ep1i1   Ep1d1   OK	 -Eu3
3+	 ALL   Ep2	 -Ep2d1	  OK   Eu2
3+	 ALL   -Ep2	  Ep2d1	  OK   -Eu2
3+	 ALL   -Ep2d1   Ep2	  OK   Eu2
3+	 ALL   Ep2d1   -Ep2	  OK   -Eu2
3+	 ALL   Ep2i1   -Ep2d1   OK	 Eu6
3+	 ALL   -Ep2i1   Ep2d1   OK	 -Eu6
3+	 ALL   Ep1d1   -Ep1i2   OK	 -Eu5
3+	 ALL   -Ep1d1   Ep1i2   OK	 Eu5
3+	 ALL   Ep1d1   -Ep1i4   OK	 -Eu9
3+	 ALL   -Ep1d1   Ep1i4   OK	 Eu9
3+	 ALL   Ep1i1   -Ei1	  OK   Ei1
3+	 ALL   -Ep1i1   Ei1	  OK   -Ei1
3+	 ALL   Ep1i2   -Ei1	  OK   Ei3
3+	 ALL   -Ep1i2   Ei1	  OK   -Ei3
3+	 ALL   Ep2i2   -Ep1i3   OK	 Ep1i1
3+	 ALL   -Ep2i2   Ep1i3   OK	 -Ep1i1
! Add magnitude:
! cases where one operand is off in sticky -- rounding
! perhaps to an overflow.
! Huge vs medium.
3+	 =0<   Hm1	 1	 x	 Hm1
3+	 >	 Hm1   1   x   Hm1i1
3+	 =0>   -Hm1	  -1   x   -Hm1
3+	 <	 -Hm1   -1	 x	 -Hm1i1
3+	 =0<   Hm1d1   1   x   Hm1d1
3+	 >	 Hm1d1	 1	 x	 Hm1
3+	 =0>   -Hm1d1   -1	 x	 -Hm1d1
3+	 <	 -Hm1d1	  -1   x   -Hm1
3+	 =0<   Hd1	 1	 x	 Hd1
3+	 >	 Hd1   1   xo   H   nowadays signal overflow
3+	 =0>   -Hd1	  -1   x   -Hd1
3+	 <	 -Hd1   -1	 xo	  -H
3+	 =0<   Hd2	 1	 x	 Hd2
3+	 >	 Hd2   1   x   Hd1
3+	 =0>   -Hd2	  -1   x   -Hd2
3+	 <	 -Hd2   -1	 x	 -Hd1
! Huge vs denormal.
3+	 =0<   0i1	 Hm1   x   Hm1
3+	 >	 0i1   Hm1	 x	 Hm1i1
3+	 =0>   -0i1	  -Hm1	 x	 -Hm1
3+	 <	 -0i1   -Hm1   x   -Hm1i1
3+	 =0<   0i1	 Hm1d1	 x	 Hm1d1
3+	 >	 0i1   Hm1d1   x   Hm1
3+	 =0>   -0i1	  -Hm1d1   x   -Hm1d1
3+	 <	 -0i1   -Hm1d1	 x	 -Hm1
3+	 =0<   0i1	 Hd1   x   Hd1
3+	 >	 0i1   Hd1	 xo	  H	  nowadays signal overflow
3+	 =0>   -0i1	  -Hd1	 x	 -Hd1
3+	 <	 -0i1   -Hd1   xo   -H
3+	 =0<   0i1	 Hd2   x   Hd2
3+	 >	 0i1   Hd2	 x	 Hd1
3+	 =0>   -0i1	  -Hd2	 x	 -Hd2
3+	 <	 -0i1   -Hd2   x   -Hd1
! Medium vs denormal.
3+	 =0<   0i1	 1	 x	 1
3+	 >	 0i1   1   x   1i1
3+	 =0>   -0i1	  -1   x   -1
3+	 <	 -0i1   -1	 x	 -1i1
3+	 =0<   0i1	 1d1   x   1d1
3+	 >	 0i1   1d1	 x	 1
3+	 =0>   -0i1	  -1d1	 x	 -1d1
3+	 <	 -0i1   -1d1   x   -1
3+	 =0<   0i1	 2d1   x   2d1
3+	 >	 0i1   2d1	 x	 2
3+	 =0>   -0i1	  -2d1	 x	 -2d1
3+	 <	 -0i1   -2d1   x   -2
3+	 =0<   0i1	 2d2   x   2d2
3+	 >	 0i1   2d2	 x	 2d1
3+	 =0>   -0i1	  -2d2	 x	 -2d2
3+	 <	 -0i1   -2d2   x   -2d1
!
! Magnitude subtract when an operand is in the sticky bit.
! The interesting cases will arise when directed rounding
! forces a nonzero cancellation.
! Huge and medium.
3+	 =>	  Hm1   -1	 x	 Hm1
3+	 0<	  Hm1   -1	 x	 Hm1d1
3+	 =<	  -Hm1	 1	 x	 -Hm1
3+	 0>	  -Hm1	 1	 x	 -Hm1d1
3+	 =>	  Hm1d1	  -1   x   Hm1d1
3+	 0<	  Hm1d1	  -1   x   Hm1d2
3+	 =<	  -Hm1d1   1   x   -Hm1d1
3+	 0>	  -Hm1d1   1   x   -Hm1d2
3+	 =>	  Hd1   -1	 x	 Hd1
3+	 0<	  Hd1   -1	 x	 Hd2
3+	 =<	  -Hd1	 1	 x	 -Hd1
3+	 0>	  -Hd1	 1	 x	 -Hd2
3+	 =>	  Hd2   -1	 x	 Hd2
3+	 0<	  Hd2   -1	 x	 Hd3
3+	 =<	  -Hd2	 1	 x	 -Hd2
3+	 0>	  -Hd2	 1	 x	 -Hd3
! Huge and tiny.
3+	 =>	  Hd1   -0i1   x   Hd1
3+	 0<	  Hd1   -0i1   x   Hd2
3+	 =<	  -Hd1	 0i1   x   -Hd1
3+	 0>	  -Hd1	 0i1   x   -Hd2
3+	 =>	  -0i3	 Hm1   x   Hm1
3+	 0<	  -0i3	 Hm1   x   Hm1d1
3+	 =<	  0i3   -Hm1   x   -Hm1
3+	 0>	  0i3   -Hm1   x   -Hm1d1
! Medium and tiny.
3+	 =>	  1d1  -0i1	  x	  1d1
3+	 0<	  1d1  -0i1	  x	  1d2
3+	 =<	  -2d1	 0i1   x   -2d1
3+	 0>	  -2d1	 0i1   x   -2d2
3+	 =>	  -0i3	 3	 x	 3
3+	 0<	  -0i3	 3	 x	 3d1
3+	 =<	  0i3   -5	 x	 -5
3+	 0>	  0i3   -5	 x	 -5d1
!
! Add magnitude with difference in LSB so, except for denorms,
! round bit is crucial.	 Half-way cases arise.
! Medium cases.
3+	 =0<   1i1	 1	 x	 2
3+	 >	 1i1   1   x   2i1
3+	 =0>   -1i1	  -1   x   -2
3+	 <	 -1i1   -1	 x	 -2i1
3+	 =0>   -2   -2i1   x   -4
3+	 <	 -2	  -2i1	 x	 -4i1
3+	 =0<   2   2i1	 x	 4
3+	 >	 2	 2i1   x   4i1
3+	 =>	  1	  1i3   x   2i2
3+	 0<	  1	  1i3   x   2i1
3+	 =<	  -1   -1i3	  x	  -2i2
3+	 0>	  -1   -1i3	  x	  -2i1
3+	 =<	  -2i1	 -2i2   x   -4i2
3+	 0>	  -2i1	 -2i2   x   -4i1
3+	 =>	  2i1   2i2	  x	  4i2
3+	 0<	  2i1   2i2	  x	  4i1
! Huge cases.
3+	 =>	  Hd2   Hd1	  xo   H
3+	 0<	  Hd2   Hd1	  xo   Hd1
3+	 =<	  -Hd2	 -Hd1   xo	 -H
3+	 0>	  -Hd2	 -Hd1   xo	 -Hd1
3+	 =>	  Hm1d1	  Hm1   xo	 H
3+	 0<	  Hm1d1	  Hm1   x   Hd1
3+	 =<	  -Hm1d1   -Hm1	  xo   -H
3+	 0>	  -Hm1d1   -Hm1	  x	  -Hd1
3+	 =>	  Hm1i1	  Hm1   xo	 H
3+	 0<	  Hm1i1	  Hm1   xo	 Hd1
3+	 =<	  -Hm1i1   -Hm1	  xo   -H
3+	 0>	  -Hm1i1   -Hm1	  xo   -Hd1
3+	 =0<   Hm2i1   Hm2	 x	 Hm1
3+	 >	 Hm2i1	 Hm2   x   Hm1i1
3+	 =0>   -Hm2i1   -Hm2   x   -Hm1
3+	 <	 -Hm2i1	  -Hm2	 x	 -Hm1i1
3+	 =0<   Hm1d2   Hm1d1   x   Hd2
3+	 >	 Hm1d2	 Hm1d1	 x	 Hd1
3+	 =0>   -Hm1d2   -Hm1d1	 x	 -Hd2
3+	 <	 -Hm1d2	  -Hm1d1   x   -Hd1
! Check rounding.
3+	    >	    2	    1u1	  x		  2i1
3+	    =0<	    2	    1u1	  x		  2
3+	    =>	    2i1	  1u1   x	    2i2
3+	    0<	    2i1	  1u1   x	    2i1
3+	    =>	    4d1	  1u1   x	    4
3+	    0<	    4d1	  1u1   x	    4d1
3+	    >	    4d1	  1u1d1 x	  4
3+	    0=<	    4d1	  1u1d1 x	  4d1
3+	    =<	    -4d1  -1u1	 x	    -4
3+	    0>	    -4d1  -1u1	 x	    -4d1
3+	    <	    -4d1  -1u1d1 x	  -4
3+	    0=>	    -4d1  -1u1d1 x	  -4d1
!NAN operands.   --- SNaN cases commented out <4/29/93, JPO>
3+	    ALL	    Q	    0	    OK	    Q
3+	    ALL	    Q	    -0	    OK	    Q
3+	    ALL	    0	    Q	    OK	    Q
3+	    ALL	    -0	    Q	    OK	    Q
3+	    ALL	    Q	    1	    OK	    Q
3+	    ALL	    Q	    -1	    OK	    Q
3+	    ALL	    1	    Q	    OK	    Q
3+	    ALL	    -1	    Q	    OK	    Q
3+	    ALL	    Ed1	 Q		 OK		 Q
3+	    ALL	    -Ed1 Q		 OK		 Q
3+	    ALL	    Q	    Ed1	 OK		 Q
3+	    ALL	    Q	    -Ed1 OK		 Q
3+	    ALL	    Q	    0i1	  OK	  Q
3+	    ALL	    Q	    -0i1  OK	  Q
3+	    ALL	    0i1	  Q		  OK	  Q
3+	    ALL	    -0i1  Q		  OK	  Q
3+	    ALL	    Q	    Hd1	 OK		 Q
3+	    ALL	    Q	    -Hd1 OK		 Q
3+	    ALL	    Hd1	 Q		 OK		 Q
3+	    ALL	    -Hd1 Q		 OK		 Q
3+	    ALL	    Q	    H	   OK	   Q
3+	    ALL	    Q	    -H	   OK	   Q
3+	    ALL	    H	   Q	   OK	   Q
3+	    ALL	    -H	   Q	   OK	   Q
3+	    ALL	    Q	    Q	    OK	    Q
!3+	    ALL	    S	    0	    i	    Q
!3+	    ALL	    S	    -0	    i	    Q
!3+	    ALL	    0	    S	    i	    Q
!3+	    ALL	    -0	    S	    i	    Q
!3+	    ALL	    S	    1	    i	    Q
!3+	    ALL	    S	    -1	    i	    Q
!3+	    ALL	    1	    S	    i	    Q
!3+	    ALL	    -1	    S	    i	    Q
!3+	    ALL	    Ed1	 S		 i		 Q
!3+	    ALL	    -Ed1 S		 i		 Q
!3+	    ALL	    S	    Ed1	 i		 Q
!3+	    ALL	    S	    -Ed1 i		 Q
!3+	    ALL	    S	    0i1	  i		  Q
!3+	    ALL	    S	    -0i1  i		  Q
!3+	    ALL	    0i1	  S		  i		  Q
!3+	    ALL	    -0i1  S		  i		  Q
!3+	    ALL	    S	    Hd1	 i		 Q
!3+	    ALL	    S	    -Hd1 i		 Q
!3+	    ALL	    Hd1	 S		 i		 Q
!3+	    ALL	    -Hd1 S		 i		 Q
!3+	    ALL	    S	    H	   i	   Q
!3+	    ALL	    S	    -H	   i	   Q
!3+	    ALL	    H	   S	   i	   Q
!3+	    ALL	    -H	   S	   i	   Q
!3+	    ALL	    Q	    S	    i	    Q
!3+	    ALL	    S	    Q	    i	    Q
!3+	    ALL	    S	    S	    i	    Q