Annotation of embedaddon/rsync/lib/md5-asm-x86_64.S, revision 1.1

1.1     ! misho       1: /*
        !             2:  * x86-64 optimized assembler MD5 implementation
        !             3:  *
        !             4:  * Author: Marc Bevand, 2004
        !             5:  *
        !             6:  * This code was placed in the public domain by the author. The original
        !             7:  * publication can be found at:
        !             8:  *
        !             9:  * https://www.zorinaq.com/papers/md5-amd64.html
        !            10:  */
        !            11: /*
        !            12:  * No modifications were made aside from changing the function and file names.
        !            13:  * The MD5_CTX structure as expected here (from OpenSSL) is binary compatible
        !            14:  * with the md_context used by rsync, for the fields accessed.
        !            15:  *
        !            16:  * Benchmarks (in MB/s)            C     ASM
        !            17:  * - Intel Atom D2700            302     334
        !            18:  * - Intel i7-7700hq             351     376
        !            19:  * - AMD ThreadRipper 2950x      728     784
        !            20:  *
        !            21:  * The original code was also incorporated into OpenSSL. It has since been
        !            22:  * modified there. Those changes have not been made here due to licensing
        !            23:  * incompatibilities. Benchmarks of those changes on the above CPUs did not
        !            24:  * show any significant difference in performance, though.
        !            25:  */
        !            26: 
        !            27: #include "config.h"
        !            28: #include "md-defines.h"
        !            29: 
        !            30: #if !defined USE_OPENSSL && CSUM_CHUNK == 64
        !            31: 
        !            32: #ifdef __APPLE__
        !            33: #define md5_process_asm _md5_process_asm
        !            34: #endif
        !            35: 
        !            36: .text
        !            37: .align 16
        !            38: 
        !            39: .globl md5_process_asm
        !            40: md5_process_asm:
        !            41:        push    %rbp
        !            42:        push    %rbx
        !            43:        push    %r12
        !            44:        push    %r13                    # not really useful (r13 is unused)
        !            45:        push    %r14
        !            46:        push    %r15
        !            47: 
        !            48:        # rdi = arg #1 (ctx, MD5_CTX pointer)
        !            49:        # rsi = arg #2 (ptr, data pointer)
        !            50:        # rdx = arg #3 (nbr, number of 16-word blocks to process)
        !            51:        mov     %rdi,           %rbp    # rbp = ctx
        !            52:        shl     $6,             %rdx    # rdx = nbr in bytes
        !            53:        lea     (%rsi,%rdx),    %rdi    # rdi = end
        !            54:        mov     0*4(%rbp),      %eax    # eax = ctx->A
        !            55:        mov     1*4(%rbp),      %ebx    # ebx = ctx->B
        !            56:        mov     2*4(%rbp),      %ecx    # ecx = ctx->C
        !            57:        mov     3*4(%rbp),      %edx    # edx = ctx->D
        !            58:        # end is 'rdi'
        !            59:        # ptr is 'rsi'
        !            60:        # A is 'eax'
        !            61:        # B is 'ebx'
        !            62:        # C is 'ecx'
        !            63:        # D is 'edx'
        !            64: 
        !            65:        cmp     %rdi,           %rsi            # cmp end with ptr
        !            66:        je      1f                              # jmp if ptr == end
        !            67: 
        !            68:        # BEGIN of loop over 16-word blocks
        !            69: 2:     # save old values of A, B, C, D
        !            70:        mov     %eax,           %r8d
        !            71:        mov     %ebx,           %r9d
        !            72:        mov     %ecx,           %r14d
        !            73:        mov     %edx,           %r15d
        !            74:  mov   0*4(%rsi),      %r10d           /* (NEXT STEP) X[0] */
        !            75:  mov   %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !            76:        xor     %ecx,           %r11d           /* y ^ ... */
        !            77:        lea     -680876936(%eax,%r10d),%eax             /* Const + dst + ... */
        !            78:        and     %ebx,           %r11d           /* x & ... */
        !            79:        xor     %edx,           %r11d           /* z ^ ... */
        !            80:        mov     1*4(%rsi),%r10d         /* (NEXT STEP) X[1] */
        !            81:        add     %r11d,          %eax            /* dst += ... */
        !            82:        rol     $7,             %eax            /* dst <<< s */
        !            83:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !            84:        add     %ebx,           %eax            /* dst += x */
        !            85:        xor     %ebx,           %r11d           /* y ^ ... */
        !            86:        lea     -389564586(%edx,%r10d),%edx             /* Const + dst + ... */
        !            87:        and     %eax,           %r11d           /* x & ... */
        !            88:        xor     %ecx,           %r11d           /* z ^ ... */
        !            89:        mov     2*4(%rsi),%r10d         /* (NEXT STEP) X[2] */
        !            90:        add     %r11d,          %edx            /* dst += ... */
        !            91:        rol     $12,            %edx            /* dst <<< s */
        !            92:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !            93:        add     %eax,           %edx            /* dst += x */
        !            94:        xor     %eax,           %r11d           /* y ^ ... */
        !            95:        lea     606105819(%ecx,%r10d),%ecx              /* Const + dst + ... */
        !            96:        and     %edx,           %r11d           /* x & ... */
        !            97:        xor     %ebx,           %r11d           /* z ^ ... */
        !            98:        mov     3*4(%rsi),%r10d         /* (NEXT STEP) X[3] */
        !            99:        add     %r11d,          %ecx            /* dst += ... */
        !           100:        rol     $17,            %ecx            /* dst <<< s */
        !           101:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           102:        add     %edx,           %ecx            /* dst += x */
        !           103:        xor     %edx,           %r11d           /* y ^ ... */
        !           104:        lea     -1044525330(%ebx,%r10d),%ebx            /* Const + dst + ... */
        !           105:        and     %ecx,           %r11d           /* x & ... */
        !           106:        xor     %eax,           %r11d           /* z ^ ... */
        !           107:        mov     4*4(%rsi),%r10d         /* (NEXT STEP) X[4] */
        !           108:        add     %r11d,          %ebx            /* dst += ... */
        !           109:        rol     $22,            %ebx            /* dst <<< s */
        !           110:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           111:        add     %ecx,           %ebx            /* dst += x */
        !           112:        xor     %ecx,           %r11d           /* y ^ ... */
        !           113:        lea     -176418897(%eax,%r10d),%eax             /* Const + dst + ... */
        !           114:        and     %ebx,           %r11d           /* x & ... */
        !           115:        xor     %edx,           %r11d           /* z ^ ... */
        !           116:        mov     5*4(%rsi),%r10d         /* (NEXT STEP) X[5] */
        !           117:        add     %r11d,          %eax            /* dst += ... */
        !           118:        rol     $7,             %eax            /* dst <<< s */
        !           119:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           120:        add     %ebx,           %eax            /* dst += x */
        !           121:        xor     %ebx,           %r11d           /* y ^ ... */
        !           122:        lea     1200080426(%edx,%r10d),%edx             /* Const + dst + ... */
        !           123:        and     %eax,           %r11d           /* x & ... */
        !           124:        xor     %ecx,           %r11d           /* z ^ ... */
        !           125:        mov     6*4(%rsi),%r10d         /* (NEXT STEP) X[6] */
        !           126:        add     %r11d,          %edx            /* dst += ... */
        !           127:        rol     $12,            %edx            /* dst <<< s */
        !           128:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           129:        add     %eax,           %edx            /* dst += x */
        !           130:        xor     %eax,           %r11d           /* y ^ ... */
        !           131:        lea     -1473231341(%ecx,%r10d),%ecx            /* Const + dst + ... */
        !           132:        and     %edx,           %r11d           /* x & ... */
        !           133:        xor     %ebx,           %r11d           /* z ^ ... */
        !           134:        mov     7*4(%rsi),%r10d         /* (NEXT STEP) X[7] */
        !           135:        add     %r11d,          %ecx            /* dst += ... */
        !           136:        rol     $17,            %ecx            /* dst <<< s */
        !           137:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           138:        add     %edx,           %ecx            /* dst += x */
        !           139:        xor     %edx,           %r11d           /* y ^ ... */
        !           140:        lea     -45705983(%ebx,%r10d),%ebx              /* Const + dst + ... */
        !           141:        and     %ecx,           %r11d           /* x & ... */
        !           142:        xor     %eax,           %r11d           /* z ^ ... */
        !           143:        mov     8*4(%rsi),%r10d         /* (NEXT STEP) X[8] */
        !           144:        add     %r11d,          %ebx            /* dst += ... */
        !           145:        rol     $22,            %ebx            /* dst <<< s */
        !           146:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           147:        add     %ecx,           %ebx            /* dst += x */
        !           148:        xor     %ecx,           %r11d           /* y ^ ... */
        !           149:        lea     1770035416(%eax,%r10d),%eax             /* Const + dst + ... */
        !           150:        and     %ebx,           %r11d           /* x & ... */
        !           151:        xor     %edx,           %r11d           /* z ^ ... */
        !           152:        mov     9*4(%rsi),%r10d         /* (NEXT STEP) X[9] */
        !           153:        add     %r11d,          %eax            /* dst += ... */
        !           154:        rol     $7,             %eax            /* dst <<< s */
        !           155:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           156:        add     %ebx,           %eax            /* dst += x */
        !           157:        xor     %ebx,           %r11d           /* y ^ ... */
        !           158:        lea     -1958414417(%edx,%r10d),%edx            /* Const + dst + ... */
        !           159:        and     %eax,           %r11d           /* x & ... */
        !           160:        xor     %ecx,           %r11d           /* z ^ ... */
        !           161:        mov     10*4(%rsi),%r10d                /* (NEXT STEP) X[10] */
        !           162:        add     %r11d,          %edx            /* dst += ... */
        !           163:        rol     $12,            %edx            /* dst <<< s */
        !           164:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           165:        add     %eax,           %edx            /* dst += x */
        !           166:        xor     %eax,           %r11d           /* y ^ ... */
        !           167:        lea     -42063(%ecx,%r10d),%ecx         /* Const + dst + ... */
        !           168:        and     %edx,           %r11d           /* x & ... */
        !           169:        xor     %ebx,           %r11d           /* z ^ ... */
        !           170:        mov     11*4(%rsi),%r10d                /* (NEXT STEP) X[11] */
        !           171:        add     %r11d,          %ecx            /* dst += ... */
        !           172:        rol     $17,            %ecx            /* dst <<< s */
        !           173:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           174:        add     %edx,           %ecx            /* dst += x */
        !           175:        xor     %edx,           %r11d           /* y ^ ... */
        !           176:        lea     -1990404162(%ebx,%r10d),%ebx            /* Const + dst + ... */
        !           177:        and     %ecx,           %r11d           /* x & ... */
        !           178:        xor     %eax,           %r11d           /* z ^ ... */
        !           179:        mov     12*4(%rsi),%r10d                /* (NEXT STEP) X[12] */
        !           180:        add     %r11d,          %ebx            /* dst += ... */
        !           181:        rol     $22,            %ebx            /* dst <<< s */
        !           182:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           183:        add     %ecx,           %ebx            /* dst += x */
        !           184:        xor     %ecx,           %r11d           /* y ^ ... */
        !           185:        lea     1804603682(%eax,%r10d),%eax             /* Const + dst + ... */
        !           186:        and     %ebx,           %r11d           /* x & ... */
        !           187:        xor     %edx,           %r11d           /* z ^ ... */
        !           188:        mov     13*4(%rsi),%r10d                /* (NEXT STEP) X[13] */
        !           189:        add     %r11d,          %eax            /* dst += ... */
        !           190:        rol     $7,             %eax            /* dst <<< s */
        !           191:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           192:        add     %ebx,           %eax            /* dst += x */
        !           193:        xor     %ebx,           %r11d           /* y ^ ... */
        !           194:        lea     -40341101(%edx,%r10d),%edx              /* Const + dst + ... */
        !           195:        and     %eax,           %r11d           /* x & ... */
        !           196:        xor     %ecx,           %r11d           /* z ^ ... */
        !           197:        mov     14*4(%rsi),%r10d                /* (NEXT STEP) X[14] */
        !           198:        add     %r11d,          %edx            /* dst += ... */
        !           199:        rol     $12,            %edx            /* dst <<< s */
        !           200:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           201:        add     %eax,           %edx            /* dst += x */
        !           202:        xor     %eax,           %r11d           /* y ^ ... */
        !           203:        lea     -1502002290(%ecx,%r10d),%ecx            /* Const + dst + ... */
        !           204:        and     %edx,           %r11d           /* x & ... */
        !           205:        xor     %ebx,           %r11d           /* z ^ ... */
        !           206:        mov     15*4(%rsi),%r10d                /* (NEXT STEP) X[15] */
        !           207:        add     %r11d,          %ecx            /* dst += ... */
        !           208:        rol     $17,            %ecx            /* dst <<< s */
        !           209:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           210:        add     %edx,           %ecx            /* dst += x */
        !           211:        xor     %edx,           %r11d           /* y ^ ... */
        !           212:        lea     1236535329(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           213:        and     %ecx,           %r11d           /* x & ... */
        !           214:        xor     %eax,           %r11d           /* z ^ ... */
        !           215:        mov     0*4(%rsi),%r10d         /* (NEXT STEP) X[0] */
        !           216:        add     %r11d,          %ebx            /* dst += ... */
        !           217:        rol     $22,            %ebx            /* dst <<< s */
        !           218:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           219:        add     %ecx,           %ebx            /* dst += x */
        !           220:  mov   1*4(%rsi),      %r10d           /* (NEXT STEP) X[1] */
        !           221:  mov   %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           222:  mov   %edx,           %r12d           /* (NEXT STEP) z' = %edx */
        !           223:        not     %r11d                           /* not z */
        !           224:        lea     -165796510(%eax,%r10d),%eax             /* Const + dst + ... */
        !           225:        and     %ebx,           %r12d           /* x & z */
        !           226:        and     %ecx,           %r11d           /* y & (not z) */
        !           227:        mov     6*4(%rsi),%r10d         /* (NEXT STEP) X[6] */
        !           228:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           229:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           230:        add     %r12d,          %eax            /* dst += ... */
        !           231:        mov     %ecx,           %r12d           /* (NEXT STEP) z' = %ecx */
        !           232:        rol     $5,             %eax            /* dst <<< s */
        !           233:        add     %ebx,           %eax            /* dst += x */
        !           234:        not     %r11d                           /* not z */
        !           235:        lea     -1069501632(%edx,%r10d),%edx            /* Const + dst + ... */
        !           236:        and     %eax,           %r12d           /* x & z */
        !           237:        and     %ebx,           %r11d           /* y & (not z) */
        !           238:        mov     11*4(%rsi),%r10d                /* (NEXT STEP) X[11] */
        !           239:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           240:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           241:        add     %r12d,          %edx            /* dst += ... */
        !           242:        mov     %ebx,           %r12d           /* (NEXT STEP) z' = %ebx */
        !           243:        rol     $9,             %edx            /* dst <<< s */
        !           244:        add     %eax,           %edx            /* dst += x */
        !           245:        not     %r11d                           /* not z */
        !           246:        lea     643717713(%ecx,%r10d),%ecx              /* Const + dst + ... */
        !           247:        and     %edx,           %r12d           /* x & z */
        !           248:        and     %eax,           %r11d           /* y & (not z) */
        !           249:        mov     0*4(%rsi),%r10d         /* (NEXT STEP) X[0] */
        !           250:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           251:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           252:        add     %r12d,          %ecx            /* dst += ... */
        !           253:        mov     %eax,           %r12d           /* (NEXT STEP) z' = %eax */
        !           254:        rol     $14,            %ecx            /* dst <<< s */
        !           255:        add     %edx,           %ecx            /* dst += x */
        !           256:        not     %r11d                           /* not z */
        !           257:        lea     -373897302(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           258:        and     %ecx,           %r12d           /* x & z */
        !           259:        and     %edx,           %r11d           /* y & (not z) */
        !           260:        mov     5*4(%rsi),%r10d         /* (NEXT STEP) X[5] */
        !           261:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           262:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           263:        add     %r12d,          %ebx            /* dst += ... */
        !           264:        mov     %edx,           %r12d           /* (NEXT STEP) z' = %edx */
        !           265:        rol     $20,            %ebx            /* dst <<< s */
        !           266:        add     %ecx,           %ebx            /* dst += x */
        !           267:        not     %r11d                           /* not z */
        !           268:        lea     -701558691(%eax,%r10d),%eax             /* Const + dst + ... */
        !           269:        and     %ebx,           %r12d           /* x & z */
        !           270:        and     %ecx,           %r11d           /* y & (not z) */
        !           271:        mov     10*4(%rsi),%r10d                /* (NEXT STEP) X[10] */
        !           272:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           273:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           274:        add     %r12d,          %eax            /* dst += ... */
        !           275:        mov     %ecx,           %r12d           /* (NEXT STEP) z' = %ecx */
        !           276:        rol     $5,             %eax            /* dst <<< s */
        !           277:        add     %ebx,           %eax            /* dst += x */
        !           278:        not     %r11d                           /* not z */
        !           279:        lea     38016083(%edx,%r10d),%edx               /* Const + dst + ... */
        !           280:        and     %eax,           %r12d           /* x & z */
        !           281:        and     %ebx,           %r11d           /* y & (not z) */
        !           282:        mov     15*4(%rsi),%r10d                /* (NEXT STEP) X[15] */
        !           283:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           284:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           285:        add     %r12d,          %edx            /* dst += ... */
        !           286:        mov     %ebx,           %r12d           /* (NEXT STEP) z' = %ebx */
        !           287:        rol     $9,             %edx            /* dst <<< s */
        !           288:        add     %eax,           %edx            /* dst += x */
        !           289:        not     %r11d                           /* not z */
        !           290:        lea     -660478335(%ecx,%r10d),%ecx             /* Const + dst + ... */
        !           291:        and     %edx,           %r12d           /* x & z */
        !           292:        and     %eax,           %r11d           /* y & (not z) */
        !           293:        mov     4*4(%rsi),%r10d         /* (NEXT STEP) X[4] */
        !           294:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           295:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           296:        add     %r12d,          %ecx            /* dst += ... */
        !           297:        mov     %eax,           %r12d           /* (NEXT STEP) z' = %eax */
        !           298:        rol     $14,            %ecx            /* dst <<< s */
        !           299:        add     %edx,           %ecx            /* dst += x */
        !           300:        not     %r11d                           /* not z */
        !           301:        lea     -405537848(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           302:        and     %ecx,           %r12d           /* x & z */
        !           303:        and     %edx,           %r11d           /* y & (not z) */
        !           304:        mov     9*4(%rsi),%r10d         /* (NEXT STEP) X[9] */
        !           305:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           306:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           307:        add     %r12d,          %ebx            /* dst += ... */
        !           308:        mov     %edx,           %r12d           /* (NEXT STEP) z' = %edx */
        !           309:        rol     $20,            %ebx            /* dst <<< s */
        !           310:        add     %ecx,           %ebx            /* dst += x */
        !           311:        not     %r11d                           /* not z */
        !           312:        lea     568446438(%eax,%r10d),%eax              /* Const + dst + ... */
        !           313:        and     %ebx,           %r12d           /* x & z */
        !           314:        and     %ecx,           %r11d           /* y & (not z) */
        !           315:        mov     14*4(%rsi),%r10d                /* (NEXT STEP) X[14] */
        !           316:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           317:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           318:        add     %r12d,          %eax            /* dst += ... */
        !           319:        mov     %ecx,           %r12d           /* (NEXT STEP) z' = %ecx */
        !           320:        rol     $5,             %eax            /* dst <<< s */
        !           321:        add     %ebx,           %eax            /* dst += x */
        !           322:        not     %r11d                           /* not z */
        !           323:        lea     -1019803690(%edx,%r10d),%edx            /* Const + dst + ... */
        !           324:        and     %eax,           %r12d           /* x & z */
        !           325:        and     %ebx,           %r11d           /* y & (not z) */
        !           326:        mov     3*4(%rsi),%r10d         /* (NEXT STEP) X[3] */
        !           327:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           328:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           329:        add     %r12d,          %edx            /* dst += ... */
        !           330:        mov     %ebx,           %r12d           /* (NEXT STEP) z' = %ebx */
        !           331:        rol     $9,             %edx            /* dst <<< s */
        !           332:        add     %eax,           %edx            /* dst += x */
        !           333:        not     %r11d                           /* not z */
        !           334:        lea     -187363961(%ecx,%r10d),%ecx             /* Const + dst + ... */
        !           335:        and     %edx,           %r12d           /* x & z */
        !           336:        and     %eax,           %r11d           /* y & (not z) */
        !           337:        mov     8*4(%rsi),%r10d         /* (NEXT STEP) X[8] */
        !           338:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           339:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           340:        add     %r12d,          %ecx            /* dst += ... */
        !           341:        mov     %eax,           %r12d           /* (NEXT STEP) z' = %eax */
        !           342:        rol     $14,            %ecx            /* dst <<< s */
        !           343:        add     %edx,           %ecx            /* dst += x */
        !           344:        not     %r11d                           /* not z */
        !           345:        lea     1163531501(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           346:        and     %ecx,           %r12d           /* x & z */
        !           347:        and     %edx,           %r11d           /* y & (not z) */
        !           348:        mov     13*4(%rsi),%r10d                /* (NEXT STEP) X[13] */
        !           349:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           350:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           351:        add     %r12d,          %ebx            /* dst += ... */
        !           352:        mov     %edx,           %r12d           /* (NEXT STEP) z' = %edx */
        !           353:        rol     $20,            %ebx            /* dst <<< s */
        !           354:        add     %ecx,           %ebx            /* dst += x */
        !           355:        not     %r11d                           /* not z */
        !           356:        lea     -1444681467(%eax,%r10d),%eax            /* Const + dst + ... */
        !           357:        and     %ebx,           %r12d           /* x & z */
        !           358:        and     %ecx,           %r11d           /* y & (not z) */
        !           359:        mov     2*4(%rsi),%r10d         /* (NEXT STEP) X[2] */
        !           360:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           361:        mov     %ecx,           %r11d           /* (NEXT STEP) z' = %ecx */
        !           362:        add     %r12d,          %eax            /* dst += ... */
        !           363:        mov     %ecx,           %r12d           /* (NEXT STEP) z' = %ecx */
        !           364:        rol     $5,             %eax            /* dst <<< s */
        !           365:        add     %ebx,           %eax            /* dst += x */
        !           366:        not     %r11d                           /* not z */
        !           367:        lea     -51403784(%edx,%r10d),%edx              /* Const + dst + ... */
        !           368:        and     %eax,           %r12d           /* x & z */
        !           369:        and     %ebx,           %r11d           /* y & (not z) */
        !           370:        mov     7*4(%rsi),%r10d         /* (NEXT STEP) X[7] */
        !           371:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           372:        mov     %ebx,           %r11d           /* (NEXT STEP) z' = %ebx */
        !           373:        add     %r12d,          %edx            /* dst += ... */
        !           374:        mov     %ebx,           %r12d           /* (NEXT STEP) z' = %ebx */
        !           375:        rol     $9,             %edx            /* dst <<< s */
        !           376:        add     %eax,           %edx            /* dst += x */
        !           377:        not     %r11d                           /* not z */
        !           378:        lea     1735328473(%ecx,%r10d),%ecx             /* Const + dst + ... */
        !           379:        and     %edx,           %r12d           /* x & z */
        !           380:        and     %eax,           %r11d           /* y & (not z) */
        !           381:        mov     12*4(%rsi),%r10d                /* (NEXT STEP) X[12] */
        !           382:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           383:        mov     %eax,           %r11d           /* (NEXT STEP) z' = %eax */
        !           384:        add     %r12d,          %ecx            /* dst += ... */
        !           385:        mov     %eax,           %r12d           /* (NEXT STEP) z' = %eax */
        !           386:        rol     $14,            %ecx            /* dst <<< s */
        !           387:        add     %edx,           %ecx            /* dst += x */
        !           388:        not     %r11d                           /* not z */
        !           389:        lea     -1926607734(%ebx,%r10d),%ebx            /* Const + dst + ... */
        !           390:        and     %ecx,           %r12d           /* x & z */
        !           391:        and     %edx,           %r11d           /* y & (not z) */
        !           392:        mov     0*4(%rsi),%r10d         /* (NEXT STEP) X[0] */
        !           393:        or      %r11d,          %r12d           /* (y & (not z)) | (x & z) */
        !           394:        mov     %edx,           %r11d           /* (NEXT STEP) z' = %edx */
        !           395:        add     %r12d,          %ebx            /* dst += ... */
        !           396:        mov     %edx,           %r12d           /* (NEXT STEP) z' = %edx */
        !           397:        rol     $20,            %ebx            /* dst <<< s */
        !           398:        add     %ecx,           %ebx            /* dst += x */
        !           399:  mov   5*4(%rsi),      %r10d           /* (NEXT STEP) X[5] */
        !           400:  mov   %ecx,           %r11d           /* (NEXT STEP) y' = %ecx */
        !           401:        lea     -378558(%eax,%r10d),%eax                /* Const + dst + ... */
        !           402:        mov     8*4(%rsi),%r10d         /* (NEXT STEP) X[8] */
        !           403:        xor     %edx,           %r11d           /* z ^ ... */
        !           404:        xor     %ebx,           %r11d           /* x ^ ... */
        !           405:        add     %r11d,          %eax            /* dst += ... */
        !           406:        rol     $4,             %eax            /* dst <<< s */
        !           407:        mov     %ebx,           %r11d           /* (NEXT STEP) y' = %ebx */
        !           408:        add     %ebx,           %eax            /* dst += x */
        !           409:        lea     -2022574463(%edx,%r10d),%edx            /* Const + dst + ... */
        !           410:        mov     11*4(%rsi),%r10d                /* (NEXT STEP) X[11] */
        !           411:        xor     %ecx,           %r11d           /* z ^ ... */
        !           412:        xor     %eax,           %r11d           /* x ^ ... */
        !           413:        add     %r11d,          %edx            /* dst += ... */
        !           414:        rol     $11,            %edx            /* dst <<< s */
        !           415:        mov     %eax,           %r11d           /* (NEXT STEP) y' = %eax */
        !           416:        add     %eax,           %edx            /* dst += x */
        !           417:        lea     1839030562(%ecx,%r10d),%ecx             /* Const + dst + ... */
        !           418:        mov     14*4(%rsi),%r10d                /* (NEXT STEP) X[14] */
        !           419:        xor     %ebx,           %r11d           /* z ^ ... */
        !           420:        xor     %edx,           %r11d           /* x ^ ... */
        !           421:        add     %r11d,          %ecx            /* dst += ... */
        !           422:        rol     $16,            %ecx            /* dst <<< s */
        !           423:        mov     %edx,           %r11d           /* (NEXT STEP) y' = %edx */
        !           424:        add     %edx,           %ecx            /* dst += x */
        !           425:        lea     -35309556(%ebx,%r10d),%ebx              /* Const + dst + ... */
        !           426:        mov     1*4(%rsi),%r10d         /* (NEXT STEP) X[1] */
        !           427:        xor     %eax,           %r11d           /* z ^ ... */
        !           428:        xor     %ecx,           %r11d           /* x ^ ... */
        !           429:        add     %r11d,          %ebx            /* dst += ... */
        !           430:        rol     $23,            %ebx            /* dst <<< s */
        !           431:        mov     %ecx,           %r11d           /* (NEXT STEP) y' = %ecx */
        !           432:        add     %ecx,           %ebx            /* dst += x */
        !           433:        lea     -1530992060(%eax,%r10d),%eax            /* Const + dst + ... */
        !           434:        mov     4*4(%rsi),%r10d         /* (NEXT STEP) X[4] */
        !           435:        xor     %edx,           %r11d           /* z ^ ... */
        !           436:        xor     %ebx,           %r11d           /* x ^ ... */
        !           437:        add     %r11d,          %eax            /* dst += ... */
        !           438:        rol     $4,             %eax            /* dst <<< s */
        !           439:        mov     %ebx,           %r11d           /* (NEXT STEP) y' = %ebx */
        !           440:        add     %ebx,           %eax            /* dst += x */
        !           441:        lea     1272893353(%edx,%r10d),%edx             /* Const + dst + ... */
        !           442:        mov     7*4(%rsi),%r10d         /* (NEXT STEP) X[7] */
        !           443:        xor     %ecx,           %r11d           /* z ^ ... */
        !           444:        xor     %eax,           %r11d           /* x ^ ... */
        !           445:        add     %r11d,          %edx            /* dst += ... */
        !           446:        rol     $11,            %edx            /* dst <<< s */
        !           447:        mov     %eax,           %r11d           /* (NEXT STEP) y' = %eax */
        !           448:        add     %eax,           %edx            /* dst += x */
        !           449:        lea     -155497632(%ecx,%r10d),%ecx             /* Const + dst + ... */
        !           450:        mov     10*4(%rsi),%r10d                /* (NEXT STEP) X[10] */
        !           451:        xor     %ebx,           %r11d           /* z ^ ... */
        !           452:        xor     %edx,           %r11d           /* x ^ ... */
        !           453:        add     %r11d,          %ecx            /* dst += ... */
        !           454:        rol     $16,            %ecx            /* dst <<< s */
        !           455:        mov     %edx,           %r11d           /* (NEXT STEP) y' = %edx */
        !           456:        add     %edx,           %ecx            /* dst += x */
        !           457:        lea     -1094730640(%ebx,%r10d),%ebx            /* Const + dst + ... */
        !           458:        mov     13*4(%rsi),%r10d                /* (NEXT STEP) X[13] */
        !           459:        xor     %eax,           %r11d           /* z ^ ... */
        !           460:        xor     %ecx,           %r11d           /* x ^ ... */
        !           461:        add     %r11d,          %ebx            /* dst += ... */
        !           462:        rol     $23,            %ebx            /* dst <<< s */
        !           463:        mov     %ecx,           %r11d           /* (NEXT STEP) y' = %ecx */
        !           464:        add     %ecx,           %ebx            /* dst += x */
        !           465:        lea     681279174(%eax,%r10d),%eax              /* Const + dst + ... */
        !           466:        mov     0*4(%rsi),%r10d         /* (NEXT STEP) X[0] */
        !           467:        xor     %edx,           %r11d           /* z ^ ... */
        !           468:        xor     %ebx,           %r11d           /* x ^ ... */
        !           469:        add     %r11d,          %eax            /* dst += ... */
        !           470:        rol     $4,             %eax            /* dst <<< s */
        !           471:        mov     %ebx,           %r11d           /* (NEXT STEP) y' = %ebx */
        !           472:        add     %ebx,           %eax            /* dst += x */
        !           473:        lea     -358537222(%edx,%r10d),%edx             /* Const + dst + ... */
        !           474:        mov     3*4(%rsi),%r10d         /* (NEXT STEP) X[3] */
        !           475:        xor     %ecx,           %r11d           /* z ^ ... */
        !           476:        xor     %eax,           %r11d           /* x ^ ... */
        !           477:        add     %r11d,          %edx            /* dst += ... */
        !           478:        rol     $11,            %edx            /* dst <<< s */
        !           479:        mov     %eax,           %r11d           /* (NEXT STEP) y' = %eax */
        !           480:        add     %eax,           %edx            /* dst += x */
        !           481:        lea     -722521979(%ecx,%r10d),%ecx             /* Const + dst + ... */
        !           482:        mov     6*4(%rsi),%r10d         /* (NEXT STEP) X[6] */
        !           483:        xor     %ebx,           %r11d           /* z ^ ... */
        !           484:        xor     %edx,           %r11d           /* x ^ ... */
        !           485:        add     %r11d,          %ecx            /* dst += ... */
        !           486:        rol     $16,            %ecx            /* dst <<< s */
        !           487:        mov     %edx,           %r11d           /* (NEXT STEP) y' = %edx */
        !           488:        add     %edx,           %ecx            /* dst += x */
        !           489:        lea     76029189(%ebx,%r10d),%ebx               /* Const + dst + ... */
        !           490:        mov     9*4(%rsi),%r10d         /* (NEXT STEP) X[9] */
        !           491:        xor     %eax,           %r11d           /* z ^ ... */
        !           492:        xor     %ecx,           %r11d           /* x ^ ... */
        !           493:        add     %r11d,          %ebx            /* dst += ... */
        !           494:        rol     $23,            %ebx            /* dst <<< s */
        !           495:        mov     %ecx,           %r11d           /* (NEXT STEP) y' = %ecx */
        !           496:        add     %ecx,           %ebx            /* dst += x */
        !           497:        lea     -640364487(%eax,%r10d),%eax             /* Const + dst + ... */
        !           498:        mov     12*4(%rsi),%r10d                /* (NEXT STEP) X[12] */
        !           499:        xor     %edx,           %r11d           /* z ^ ... */
        !           500:        xor     %ebx,           %r11d           /* x ^ ... */
        !           501:        add     %r11d,          %eax            /* dst += ... */
        !           502:        rol     $4,             %eax            /* dst <<< s */
        !           503:        mov     %ebx,           %r11d           /* (NEXT STEP) y' = %ebx */
        !           504:        add     %ebx,           %eax            /* dst += x */
        !           505:        lea     -421815835(%edx,%r10d),%edx             /* Const + dst + ... */
        !           506:        mov     15*4(%rsi),%r10d                /* (NEXT STEP) X[15] */
        !           507:        xor     %ecx,           %r11d           /* z ^ ... */
        !           508:        xor     %eax,           %r11d           /* x ^ ... */
        !           509:        add     %r11d,          %edx            /* dst += ... */
        !           510:        rol     $11,            %edx            /* dst <<< s */
        !           511:        mov     %eax,           %r11d           /* (NEXT STEP) y' = %eax */
        !           512:        add     %eax,           %edx            /* dst += x */
        !           513:        lea     530742520(%ecx,%r10d),%ecx              /* Const + dst + ... */
        !           514:        mov     2*4(%rsi),%r10d         /* (NEXT STEP) X[2] */
        !           515:        xor     %ebx,           %r11d           /* z ^ ... */
        !           516:        xor     %edx,           %r11d           /* x ^ ... */
        !           517:        add     %r11d,          %ecx            /* dst += ... */
        !           518:        rol     $16,            %ecx            /* dst <<< s */
        !           519:        mov     %edx,           %r11d           /* (NEXT STEP) y' = %edx */
        !           520:        add     %edx,           %ecx            /* dst += x */
        !           521:        lea     -995338651(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           522:        mov     0*4(%rsi),%r10d         /* (NEXT STEP) X[0] */
        !           523:        xor     %eax,           %r11d           /* z ^ ... */
        !           524:        xor     %ecx,           %r11d           /* x ^ ... */
        !           525:        add     %r11d,          %ebx            /* dst += ... */
        !           526:        rol     $23,            %ebx            /* dst <<< s */
        !           527:        mov     %ecx,           %r11d           /* (NEXT STEP) y' = %ecx */
        !           528:        add     %ecx,           %ebx            /* dst += x */
        !           529:  mov   0*4(%rsi),      %r10d           /* (NEXT STEP) X[0] */
        !           530:  mov   $0xffffffff,    %r11d
        !           531:  xor   %edx,           %r11d           /* (NEXT STEP) not z' = not %edx*/
        !           532:        lea     -198630844(%eax,%r10d),%eax             /* Const + dst + ... */
        !           533:        or      %ebx,           %r11d           /* x | ... */
        !           534:        xor     %ecx,           %r11d           /* y ^ ... */
        !           535:        add     %r11d,          %eax            /* dst += ... */
        !           536:        mov     7*4(%rsi),%r10d         /* (NEXT STEP) X[7] */
        !           537:        mov     $0xffffffff,    %r11d
        !           538:        rol     $6,             %eax            /* dst <<< s */
        !           539:        xor     %ecx,           %r11d           /* (NEXT STEP) not z' = not %ecx */
        !           540:        add     %ebx,           %eax            /* dst += x */
        !           541:        lea     1126891415(%edx,%r10d),%edx             /* Const + dst + ... */
        !           542:        or      %eax,           %r11d           /* x | ... */
        !           543:        xor     %ebx,           %r11d           /* y ^ ... */
        !           544:        add     %r11d,          %edx            /* dst += ... */
        !           545:        mov     14*4(%rsi),%r10d                /* (NEXT STEP) X[14] */
        !           546:        mov     $0xffffffff,    %r11d
        !           547:        rol     $10,            %edx            /* dst <<< s */
        !           548:        xor     %ebx,           %r11d           /* (NEXT STEP) not z' = not %ebx */
        !           549:        add     %eax,           %edx            /* dst += x */
        !           550:        lea     -1416354905(%ecx,%r10d),%ecx            /* Const + dst + ... */
        !           551:        or      %edx,           %r11d           /* x | ... */
        !           552:        xor     %eax,           %r11d           /* y ^ ... */
        !           553:        add     %r11d,          %ecx            /* dst += ... */
        !           554:        mov     5*4(%rsi),%r10d         /* (NEXT STEP) X[5] */
        !           555:        mov     $0xffffffff,    %r11d
        !           556:        rol     $15,            %ecx            /* dst <<< s */
        !           557:        xor     %eax,           %r11d           /* (NEXT STEP) not z' = not %eax */
        !           558:        add     %edx,           %ecx            /* dst += x */
        !           559:        lea     -57434055(%ebx,%r10d),%ebx              /* Const + dst + ... */
        !           560:        or      %ecx,           %r11d           /* x | ... */
        !           561:        xor     %edx,           %r11d           /* y ^ ... */
        !           562:        add     %r11d,          %ebx            /* dst += ... */
        !           563:        mov     12*4(%rsi),%r10d                /* (NEXT STEP) X[12] */
        !           564:        mov     $0xffffffff,    %r11d
        !           565:        rol     $21,            %ebx            /* dst <<< s */
        !           566:        xor     %edx,           %r11d           /* (NEXT STEP) not z' = not %edx */
        !           567:        add     %ecx,           %ebx            /* dst += x */
        !           568:        lea     1700485571(%eax,%r10d),%eax             /* Const + dst + ... */
        !           569:        or      %ebx,           %r11d           /* x | ... */
        !           570:        xor     %ecx,           %r11d           /* y ^ ... */
        !           571:        add     %r11d,          %eax            /* dst += ... */
        !           572:        mov     3*4(%rsi),%r10d         /* (NEXT STEP) X[3] */
        !           573:        mov     $0xffffffff,    %r11d
        !           574:        rol     $6,             %eax            /* dst <<< s */
        !           575:        xor     %ecx,           %r11d           /* (NEXT STEP) not z' = not %ecx */
        !           576:        add     %ebx,           %eax            /* dst += x */
        !           577:        lea     -1894986606(%edx,%r10d),%edx            /* Const + dst + ... */
        !           578:        or      %eax,           %r11d           /* x | ... */
        !           579:        xor     %ebx,           %r11d           /* y ^ ... */
        !           580:        add     %r11d,          %edx            /* dst += ... */
        !           581:        mov     10*4(%rsi),%r10d                /* (NEXT STEP) X[10] */
        !           582:        mov     $0xffffffff,    %r11d
        !           583:        rol     $10,            %edx            /* dst <<< s */
        !           584:        xor     %ebx,           %r11d           /* (NEXT STEP) not z' = not %ebx */
        !           585:        add     %eax,           %edx            /* dst += x */
        !           586:        lea     -1051523(%ecx,%r10d),%ecx               /* Const + dst + ... */
        !           587:        or      %edx,           %r11d           /* x | ... */
        !           588:        xor     %eax,           %r11d           /* y ^ ... */
        !           589:        add     %r11d,          %ecx            /* dst += ... */
        !           590:        mov     1*4(%rsi),%r10d         /* (NEXT STEP) X[1] */
        !           591:        mov     $0xffffffff,    %r11d
        !           592:        rol     $15,            %ecx            /* dst <<< s */
        !           593:        xor     %eax,           %r11d           /* (NEXT STEP) not z' = not %eax */
        !           594:        add     %edx,           %ecx            /* dst += x */
        !           595:        lea     -2054922799(%ebx,%r10d),%ebx            /* Const + dst + ... */
        !           596:        or      %ecx,           %r11d           /* x | ... */
        !           597:        xor     %edx,           %r11d           /* y ^ ... */
        !           598:        add     %r11d,          %ebx            /* dst += ... */
        !           599:        mov     8*4(%rsi),%r10d         /* (NEXT STEP) X[8] */
        !           600:        mov     $0xffffffff,    %r11d
        !           601:        rol     $21,            %ebx            /* dst <<< s */
        !           602:        xor     %edx,           %r11d           /* (NEXT STEP) not z' = not %edx */
        !           603:        add     %ecx,           %ebx            /* dst += x */
        !           604:        lea     1873313359(%eax,%r10d),%eax             /* Const + dst + ... */
        !           605:        or      %ebx,           %r11d           /* x | ... */
        !           606:        xor     %ecx,           %r11d           /* y ^ ... */
        !           607:        add     %r11d,          %eax            /* dst += ... */
        !           608:        mov     15*4(%rsi),%r10d                /* (NEXT STEP) X[15] */
        !           609:        mov     $0xffffffff,    %r11d
        !           610:        rol     $6,             %eax            /* dst <<< s */
        !           611:        xor     %ecx,           %r11d           /* (NEXT STEP) not z' = not %ecx */
        !           612:        add     %ebx,           %eax            /* dst += x */
        !           613:        lea     -30611744(%edx,%r10d),%edx              /* Const + dst + ... */
        !           614:        or      %eax,           %r11d           /* x | ... */
        !           615:        xor     %ebx,           %r11d           /* y ^ ... */
        !           616:        add     %r11d,          %edx            /* dst += ... */
        !           617:        mov     6*4(%rsi),%r10d         /* (NEXT STEP) X[6] */
        !           618:        mov     $0xffffffff,    %r11d
        !           619:        rol     $10,            %edx            /* dst <<< s */
        !           620:        xor     %ebx,           %r11d           /* (NEXT STEP) not z' = not %ebx */
        !           621:        add     %eax,           %edx            /* dst += x */
        !           622:        lea     -1560198380(%ecx,%r10d),%ecx            /* Const + dst + ... */
        !           623:        or      %edx,           %r11d           /* x | ... */
        !           624:        xor     %eax,           %r11d           /* y ^ ... */
        !           625:        add     %r11d,          %ecx            /* dst += ... */
        !           626:        mov     13*4(%rsi),%r10d                /* (NEXT STEP) X[13] */
        !           627:        mov     $0xffffffff,    %r11d
        !           628:        rol     $15,            %ecx            /* dst <<< s */
        !           629:        xor     %eax,           %r11d           /* (NEXT STEP) not z' = not %eax */
        !           630:        add     %edx,           %ecx            /* dst += x */
        !           631:        lea     1309151649(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           632:        or      %ecx,           %r11d           /* x | ... */
        !           633:        xor     %edx,           %r11d           /* y ^ ... */
        !           634:        add     %r11d,          %ebx            /* dst += ... */
        !           635:        mov     4*4(%rsi),%r10d         /* (NEXT STEP) X[4] */
        !           636:        mov     $0xffffffff,    %r11d
        !           637:        rol     $21,            %ebx            /* dst <<< s */
        !           638:        xor     %edx,           %r11d           /* (NEXT STEP) not z' = not %edx */
        !           639:        add     %ecx,           %ebx            /* dst += x */
        !           640:        lea     -145523070(%eax,%r10d),%eax             /* Const + dst + ... */
        !           641:        or      %ebx,           %r11d           /* x | ... */
        !           642:        xor     %ecx,           %r11d           /* y ^ ... */
        !           643:        add     %r11d,          %eax            /* dst += ... */
        !           644:        mov     11*4(%rsi),%r10d                /* (NEXT STEP) X[11] */
        !           645:        mov     $0xffffffff,    %r11d
        !           646:        rol     $6,             %eax            /* dst <<< s */
        !           647:        xor     %ecx,           %r11d           /* (NEXT STEP) not z' = not %ecx */
        !           648:        add     %ebx,           %eax            /* dst += x */
        !           649:        lea     -1120210379(%edx,%r10d),%edx            /* Const + dst + ... */
        !           650:        or      %eax,           %r11d           /* x | ... */
        !           651:        xor     %ebx,           %r11d           /* y ^ ... */
        !           652:        add     %r11d,          %edx            /* dst += ... */
        !           653:        mov     2*4(%rsi),%r10d         /* (NEXT STEP) X[2] */
        !           654:        mov     $0xffffffff,    %r11d
        !           655:        rol     $10,            %edx            /* dst <<< s */
        !           656:        xor     %ebx,           %r11d           /* (NEXT STEP) not z' = not %ebx */
        !           657:        add     %eax,           %edx            /* dst += x */
        !           658:        lea     718787259(%ecx,%r10d),%ecx              /* Const + dst + ... */
        !           659:        or      %edx,           %r11d           /* x | ... */
        !           660:        xor     %eax,           %r11d           /* y ^ ... */
        !           661:        add     %r11d,          %ecx            /* dst += ... */
        !           662:        mov     9*4(%rsi),%r10d         /* (NEXT STEP) X[9] */
        !           663:        mov     $0xffffffff,    %r11d
        !           664:        rol     $15,            %ecx            /* dst <<< s */
        !           665:        xor     %eax,           %r11d           /* (NEXT STEP) not z' = not %eax */
        !           666:        add     %edx,           %ecx            /* dst += x */
        !           667:        lea     -343485551(%ebx,%r10d),%ebx             /* Const + dst + ... */
        !           668:        or      %ecx,           %r11d           /* x | ... */
        !           669:        xor     %edx,           %r11d           /* y ^ ... */
        !           670:        add     %r11d,          %ebx            /* dst += ... */
        !           671:        mov     0*4(%rsi),%r10d         /* (NEXT STEP) X[0] */
        !           672:        mov     $0xffffffff,    %r11d
        !           673:        rol     $21,            %ebx            /* dst <<< s */
        !           674:        xor     %edx,           %r11d           /* (NEXT STEP) not z' = not %edx */
        !           675:        add     %ecx,           %ebx            /* dst += x */
        !           676:        # add old values of A, B, C, D
        !           677:        add     %r8d,   %eax
        !           678:        add     %r9d,   %ebx
        !           679:        add     %r14d,  %ecx
        !           680:        add     %r15d,  %edx
        !           681: 
        !           682:        # loop control
        !           683:        add     $64,            %rsi            # ptr += 64
        !           684:        cmp     %rdi,           %rsi            # cmp end with ptr
        !           685:        jb      2b                              # jmp if ptr < end
        !           686:        # END of loop over 16-word blocks
        !           687: 1:
        !           688:        mov     %eax,           0*4(%rbp)       # ctx->A = A
        !           689:        mov     %ebx,           1*4(%rbp)       # ctx->B = B
        !           690:        mov     %ecx,           2*4(%rbp)       # ctx->C = C
        !           691:        mov     %edx,           3*4(%rbp)       # ctx->D = D
        !           692: 
        !           693:        pop     %r15
        !           694:        pop     %r14
        !           695:        pop     %r13                            # not really useful (r13 is unused)
        !           696:        pop     %r12
        !           697:        pop     %rbx
        !           698:        pop     %rbp
        !           699:        ret
        !           700: 
        !           701: #endif /* !USE_OPENSSL ... */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>