1#------------------------------------------------------------------------------ 2# 3# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> 4# This program and the accompanying materials 5# are licensed and made available under the terms and conditions of the BSD License 6# which accompanies this distribution. The full text of the license may be found at 7# http://opensource.org/licenses/bsd-license.php. 8# 9# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11# 12# Module Name: 13# 14# LRotU64.S 15# 16# Abstract: 17# 18# 64-bit left rotation for Ia32 19# 20#------------------------------------------------------------------------------ 21 22ASM_GLOBAL ASM_PFX(InternalMathLRotU64) 23 24#------------------------------------------------------------------------------ 25# UINT64 26# EFIAPI 27# InternalMathLRotU64 ( 28# IN UINT64 Operand, 29# IN UINTN Count 30# ); 31#------------------------------------------------------------------------------ 32ASM_PFX(InternalMathLRotU64): 33 push %ebx 34 movb 16(%esp), %cl 35 movl 12(%esp), %edx 36 movl 8(%esp), %eax 37 shldl %cl, %edx, %ebx 38 shldl %cl, %eax, %edx 39 rorl %cl, %ebx 40 shldl %cl, %ebx, %eax 41 testb $32, %cl # Count >= 32? 42 jz L0 43 movl %eax, %ecx 44 movl %edx, %eax 45 movl %ecx, %edx 46L0: 47 pop %ebx 48 ret 49