summaryrefslogtreecommitdiff
path: root/MdePkg/Library/BaseLib/Ia32/LRotU64.asm
blob: 1d5562a799c7d1d93336907da0c37d65ed86fd7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
;------------------------------------------------------------------------------
;
; Copyright (c) 2006, Intel Corporation
; All rights reserved. This program and the accompanying materials
; are licensed and made available under the terms and conditions of the BSD License
; which accompanies this distribution.  The full text of the license may be found at
; http://opensource.org/licenses/bsd-license.php
;
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
;
; Module Name:
;
;   LRotU64.asm
;
; Abstract:
;
;   64-bit left rotation for Ia32
;
;------------------------------------------------------------------------------

    .686
    .model  flat,C
    .code

InternalMathLRotU64 PROC    USES    ebx
    mov     cl, [esp + 16]
    mov     edx, [esp + 12]
    mov     eax, [esp + 8]
    shld    ebx, edx, cl
    shld    edx, eax, cl
    ror     ebx, cl
    shld    eax, ebx, cl
    test    cl, 32
    cmovnz  ecx, eax
    cmovnz  eax, edx
    cmovnz  edx, ecx
    ret
InternalMathLRotU64 ENDP

    END