summaryrefslogtreecommitdiff
path: root/MdePkg/Library/BaseLib/Ia32/RRotU64.asm
blob: 062e201e8dfebb69a2ab310b4b174e5fea161e60 (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:
;
;   RRotU64.asm
;
; Abstract:
;
;   64-bit right rotation for Ia32
;
;------------------------------------------------------------------------------

    .686
    .model  flat,C
    .code

InternalMathRRotU64 PROC    USES    ebx
    mov     cl, [esp + 16]
    mov     eax, [esp + 8]
    mov     edx, [esp + 12]
    shrd    ebx, eax, cl
    shrd    eax, edx, cl
    rol     ebx, cl
    shrd    edx, ebx, cl
    test    cl, 32
    cmovnz  ecx, eax
    cmovnz  eax, edx
    cmovnz  edx, ecx
    ret
InternalMathRRotU64 ENDP

    END