Fast CRC32 in S390 assembler
   File  Edit  Confirm  Menu  Utilities  Compilers  Test  Help                  
 -------------------------------------------------------------------------------
 EDIT       JCONN.ASM(CRC32) - 01.01                        Columns 00001 00072
 Command ===>                                                  Scroll ===> CSR 
 ****** ***************************** Top of Data ******************************
 000001 *+-------------------------------------------------------------------+*
 000002 *|                                                                   |*
 000003 *|  THIS ROUTINE CALCULATES A 32-BIT CYCLIC REDUNDANCY CHECK         |*
 000004 *|  VALUE FOR THE SUPPLIED INPUT DATA.                               |*
 000005 *|                                                                   |*
 000006 *|  THIS CODE BASED UPON DOCUMENTATION AND ALGORITHMS PROVIDED BY    |*
 000007 *|  BY DR. ROSS N. WILLIAMS IN THE DOCUMENT "A PAINLESS GUIDE TO     |*
 000008 *|  CRC ERROR DETECTION ALGORITHMS." THIS DOCUMENT MAY BE DOWNLOADED |*
 000009 *|  FROM http://www.naaccr.org/standard/crc32/document.html          |*
 000010 *|                                                                   |*
 000011 *|   CALLING PARMS                                                   |*
 000012 *|     0(,R1) ADDRESS OF DATA TO BE CRC'D                            |*
 000013 *|     4(,R1) LENGTH  OF DATA TO BE CRC'D                            |*
 000014 *|     8(,R1) INITIAL VALUE FOR CRC                                  |*
 000015 *|                                                                   |*
 000016 *|   RETURN VALUE:                                                   |*
 000017 *|     R15: COMPUTED CRC VALUE                                       |*
 000018 *|                                                                   |*
 000019 *+-------------------------------------------------------------------+*
 000020 CRC32    SAVE  (14,12)
 000021 *
 000022          LR    R12,R15             BASE REG
 000023          USING CRC32,R12           TELL ASSEMBLER
 000024 *
 000025          LM    R4,R5,0(R1)         ADDRESS AND LENGTH
 000026          L     R6,=X'000000FF'     FAST "AND" VALUE
 000027          L     R15,8(,R1)          INITIAL VALUE
 000028 *
 000029 LOOP     SLR   R7,R7               CLEAR REG 7
 000030          IC    R7,0(,R4)           PICK UP THE NEXT CHARACTER
 000031          XR    R7,R15              APPLY ACCUMULATED CRC
 000032          NR    R7,R6               CLEAR ALL BUT LOW ORDER BYTE
 000033          SLL   R7,2                VALUE TIMES 4 = TABLE OFFSET
 000034          L     R7,CRC32TAB(R7)     PICK UP POLYNOMIAL VALUE
 000035          SRL   R15,8               SHIFT ACCUMULATION FOR NEW BYTE
 000036          XR    R15,R7              APPLY THE POLYNOMIAL
 000037          LA    R4,1(,R4)           POINT TO NEXT INPUT BYTE
 000038          BCT   R5,LOOP             PROCESS ALL INPUT BYTES
 000039 *
 000040          X     R15,=X'FFFFFFFF'    FINAL XOR
 000041          RETURN (14,12),RC=(15)
 000042 *+-------------------------------------------------------------------+*
 000043 *|  TABLE OF POLYNOMIAL VALUES USED TO CREATE A 32 BIT CRC           |*
 000044 *+-------------------------------------------------------------------+*
 000045          DS    0F                  FORCE FULLWORD ALIGNMENT
 000046 CRC32TAB DC    X'00000000',X'77073096',X'EE0E612C',X'990951BA'  00-03
 000047          DC    X'076DC419',X'706AF48F',X'E963A535',X'9E6495A3'  04-07
 000048          DC    X'0EDB8832',X'79DCB8A4',X'E0D5E91E',X'97D2D988'  08-0B
 000049          DC    X'09B64C2B',X'7EB17CBD',X'E7B82D07',X'90BF1D91'  0C-0F
 000050          DC    X'1DB71064',X'6AB020F2',X'F3B97148',X'84BE41DE'  10-13
 000051          DC    X'1ADAD47D',X'6DDDE4EB',X'F4D4B551',X'83D385C7'  14-17
 000052          DC    X'136C9856',X'646BA8C0',X'FD62F97A',X'8A65C9EC'  18-1B
 000053          DC    X'14015C4F',X'63066CD9',X'FA0F3D63',X'8D080DF5'  1C-1F
 000054          DC    X'3B6E20C8',X'4C69105E',X'D56041E4',X'A2677172'  20-23
 000055          DC    X'3C03E4D1',X'4B04D447',X'D20D85FD',X'A50AB56B'  24-27
 000056          DC    X'35B5A8FA',X'42B2986C',X'DBBBC9D6',X'ACBCF940'  28-2B
 000057          DC    X'32D86CE3',X'45DF5C75',X'DCD60DCF',X'ABD13D59'  2C-2F
 000058          DC    X'26D930AC',X'51DE003A',X'C8D75180',X'BFD06116'  30-33
 000059          DC    X'21B4F4B5',X'56B3C423',X'CFBA9599',X'B8BDA50F'  34-37
 000060          DC    X'2802B89E',X'5F058808',X'C60CD9B2',X'B10BE924'  38-3B
 000061          DC    X'2F6F7C87',X'58684C11',X'C1611DAB',X'B6662D3D'  3C-3F
 000062          DC    X'76DC4190',X'01DB7106',X'98D220BC',X'EFD5102A'  40-43
 000063          DC    X'71B18589',X'06B6B51F',X'9FBFE4A5',X'E8B8D433'  44-47
 000064          DC    X'7807C9A2',X'0F00F934',X'9609A88E',X'E10E9818'  48-4B
 000065          DC    X'7F6A0DBB',X'086D3D2D',X'91646C97',X'E6635C01'  4C-4F
 000066          DC    X'6B6B51F4',X'1C6C6162',X'856530D8',X'F262004E'  50-53
 000067          DC    X'6C0695ED',X'1B01A57B',X'8208F4C1',X'F50FC457'  54-57
 000068          DC    X'65B0D9C6',X'12B7E950',X'8BBEB8EA',X'FCB9887C'  58-5B
 000069          DC    X'62DD1DDF',X'15DA2D49',X'8CD37CF3',X'FBD44C65'  5C-5F
 000070          DC    X'4DB26158',X'3AB551CE',X'A3BC0074',X'D4BB30E2'  60-63
 000071          DC    X'4ADFA541',X'3DD895D7',X'A4D1C46D',X'D3D6F4FB'  64-67
 000072          DC    X'4369E96A',X'346ED9FC',X'AD678846',X'DA60B8D0'  68-6B
 000073          DC    X'44042D73',X'33031DE5',X'AA0A4C5F',X'DD0D7CC9'  6C-6F
 000074          DC    X'5005713C',X'270241AA',X'BE0B1010',X'C90C2086'  70-73
 000075          DC    X'5768B525',X'206F85B3',X'B966D409',X'CE61E49F'  74-77
 000076          DC    X'5EDEF90E',X'29D9C998',X'B0D09822',X'C7D7A8B4'  78-7B
 000077          DC    X'59B33D17',X'2EB40D81',X'B7BD5C3B',X'C0BA6CAD'  7C-7F
 000078          DC    X'EDB88320',X'9ABFB3B6',X'03B6E20C',X'74B1D29A'  80-83
 000079          DC    X'EAD54739',X'9DD277AF',X'04DB2615',X'73DC1683'  84-87
 000080          DC    X'E3630B12',X'94643B84',X'0D6D6A3E',X'7A6A5AA8'  88-8B
 000081          DC    X'E40ECF0B',X'9309FF9D',X'0A00AE27',X'7D079EB1'  8C-8F
 000082          DC    X'F00F9344',X'8708A3D2',X'1E01F268',X'6906C2FE'  90-93
 000083          DC    X'F762575D',X'806567CB',X'196C3671',X'6E6B06E7'  94-97
 000084          DC    X'FED41B76',X'89D32BE0',X'10DA7A5A',X'67DD4ACC'  98-9B
 000085          DC    X'F9B9DF6F',X'8EBEEFF9',X'17B7BE43',X'60B08ED5'  9C-9F
 000086          DC    X'D6D6A3E8',X'A1D1937E',X'38D8C2C4',X'4FDFF252'  A0-A3
 000087          DC    X'D1BB67F1',X'A6BC5767',X'3FB506DD',X'48B2364B'  A4-A7
 000088          DC    X'D80D2BDA',X'AF0A1B4C',X'36034AF6',X'41047A60'  A8-AB
 000089          DC    X'DF60EFC3',X'A867DF55',X'316E8EEF',X'4669BE79'  AC-AF
 000090          DC    X'CB61B38C',X'BC66831A',X'256FD2A0',X'5268E236'  B0-B3
 000091          DC    X'CC0C7795',X'BB0B4703',X'220216B9',X'5505262F'  B4-B7
 000092          DC    X'C5BA3BBE',X'B2BD0B28',X'2BB45A92',X'5CB36A04'  B8-BB
 000093          DC    X'C2D7FFA7',X'B5D0CF31',X'2CD99E8B',X'5BDEAE1D'  BC-BF
 000094          DC    X'9B64C2B0',X'EC63F226',X'756AA39C',X'026D930A'  C0-C3
 000095          DC    X'9C0906A9',X'EB0E363F',X'72076785',X'05005713'  C4-C7
 000096          DC    X'95BF4A82',X'E2B87A14',X'7BB12BAE',X'0CB61B38'  C8-CB
 000097          DC    X'92D28E9B',X'E5D5BE0D',X'7CDCEFB7',X'0BDBDF21'  CC-CF
 000098          DC    X'86D3D2D4',X'F1D4E242',X'68DDB3F8',X'1FDA836E'  D0-D3
 000099          DC    X'81BE16CD',X'F6B9265B',X'6FB077E1',X'18B74777'  D4-D7
 000100          DC    X'88085AE6',X'FF0F6A70',X'66063BCA',X'11010B5C'  D8-DB
 000101          DC    X'8F659EFF',X'F862AE69',X'616BFFD3',X'166CCF45'  DC-DF
 000102          DC    X'A00AE278',X'D70DD2EE',X'4E048354',X'3903B3C2'  E0-E3
 000103          DC    X'A7672661',X'D06016F7',X'4969474D',X'3E6E77DB'  E4-E7
 000104          DC    X'AED16A4A',X'D9D65ADC',X'40DF0B66',X'37D83BF0'  E8-EB
 000105          DC    X'A9BCAE53',X'DEBB9EC5',X'47B2CF7F',X'30B5FFE9'  EC-EF
 000106          DC    X'BDBDF21C',X'CABAC28A',X'53B39330',X'24B4A3A6'  F0-F3
 000107          DC    X'BAD03605',X'CDD70693',X'54DE5729',X'23D967BF'  F4-F7
 000108          DC    X'B3667A2E',X'C4614AB8',X'5D681B02',X'2A6F2B94'  F8-FB
 000109          DC    X'B40BBE37',X'C30C8EA1',X'5A05DF1B',X'2D02EF8D'  FC-FF
 000110 R0       EQU   0
 000111 R1       EQU   1
 000112 R2       EQU   2
 000113 R3       EQU   3
 000114 R4       EQU   4
 000115 R5       EQU   5
 000116 R6       EQU   6
 000117 R7       EQU   7
 000118 R8       EQU   8
 000119 R9       EQU   9
 000120 R10      EQU   10
 000121 R11      EQU   11
 000122 R12      EQU   12
 000123 R13      EQU   13
 000124 R14      EQU   14
 000125 R15      EQU   15
 000126          END  
 ****** **************************** Bottom of Data ****************************