DCL DD RESOLVE CHAR(34); DCL DD RESOLVE-TYPE CHAR( 2) DEF(RESOLVE) POS( 1) INIT(X'0201'); DCL DD RESOLVE-NAME CHAR(30) DEF(RESOLVE) POS( 3); DCL DD RESOLVE-AUTH CHAR( 2) DEF(RESOLVE) POS(33) INIT(X'0000'); DCL SPCPTR .PARM1 INIT(PARM1); DCL DD PARM1 CHAR(5); DCL DD PARM-NBR-ELEMENTS PKD(7,0) DEF(PARM1) POS(1); DCL DD PARM-DIRECTION CHAR(1) DEF(PARM1) POS(5); DCL SPCPTR .PARM2 INIT(PARM2); DCL DD PARM2(1000000) ZND(10,0); /* MAX 16MB */ DCL SYSPTR .COMBSORT; DCL OL COMBSORT(.PARM1, .PARM2) ARG; DCL DD NBR BIN(4); DCL DD MAX BIN(4); DCL DD LN-TIME FLT(8); DCL DD LOG2-TIME FLT(8); DCL DD LN-N FLT(8); DCL DD LOG2-N FLT(8); DCL DD LN-2 FLT(8); DCL DD FLT-N FLT(8); DCL DD N*LOG2-N FLT(8); DCL DD RESULT ZND(10,0); DCL DD RND-RESULT PKD( 7,0); /* ALSO SEED VALUE */ DCL DD RND-QUOTIENT PKD( 7,0); DCL DD RND-PRODUCT PKD(15,0); DCL DD RND-MODULUS PKD( 7,0) INIT(P'+2099863'); DCL DD RND-MULTIPLIER PKD( 7,0) INIT(P'+1005973'); DCL DD RND-INCREMENT PKD( 7,0) INIT(P'+443771'); DCL DD CPU-TIMES CHAR(24) BDRY(8); DCL DD CPU-BEFORE CHAR(8) DEF(CPU-TIMES) POS( 1); DCL DD CPU-AFTER CHAR(8) DEF(CPU-TIMES) POS( 9); DCL DD CPU-DIFFERENCE CHAR(8) DEF(CPU-TIMES) POS(17); DCL DD CPU-DIFF-HI BIN(4) UNSGND DEF(CPU-DIFFERENCE) POS(1); DCL DD CPU-DIFF-LO BIN(4) UNSGND DEF(CPU-DIFFERENCE) POS(5); DCL DD TIMESTAMP PKD(21,0); DCL DD TIMESTAMP-HI PKD(11,0); DCL DD TIMESTAMP-LO PKD(11,0); DCL DD TWO**32 PKD(11,0) INIT(P'4294967296'); DCL SPCPTR .MAT-PROC-ATTRS INIT(MAT-PROC-ATTRS); DCL DD MAT-PROC-ATTRS CHAR(22); DCL DD MAT-BYTES-PROVIDED BIN(4) DEF(MAT-PROC-ATTRS) POS( 1); DCL DD MAT-BYTES-AVAILABLE BIN(4) DEF(MAT-PROC-ATTRS) POS( 5); DCL DD MAT-TOTAL-BYTES-USED BIN(4) DEF(MAT-PROC-ATTRS) POS( 9); DCL DD MAT-CPU-TIME-USED CHAR(8) DEF(MAT-PROC-ATTRS) POS(13); DCL DD MAT-NBR-OF-LOCKS BIN(2) DEF(MAT-PROC-ATTRS) POS(21); ENTRY * EXT; CPYNV MAT-BYTES-PROVIDED, 20; CMF1 LN-2, X'0011', E'2'; CPYNV MAX, 0; NEXT-MAX: ADDN(S) MAX, 50000; CPYNV RND-RESULT, 314159; CPYNV NBR, 0; NEXT: MULT RND-PRODUCT, RND-MULTIPLIER, RND-RESULT; ADDN(S) RND-PRODUCT, RND-INCREMENT; REM RND-RESULT , RND-PRODUCT, RND-MODULUS; ADDN(S) NBR, 1; CPYNV PARM2(NBR), RND-RESULT; CMPNV(B) NBR, MAX/LO(NEXT); CPYBLAP RESOLVE-NAME, "COMBSORT" , " "; RSLVSP .COMBSORT, RESOLVE, *, *; CPYNV PARM-NBR-ELEMENTS, MAX; CPYBLA PARM-DIRECTION, "A"; BRK "1"; MATPRATR .MAT-PROC-ATTRS, *, X'21'; CPYBLA CPU-BEFORE, MAT-CPU-TIME-USED; CALLX .COMBSORT, COMBSORT, *; MATPRATR .MAT-PROC-ATTRS, *, X'21'; CPYBLA CPU-AFTER , MAT-CPU-TIME-USED; BRK "2"; SUBLC CPU-DIFFERENCE, CPU-AFTER, CPU-BEFORE; CPYNV TIMESTAMP-HI, CPU-DIFF-HI; CPYNV TIMESTAMP-LO, CPU-DIFF-LO; MULT TIMESTAMP, TIMESTAMP-HI, TWO**32; ADDN(S) TIMESTAMP, TIMESTAMP-LO; CPYNV RESULT, MAX; CPYBLAP MSG-TEXT, RESULT, " "; CPYNV FLT-N, MAX; CMF1 LN-N, X'0011', FLT-N; DIV LOG2-N, LN-N, LN-2; MULT N*LOG2-N, MAX, LOG2-N; CPYNV(R) RESULT, N*LOG2-N; CPYBLA MSG-TEXT(13:10), RESULT; DIV RESULT, TIMESTAMP, 4096; /* MICROSECONDS */ CPYBLA MSG-TEXT(25:10), RESULT; CALLI SHOW-MESSAGE, *, .SHOW-MESSAGE; CMPNV(B) MAX, 1000000/LO(NEXT-MAX); RTX *; %INCLUDE SHOWMSG