IBMBBGC*
IBMBBGCは、位置合わせされていない2つのビット ストリングを比較するPL/I常駐ライブラリー ルーチンです。2つのストリングの対応する部分(最大32ビット長)は、偶数と奇数のレジスター ペアで位置合わせされ、CLR命令を使用して比較されます。その結果、2つのビット ストリングが同値であるか、1つめのストリングが2つめより大きいか、または2つめのストリングが1つめより大きいかを示す値が戻されます。
ヒント
このルーチンは、位置合わせされていないビット ストリングが比較される場合にのみ呼び出されます。ビット ストリングを位置合わせしておくと、この処理を回避できます。
以下の例は、ビット ストリングを比較する3つのコーディング方法を示しています。1つめの方法ではIBMBBGCが呼び出されますが、他の2つの方法では呼び出されないため、CPUはほとんど使用されません。
28行めでは、位置合わせされていない変数BIT_VECTORが比較されています。これにより、IBMBBGCへの呼び出しが生成されます。
27 1 0 IF_UNALIGNED_GC: PROCEDURE;
28 2 0 IF BIT_VECTOR(19) = TRUE THEN; ELSE;
29 2 0 END;
32行めでは、定数と比較されています。IBMBBGCは呼び出されません。
31 1 0 IF_LITERAL_NO_GC: PROCEDURE;
32 2 0 IF BIT_VECTOR(19) = '1'B THEN; ELSE;
34 2 0 END;
36行めでは、ALIGNEDとして宣言された変数が比較されています。IBMBBGCは呼び出されません。
35 1 0 IF_ALIGNED_NO_GC: PROCEDURE
36 2 0 IF BIT_VECTOR_ALIGNED(19) = TRUE THEN; ELSE;
38 2 0 END:
IBMBBGCでの処理を排除するために、位置合わせした変数、または定数を使用してください。
参考資料
『OS PL/I Resident Library: Program Logic(LY33-6008)』