#// Copyright 2010 The Code Cavern .global bda_lshift bda_lshift: # // odd and even n seem to have different runtimes push %rbx mov %rdx,%rbx lea 24(%rsi),%rsi lea 24(%rdi),%rdi mov -32(%rsi,%rbx,8),%rdx xor %rax,%rax shld %cl,%rdx,%rax sub $5,%rbx js skiplp .align 16 lp: mov (%rsi,%rbx,8),%r8 mov -24(%rsi,%rbx,8),%r11 mov -8(%rsi,%rbx,8),%r9 shld %cl,%r8,%rdx mov %rdx,8(%rdi,%rbx,8) mov %r11,%rdx mov -16(%rsi,%rbx,8),%r10 shld %cl,%r9,%r8 shld %cl,%r10,%r9 mov %r8,(%rdi,%rbx,8) mov %r9,-8(%rdi,%rbx,8) shld %cl,%r11,%r10 sub $4,%rbx mov %r10,16(%rdi,%rbx,8) jns lp skiplp: cmp $-2,%rbx ja case3 je case2 jp case1 case0: shl %cl,%rdx mov %rdx,8(%rdi,%rbx,8) pop %rbx ret .align 16 case3: mov (%rsi,%rbx,8),%r8 mov -8(%rsi,%rbx,8),%r9 shld %cl,%r8,%rdx mov %rdx,8(%rdi,%rbx,8) mov -16(%rsi,%rbx,8),%r10 shld %cl,%r9,%r8 shld %cl,%r10,%r9 mov %r8,(%rdi,%rbx,8) mov %r9,-8(%rdi,%rbx,8) shl %cl,%r10 mov %r10,16-32(%rdi,%rbx,8) pop %rbx ret .align 16 case2: mov (%rsi,%rbx,8),%r8 mov -8(%rsi,%rbx,8),%r9 shld %cl,%r8,%rdx mov %rdx,8(%rdi,%rbx,8) shld %cl,%r9,%r8 shl %cl,%r9 mov %r8,(%rdi,%rbx,8) mov %r9,-8(%rdi,%rbx,8) pop %rbx ret .align 16 case1: mov (%rsi,%rbx,8),%r8 shld %cl,%r8,%rdx mov %rdx,8(%rdi,%rbx,8) shl %cl,%r8 mov %r8,(%rdi,%rbx,8) pop %rbx ret