+++ /dev/null
-#------------------------------------------------------------------------------
-#
-# 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:
-#
-# Ia32math.S
-#
-# Abstract:
-#
-# Generic math routines for EBC interpreter running on IA32 processor
-#
-#------------------------------------------------------------------------------
-.globl _LeftShiftU64
-_LeftShiftU64:
- push %ebp
- mov %esp,%ebp
- push %ecx
- cmpl $0x0,0x14(%ebp)
- jne _LeftShiftU64+0x12
- mov 0x10(%ebp),%ecx
- cmp $0x3f,%ecx
- jbe _LeftShiftU64+0x18
- xor %eax,%eax
- xor %edx,%edx
- jmp _LeftShiftU64+0x2c
- mov 0x8(%ebp),%eax
- mov 0xc(%ebp),%edx
- shld %cl,%eax,%edx
- shl %cl,%eax
- cmp $0x20,%ecx
- jb _LeftShiftU64+0x2c
- mov %eax,%edx
- xor %eax,%eax
- pop %ecx
- leave
- ret
-
-.globl _RightShiftU64
-_RightShiftU64:
- push %ebp
- mov %esp,%ebp
- push %ecx
- cmpl $0x0,0x14(%ebp)
- jne _RightShiftU64+0x12
- mov 0x10(%ebp),%ecx
- cmp $0x3f,%ecx
- jbe _RightShiftU64+0x18
- xor %eax,%eax
- xor %edx,%edx
- jmp _RightShiftU64+0x2c
- mov 0x8(%ebp),%eax
- mov 0xc(%ebp),%edx
- shrd %cl,%edx,%eax
- shr %cl,%edx
- cmp $0x20,%ecx
- jb _RightShiftU64+0x2c
- mov %edx,%eax
- xor %edx,%edx
- pop %ecx
- leave
- ret
-
-.globl _ARightShift64
-_ARightShift64:
- push %ebp
- mov %esp,%ebp
- push %ecx
- cmpl $0x0,0x14(%ebp)
- jne _ARightShift64+0x12
- mov 0x10(%ebp),%ecx
- cmp $0x3f,%ecx
- jbe _ARightShift64+0x27
- btl $0x1f,0xc(%ebp)
- jae _ARightShift64+0x21
- or $0xffffffff,%eax
- or $0xffffffff,%edx
- jmp _ARightShift64+0x3c
- xor %eax,%eax
- xor %edx,%edx
- jmp _ARightShift64+0x3c
- mov 0x8(%ebp),%eax
- mov 0xc(%ebp),%edx
- shrd %cl,%edx,%eax
- sar %cl,%edx
- cmp $0x20,%ecx
- jb _ARightShift64+0x3c
- mov %edx,%eax
- sar $0x1f,%edx
- pop %ecx
- leave
- ret
-
-.globl _MulU64x64
-_MulU64x64:
- push %ebp
- mov %esp,%ebp
- push %ebx
- push %ecx
- mov 0x18(%ebp),%ebx
- mov 0x8(%ebp),%eax
- mull 0x10(%ebp)
- push %eax
- mov %edx,%ecx
- mov 0xc(%ebp),%eax
- mull 0x10(%ebp)
- add %eax,%ecx
- adc $0x0,%edx
- mov %edx,(%ebx)
- mov 0x8(%ebp),%eax
- mull 0x14(%ebp)
- add %eax,%ecx
- push %ecx
- adc $0x0,%edx
- mov %edx,%ecx
- mov 0xc(%ebp),%eax
- mull 0x14(%ebp)
- add %eax,%ecx
- adc $0x0,%edx
- add %ecx,(%ebx)
- adc $0x0,%edx
- mov %edx,0x4(%ebx)
- pop %edx
- pop %eax
- pop %ecx
- pop %ebx
- leave
- ret
-
-.globl _MulS64x64
-_MulS64x64:
- push %ebp
- mov %esp,%ebp
- push %ebx
- push %ecx
- mov 0x18(%ebp),%ebx
- xor %ecx,%ecx
- mov 0xc(%ebp),%edx
- bt $0x1f,%edx
- jae _MulS64x64+0x2a
- mov 0x8(%ebp),%eax
- not %edx
- not %eax
- add $0x1,%eax
- adc $0x0,%edx
- mov %eax,0x8(%ebp)
- mov %edx,0xc(%ebp)
- btc $0x0,%ecx
- mov 0x14(%ebp),%edx
- bt $0x1f,%edx
- jae _MulS64x64+0x4a
- mov 0x10(%ebp),%eax
- not %edx
- not %eax
- add $0x1,%eax
- adc $0x0,%edx
- mov %eax,0x10(%ebp)
- mov %edx,0x14(%ebp)
- btc $0x0,%ecx
- pushl 0x18(%ebp)
- pushl 0x14(%ebp)
- pushl 0x10(%ebp)
- pushl 0xc(%ebp)
- pushl 0x8(%ebp)
- call _MulU64x64
- add $0x14,%esp
- bt $0x0,%ecx
- jae _MulS64x64+0x7d
- not %eax
- not %edx
- notl (%ebx)
- notl 0x4(%ebx)
- add $0x1,%eax
- adc $0x0,%edx
- adcl $0x0,(%ebx)
- adcl $0x0,0x4(%ebx)
- pop %ecx
- pop %ebx
- leave
- ret
-
-.globl _DivU64x64
-_DivU64x64:
- push %ebp
- mov %esp,%ebp
- push %ecx
- mov 0x1c(%ebp),%eax
- movl $0x0,(%eax)
- cmpl $0x0,0x10(%ebp)
- jne _DivU64x64+0x3e
- cmpl $0x0,0x14(%ebp)
- jne _DivU64x64+0x3e
- movl $0x1,(%eax)
- cmpl $0x0,0x18(%ebp)
- je _DivU64x64+0x35
- mov 0x18(%ebp),%eax
- movl $0x0,(%eax)
- movl $0x80000000,0x4(%eax)
- xor %eax,%eax
- mov $0x80000000,%edx
- jmp _DivU64x64+0x7e
- xor %edx,%edx
- xor %eax,%eax
- mov $0x40,%ecx
- shll 0x8(%ebp)
- rcll 0xc(%ebp)
- rcl %eax
- rcl %edx
- cmp 0x14(%ebp),%edx
- ja _DivU64x64+0x5d
- jb _DivU64x64+0x68
- cmp 0x10(%ebp),%eax
- jb _DivU64x64+0x68
- btsl $0x0,0x8(%ebp)
- sub 0x10(%ebp),%eax
- sbb 0x14(%ebp),%edx
- loop _DivU64x64+0x47
- cmpl $0x0,0x18(%ebp)
- je _DivU64x64+0x78
- mov 0x18(%ebp),%ecx
- mov %eax,(%ecx)
- mov %edx,0x4(%ecx)
- mov 0x8(%ebp),%eax
- mov 0xc(%ebp),%edx
- pop %ecx
- leave
- ret
-
-.globl _DivS64x64
-_DivS64x64:
- push %ebp
- mov %esp,%ebp
- push %ecx
- mov 0x1c(%ebp),%eax
- movl $0x0,(%eax)
- cmpl $0x0,0x10(%ebp)
- jne _DivS64x64+0x41
- cmpl $0x0,0x14(%ebp)
- jne _DivS64x64+0x41
- movl $0x1,(%eax)
- cmpl $0x0,0x18(%ebp)
- je _DivS64x64+0x35
- mov 0x18(%ebp),%eax
- movl $0x0,(%eax)
- movl $0x80000000,0x4(%eax)
- xor %eax,%eax
- mov $0x80000000,%edx
- jmp _DivS64x64+0xc6
- xor %ecx,%ecx
- mov 0xc(%ebp),%edx
- bt $0x1f,%edx
- jae _DivS64x64+0x67
- mov 0x8(%ebp),%eax
- not %edx
- not %eax
- add $0x1,%eax
- adc $0x0,%edx
- mov %eax,0x8(%ebp)
- mov %edx,0xc(%ebp)
- btc $0x0,%ecx
- btc $0x1,%ecx
- mov 0x14(%ebp),%edx
- bt $0x1f,%edx
- jae _DivS64x64+0x87
- mov 0x10(%ebp),%eax
- not %edx
- not %eax
- add $0x1,%eax
- adc $0x0,%edx
- mov %eax,0x10(%ebp)
- mov %edx,0x14(%ebp)
- btc $0x0,%ecx
- pushl 0x1c(%ebp)
- pushl 0x18(%ebp)
- pushl 0x14(%ebp)
- pushl 0x10(%ebp)
- pushl 0xc(%ebp)
- pushl 0x8(%ebp)
- call _DivU64x64
- add $0x18,%esp
- bt $0x0,%ecx
- jae _DivS64x64+0xb1
- not %eax
- not %edx
- add $0x1,%eax
- adc $0x0,%edx
- bt $0x1,%ecx
- jae _DivS64x64+0xc6
- mov 0x18(%ebp),%ecx
- notl (%ecx)
- notl 0x4(%ecx)
- addl $0x1,(%ecx)
- adcl $0x0,0x4(%ecx)
- pop %ecx
- leave
- ret