* * NO STRING LENGTH GIVEN...CHOSEN 1000 * PBITS ZMFACC CODE,START,NAME='Melvyn Maltz',RUNSYS=390 LA R1,TRANBIT TRANSLATE TABLE ADDRESS LA R6,BITNOS DESTINATION ADDRESS LA R7,INPLEN SOURCE LENGTH LA R8,INPUT SOURCE ADDRESS RETRY EQU * TROO R6,R8,1 TRANSLATE TO BIT NUMBERS BC 1,RETRY RETRY FOR REAL LIFE * LA R5,BITNOS BIT NUMBERS LA R6,INPLEN LENGTH LOOP EQU * MVC MYASI+1(1),0(R5) INSERT NO. OF BITS INTO ASI MYASI ASI BITS,99 ADD THEM UP AHI R5,1 BUMP POINTER BCT R6,LOOP LOOP ZMFACC CODE,END ZMFACC INPUT,START INPUT DS 0D DC C'Code fastest instruction sequence to count bits ' DC C'in an arbitrary string of bytes using currently ' DC C'available z/Architecture instructions prior to ' DC C'new instruction coming with z196 which is ' DC C'estimated to be 5 times faster.' INPLEN EQU *-INPUT ZMFACC INPUT,END ZMFACC OUTPUT,START BITS DC F'0' RESULT ZMFACC OUTPUT,END * TRANBIT DS 0D * DC X'000102030405060708090A0B0C0D0E0F' 00-0F DC X'00010102010202030102020302030304' 00-0F * DC X'101112131415161718191A1B1C1D1E1F' 10-1F DC X'01020203020303040203030403040405' 10-1F * DC X'202122232425262728292A2B2C2D2E2F' 20-2F DC X'01020203020303040203030403040405' 20-2F * DC X'303132333435363738393A3B3C3D3E3F' 30-3F DC X'02030304030404050304040504050506' 30-3F * DC X'404142434445464748494A4B4C4D4E4F' 40-4F DC X'01020203020303040203030403040405' 40-4F * DC X'505152535455565758595A5B5C5D5E5F' 50-5F DC X'02030304030404050304040504050506' 50-5F * DC X'606162636465666768696A6B6C6D6E6F' 60-6F DC X'02030304030404050304040504050506' 60-6F * DC X'707172737475767778797A7B7C7D7E7F' 70-7F DC X'03040405040505060405050605060607' 70-7F * DC X'808182838485868788898A8B8C8D8E8F' 80-8F DC X'01020203020303040203030403040405' 80-8F * DC X'909192939495969798999A9B9C9D9E9F' 90-9F DC X'02030304030404050304040504050506' 90-9F * DC X'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF' A0-AF DC X'02030304030404050304040504050506' A0-AF * DC X'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF' B0-BF DC X'03040405040505060405050605060607' B0-BF * DC X'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF' C0-CF DC X'02030304030404050304040504050506' C0-CF * DC X'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF' D0-DF DC X'03040405040505060405050605060607' D0-DF * DC X'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF' E0-EF DC X'03040405040505060405050605060607' E0-EF * DC X'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF' F0-FF DC X'04050506050606070506060706070708' F0-FF * BITNOS DS CL(INPLEN) * LTORG END