Adding support for BeagleBoard.
ArmPkg - Supoprt for ARM specific things that can change as the architecture changes. Plus semihosting JTAG drivers. EmbeddedPkg - Generic support for an embeddded platform. Including a light weight command line shell. BeagleBoardPkg - Platform specifics for BeagleBoard. SD Card works, but USB has issues. Looks like a bug in the open source USB stack (Our internal stack works fine). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9518 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
83
ArmPkg/Library/CompilerIntrinsicsLib/Arm/Llvm_int_lib.h
Normal file
83
ArmPkg/Library/CompilerIntrinsicsLib/Arm/Llvm_int_lib.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
#include <Base.h>
|
||||
#include <Library/DebugLib.h>
|
||||
|
||||
#define CHAR_BIT 8
|
||||
|
||||
typedef union {
|
||||
INT64 all;
|
||||
struct {
|
||||
UINT32 low;
|
||||
INT32 high;
|
||||
};
|
||||
} dwords;
|
||||
|
||||
typedef union {
|
||||
UINT64 all;
|
||||
struct {
|
||||
UINT32 low;
|
||||
UINT32 high;
|
||||
};
|
||||
} udwords;
|
||||
|
||||
#if __GNUC__
|
||||
#define COUNT_LEADING_ZEROS(_a) __builtin_clz((_a))
|
||||
#define COUNT_TRAILING_ZEROS(_a) __builtin_ctz((_a))
|
||||
#else
|
||||
#error COUNT_LEADING_ZEROS() and COUNT_TRAILING_ZEROS() macros not ported to your compiler
|
||||
#endif
|
38
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashldi3.S
Normal file
38
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashldi3.S
Normal file
@@ -0,0 +1,38 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___ashldi3
|
||||
___ashldi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 0, uses_anonymous_args = 0
|
||||
@ link register save eliminated.
|
||||
cmp r2, #31
|
||||
@ lr needed for prologue
|
||||
bls L2
|
||||
cmp r2, #63
|
||||
subls r2, r2, #32
|
||||
movls r2, r0, asl r2
|
||||
movhi r2, #0
|
||||
mov r1, r2
|
||||
mov r0, #0
|
||||
bx lr
|
||||
L2:
|
||||
cmp r2, #0
|
||||
rsbne r3, r2, #32
|
||||
movne r3, r0, lsr r3
|
||||
movne r0, r0, asl r2
|
||||
orrne r1, r3, r1, asl r2
|
||||
bx lr
|
83
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashldi3.c
Normal file
83
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashldi3.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Returns: a << b
|
||||
|
||||
// Precondition: 0 <= b < bits_in_dword
|
||||
|
||||
INT64
|
||||
__ashldi3(INT64 a, INT32 b)
|
||||
{
|
||||
const int bits_in_word = (int)(sizeof(INT32) * CHAR_BIT);
|
||||
dwords input;
|
||||
dwords result;
|
||||
input.all = a;
|
||||
if (b & bits_in_word) // bits_in_word <= b < bits_in_dword
|
||||
{
|
||||
result.low = 0;
|
||||
result.high = input.low << (b - bits_in_word);
|
||||
}
|
||||
else // 0 <= b < bits_in_word
|
||||
{
|
||||
if (b == 0)
|
||||
return a;
|
||||
result.low = input.low << b;
|
||||
result.high = (input.high << b) | (input.low >> (bits_in_word - b));
|
||||
}
|
||||
return result.all;
|
||||
}
|
39
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashrdi3.S
Normal file
39
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashrdi3.S
Normal file
@@ -0,0 +1,39 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___ashrdi3
|
||||
___ashrdi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 0, uses_anonymous_args = 0
|
||||
@ link register save eliminated.
|
||||
cmp r2, #31
|
||||
@ lr needed for prologue
|
||||
bls L2
|
||||
cmp r2, #63
|
||||
subls r2, r2, #32
|
||||
mov ip, r1, asr #31
|
||||
movls r2, r1, asr r2
|
||||
movhi r2, ip
|
||||
mov r0, r2
|
||||
mov r1, ip
|
||||
bx lr
|
||||
L2:
|
||||
cmp r2, #0
|
||||
rsbne r3, r2, #32
|
||||
movne r3, r1, asl r3
|
||||
movne r1, r1, asr r2
|
||||
orrne r0, r3, r0, lsr r2
|
||||
bx lr
|
84
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashrdi3.c
Normal file
84
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashrdi3.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Returns: arithmetic a >> b
|
||||
|
||||
// Precondition: 0 <= b < bits_in_dword
|
||||
|
||||
INT64
|
||||
__ashrdi3(INT64 a, INT32 b)
|
||||
{
|
||||
const int bits_in_word = (int)(sizeof(INT32) * CHAR_BIT);
|
||||
dwords input;
|
||||
dwords result;
|
||||
input.all = a;
|
||||
if (b & bits_in_word) // bits_in_word <= b < bits_in_dword
|
||||
{
|
||||
// result.high = input.high < 0 ? -1 : 0
|
||||
result.high = input.high >> (bits_in_word - 1);
|
||||
result.low = input.high >> (b - bits_in_word);
|
||||
}
|
||||
else // 0 <= b < bits_in_word
|
||||
{
|
||||
if (b == 0)
|
||||
return a;
|
||||
result.high = input.high >> b;
|
||||
result.low = (input.high << (bits_in_word - b)) | (input.low >> b);
|
||||
}
|
||||
return result.all;
|
||||
}
|
96
ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.c
Normal file
96
ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.c
Normal file
@@ -0,0 +1,96 @@
|
||||
/** @file
|
||||
Compiler intrinsic to return the number of leading zeros, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Returns: the number of leading 0-bits
|
||||
|
||||
// Precondition: a != 0
|
||||
|
||||
INT32
|
||||
__clzsi2(INT32 a)
|
||||
{
|
||||
UINT32 x = (UINT32)a;
|
||||
INT32 t = ((x & 0xFFFF0000) == 0) << 4; // if (x is small) t = 16 else 0
|
||||
x >>= 16 - t; // x = [0 - 0xFFFF]
|
||||
UINT32 r = t; // r = [0, 16]
|
||||
// return r + clz(x)
|
||||
t = ((x & 0xFF00) == 0) << 3;
|
||||
x >>= 8 - t; // x = [0 - 0xFF]
|
||||
r += t; // r = [0, 8, 16, 24]
|
||||
// return r + clz(x)
|
||||
t = ((x & 0xF0) == 0) << 2;
|
||||
x >>= 4 - t; // x = [0 - 0xF]
|
||||
r += t; // r = [0, 4, 8, 12, 16, 20, 24, 28]
|
||||
// return r + clz(x)
|
||||
t = ((x & 0xC) == 0) << 1;
|
||||
x >>= 2 - t; // x = [0 - 3]
|
||||
r += t; // r = [0 - 30] and is even
|
||||
// return r + clz(x)
|
||||
// switch (x)
|
||||
// {
|
||||
// case 0:
|
||||
// return r + 2;
|
||||
// case 1:
|
||||
// return r + 1;
|
||||
// case 2:
|
||||
// case 3:
|
||||
// return r;
|
||||
// }
|
||||
return r + ((2 - x) & -((x & 2) == 0));
|
||||
}
|
111
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.c
Normal file
111
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.c
Normal file
@@ -0,0 +1,111 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/** @file
|
||||
Compiler intrinsic to return the number of trailing zeros, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008, Apple, Inc.
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Returns: the number of trailing 0-bits
|
||||
|
||||
// Precondition: a != 0
|
||||
|
||||
INT32
|
||||
__ctzsi2(INT32 a)
|
||||
{
|
||||
UINT32 x = (UINT32)a;
|
||||
INT32 t = ((x & 0x0000FFFF) == 0) << 4; // if (x has no small bits) t = 16 else 0
|
||||
x >>= t; // x = [0 - 0xFFFF] + higher garbage bits
|
||||
UINT32 r = t; // r = [0, 16]
|
||||
// return r + ctz(x)
|
||||
t = ((x & 0x00FF) == 0) << 3;
|
||||
x >>= t; // x = [0 - 0xFF] + higher garbage bits
|
||||
r += t; // r = [0, 8, 16, 24]
|
||||
// return r + ctz(x)
|
||||
t = ((x & 0x0F) == 0) << 2;
|
||||
x >>= t; // x = [0 - 0xF] + higher garbage bits
|
||||
r += t; // r = [0, 4, 8, 12, 16, 20, 24, 28]
|
||||
// return r + ctz(x)
|
||||
t = ((x & 0x3) == 0) << 1;
|
||||
x >>= t;
|
||||
x &= 3; // x = [0 - 3]
|
||||
r += t; // r = [0 - 30] and is even
|
||||
// return r + ctz(x)
|
||||
// The branch-less return statement below is equivalent
|
||||
// to the following switch statement:
|
||||
// switch (x)
|
||||
// {
|
||||
// case 0:
|
||||
// return r + 2;
|
||||
// case 2:
|
||||
// return r + 1;
|
||||
// case 1:
|
||||
// case 3:
|
||||
// return r;
|
||||
// }
|
||||
return r + ((2 - (x >> 1)) & -((x & 1) == 0));
|
||||
}
|
155
ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
Normal file
155
ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.asm
Normal file
@@ -0,0 +1,155 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_uidiv
|
||||
EXPORT __aeabi_uidivmod
|
||||
EXPORT __aeabi_idiv
|
||||
EXPORT __aeabi_idivmod
|
||||
|
||||
AREA Math, CODE, READONLY
|
||||
|
||||
;
|
||||
;UINT32
|
||||
;EFIAPI
|
||||
;__aeabi_uidivmode (
|
||||
; IN UINT32 Dividen
|
||||
; IN UINT32 Divisor
|
||||
; );
|
||||
;
|
||||
|
||||
__aeabi_uidiv
|
||||
__aeabi_uidivmod
|
||||
RSBS r12, r1, r0, LSR #4
|
||||
MOV r2, #0
|
||||
BCC __arm_div4
|
||||
RSBS r12, r1, r0, LSR #8
|
||||
BCC __arm_div8
|
||||
MOV r3, #0
|
||||
B __arm_div_large
|
||||
|
||||
;
|
||||
;INT32
|
||||
;EFIAPI
|
||||
;__aeabi_idivmode (
|
||||
; IN INT32 Dividen
|
||||
; IN INT32 Divisor
|
||||
; );
|
||||
;
|
||||
__aeabi_idiv
|
||||
__aeabi_idivmod
|
||||
ORRS r12, r0, r1
|
||||
BMI __arm_div_negative
|
||||
RSBS r12, r1, r0, LSR #1
|
||||
MOV r2, #0
|
||||
BCC __arm_div1
|
||||
RSBS r12, r1, r0, LSR #4
|
||||
BCC __arm_div4
|
||||
RSBS r12, r1, r0, LSR #8
|
||||
BCC __arm_div8
|
||||
MOV r3, #0
|
||||
B __arm_div_large
|
||||
__arm_div8
|
||||
RSBS r12, r1, r0, LSR #7
|
||||
SUBCS r0, r0, r1, LSL #7
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0,LSR #6
|
||||
SUBCS r0, r0, r1, LSL #6
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #5
|
||||
SUBCS r0, r0, r1, LSL #5
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #4
|
||||
SUBCS r0, r0, r1, LSL #4
|
||||
ADC r2, r2, r2
|
||||
__arm_div4
|
||||
RSBS r12, r1, r0, LSR #3
|
||||
SUBCS r0, r0, r1, LSL #3
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #2
|
||||
SUBCS r0, r0, r1, LSL #2
|
||||
ADCS r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #1
|
||||
SUBCS r0, r0, r1, LSL #1
|
||||
ADC r2, r2, r2
|
||||
__arm_div1
|
||||
SUBS r1, r0, r1
|
||||
MOVCC r1, r0
|
||||
ADC r0, r2, r2
|
||||
BX r14
|
||||
__arm_div_negative
|
||||
ANDS r2, r1, #0x80000000
|
||||
RSBMI r1, r1, #0
|
||||
EORS r3, r2, r0, ASR #32
|
||||
RSBCS r0, r0, #0
|
||||
RSBS r12, r1, r0, LSR #4
|
||||
BCC label1
|
||||
RSBS r12, r1, r0, LSR #8
|
||||
BCC label2
|
||||
__arm_div_large
|
||||
LSL r1, r1, #6
|
||||
RSBS r12, r1, r0, LSR #8
|
||||
ORR r2, r2, #0xfc000000
|
||||
BCC label2
|
||||
LSL r1, r1, #6
|
||||
RSBS r12, r1, r0, LSR #8
|
||||
ORR r2, r2, #0x3f00000
|
||||
BCC label2
|
||||
LSL r1, r1, #6
|
||||
RSBS r12, r1, r0, LSR #8
|
||||
ORR r2, r2, #0xfc000
|
||||
ORRCS r2, r2, #0x3f00
|
||||
LSLCS r1, r1, #6
|
||||
RSBS r12, r1, #0
|
||||
BCS __aeabi_idiv0
|
||||
label3
|
||||
LSRCS r1, r1, #6
|
||||
label2
|
||||
RSBS r12, r1, r0, LSR #7
|
||||
SUBCS r0, r0, r1, LSL #7
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #6
|
||||
SUBCS r0, r0, r1, LSL #6
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #5
|
||||
SUBCS r0, r0, r1, LSL #5
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #4
|
||||
SUBCS r0, r0, r1, LSL #4
|
||||
ADC r2, r2, r2
|
||||
label1
|
||||
RSBS r12, r1, r0, LSR #3
|
||||
SUBCS r0, r0, r1, LSL #3
|
||||
ADC r2, r2, r2
|
||||
RSBS r12, r1, r0, LSR #2
|
||||
SUBCS r0, r0, r1, LSL #2
|
||||
ADCS r2, r2, r2
|
||||
BCS label3
|
||||
RSBS r12, r1, r0, LSR #1
|
||||
SUBCS r0, r0, r1, LSL #1
|
||||
ADC r2, r2, r2
|
||||
SUBS r1, r0, r1
|
||||
MOVCC r1, r0
|
||||
ADC r0, r2, r2
|
||||
ASRS r3, r3, #31
|
||||
RSBMI r0, r0, #0
|
||||
RSBCS r1, r1, #0
|
||||
BX r14
|
||||
|
||||
; What to do about division by zero? For now, just return.
|
||||
__aeabi_idiv0
|
||||
BX r14
|
||||
|
||||
END
|
||||
|
48
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.S
Normal file
48
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.S
Normal file
@@ -0,0 +1,48 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___divdi3
|
||||
___divdi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r4, r5, r7, lr}
|
||||
mov r4, r3, asr #31
|
||||
add r7, sp, #8
|
||||
stmfd sp!, {r10, r11}
|
||||
mov r10, r1, asr #31
|
||||
sub sp, sp, #8
|
||||
mov r11, r10
|
||||
mov r5, r4
|
||||
eor r0, r0, r10
|
||||
eor r1, r1, r10
|
||||
eor r2, r2, r4
|
||||
eor r3, r3, r4
|
||||
subs r2, r2, r4
|
||||
sbc r3, r3, r5
|
||||
mov ip, #0
|
||||
subs r0, r0, r10
|
||||
sbc r1, r1, r11
|
||||
str ip, [sp, #0]
|
||||
bl ___udivmoddi4
|
||||
eor r2, r10, r4
|
||||
eor r3, r10, r4
|
||||
eor r0, r0, r2
|
||||
eor r1, r1, r3
|
||||
subs r0, r0, r2
|
||||
sbc r1, r1, r3
|
||||
sub sp, r7, #16
|
||||
ldmfd sp!, {r10, r11}
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
77
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.c
Normal file
77
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 64-bit compare, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
UINT64 __udivmoddi4(UINT64 a, UINT64 b, UINT64* rem);
|
||||
|
||||
// Returns: a / b
|
||||
|
||||
INT64
|
||||
__divdi3(INT64 a, INT64 b)
|
||||
{
|
||||
const int bits_in_dword_m1 = (int)(sizeof(INT64) * CHAR_BIT) - 1;
|
||||
INT64 s_a = a >> bits_in_dword_m1; // s_a = a < 0 ? -1 : 0
|
||||
INT64 s_b = b >> bits_in_dword_m1; // s_b = b < 0 ? -1 : 0
|
||||
a = (a ^ s_a) - s_a; // negate if s_a == -1
|
||||
b = (b ^ s_b) - s_b; // negate if s_b == -1
|
||||
s_a ^= s_b; // sign of quotient
|
||||
return (__udivmoddi4(a, b, (UINT64*)0) ^ s_a) - s_a; // negate if s_a == -1
|
||||
}
|
||||
|
||||
|
33
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divsi3.S
Normal file
33
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divsi3.S
Normal file
@@ -0,0 +1,33 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___divsi3
|
||||
___divsi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
eor r3, r0, r0, asr #31
|
||||
eor r2, r1, r1, asr #31
|
||||
stmfd sp!, {r4, r5, r7, lr}
|
||||
mov r5, r0, asr #31
|
||||
add r7, sp, #8
|
||||
mov r4, r1, asr #31
|
||||
sub r0, r3, r0, asr #31
|
||||
sub r1, r2, r1, asr #31
|
||||
bl ___udivsi3
|
||||
eor r1, r5, r4
|
||||
eor r0, r0, r1
|
||||
rsb r0, r1, r0
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
78
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divsi3.c
Normal file
78
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divsi3.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 32--bit unsigned division, ported from LLVM code.
|
||||
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
UINT32 __udivsi3(UINT32 n, UINT32 d);
|
||||
|
||||
// Returns: a / b
|
||||
|
||||
INT32
|
||||
__divsi3(INT32 a, INT32 b)
|
||||
{
|
||||
const int bits_in_word_m1 = (int)(sizeof(INT32) * CHAR_BIT) - 1;
|
||||
INT32 s_a = a >> bits_in_word_m1; // s_a = a < 0 ? -1 : 0
|
||||
INT32 s_b = b >> bits_in_word_m1; // s_b = b < 0 ? -1 : 0
|
||||
a = (a ^ s_a) - s_a; // negate if s_a == -1
|
||||
b = (b ^ s_b) - s_b; // negate if s_b == -1
|
||||
s_a ^= s_b; // sign of quotient
|
||||
return (__udivsi3(a, b) ^ s_a) - s_a; // negate if s_a == -1
|
||||
}
|
||||
|
||||
|
41
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lasr.asm
Normal file
41
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lasr.asm
Normal file
@@ -0,0 +1,41 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_lasr
|
||||
|
||||
AREA Math, CODE, READONLY
|
||||
|
||||
;
|
||||
;UINT32
|
||||
;EFIAPI
|
||||
;__aeabi_lasr (
|
||||
; IN UINT32 Dividen
|
||||
; IN UINT32 Divisor
|
||||
; );
|
||||
;
|
||||
__aeabi_lasr
|
||||
SUBS r3,r2,#0x20
|
||||
BPL {pc} + 0x18 ; 0x1c
|
||||
RSB r3,r2,#0x20
|
||||
LSR r0,r0,r2
|
||||
ORR r0,r0,r1,LSL r3
|
||||
ASR r1,r1,r2
|
||||
BX lr
|
||||
ASR r0,r1,r3
|
||||
ASR r1,r1,#31
|
||||
BX lr
|
||||
|
||||
END
|
||||
|
54
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
Normal file
54
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
Normal file
@@ -0,0 +1,54 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_ldivmod
|
||||
EXTERN __aeabi_uldivmod
|
||||
|
||||
AREA Math, CODE, READONLY
|
||||
|
||||
;
|
||||
;UINT32
|
||||
;EFIAPI
|
||||
;__aeabi_uidivmode (
|
||||
; IN UINT32 Dividen
|
||||
; IN UINT32 Divisor
|
||||
; );
|
||||
;
|
||||
|
||||
__aeabi_ldivmod
|
||||
PUSH {r4,lr}
|
||||
ASRS r4,r1,#1
|
||||
EOR r4,r4,r3,LSR #1
|
||||
BPL {pc} + 0xc ; 0x18
|
||||
RSBS r0,r0,#0
|
||||
RSC r1,r1,#0
|
||||
TST r3,r3
|
||||
BPL {pc} + 0xc ; 0x28
|
||||
RSBS r2,r2,#0
|
||||
RSC r3,r3,#0
|
||||
BL __aeabi_uldivmod ;
|
||||
TST r4,#0x40000000
|
||||
BEQ {pc} + 0xc ; 0x3c
|
||||
RSBS r0,r0,#0
|
||||
RSC r1,r1,#0
|
||||
TST r4,#0x80000000
|
||||
BEQ {pc} + 0xc ; 0x4c
|
||||
RSBS r2,r2,#0
|
||||
RSC r3,r3,#0
|
||||
POP {r4,pc}
|
||||
|
||||
END
|
||||
|
||||
|
43
ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsl.asm
Normal file
43
ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsl.asm
Normal file
@@ -0,0 +1,43 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_llsl
|
||||
|
||||
AREA Math, CODE, READONLY
|
||||
|
||||
;
|
||||
;VOID
|
||||
;EFIAPI
|
||||
;__aeabi_llsl (
|
||||
; IN VOID *Destination,
|
||||
; IN VOID *Source,
|
||||
; IN UINT32 Size
|
||||
; );
|
||||
;
|
||||
|
||||
__aeabi_llsl
|
||||
SUBS r3,r2,#0x20
|
||||
BPL {pc} + 0x18 ; 0x1c
|
||||
RSB r3,r2,#0x20
|
||||
LSL r1,r1,r2
|
||||
ORR r1,r1,r0,LSR r3
|
||||
LSL r0,r0,r2
|
||||
BX lr
|
||||
LSL r1,r0,r3
|
||||
MOV r0,#0
|
||||
BX lr
|
||||
|
||||
END
|
||||
|
44
ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
Normal file
44
ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.asm
Normal file
@@ -0,0 +1,44 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_llsr
|
||||
|
||||
AREA Math, CODE, READONLY
|
||||
|
||||
;
|
||||
;VOID
|
||||
;EFIAPI
|
||||
;__aeabi_llsr (
|
||||
; IN VOID *Destination,
|
||||
; IN VOID *Source,
|
||||
; IN UINT32 Size
|
||||
; );
|
||||
;
|
||||
__aeabi_llsr
|
||||
SUBS r3,r2,#0x20
|
||||
BPL {pc} + 0x18 ; 0x1c
|
||||
RSB r3,r2,#0x20
|
||||
LSR r0,r0,r2
|
||||
ORR r0,r0,r1,LSL r3
|
||||
LSR r1,r1,r2
|
||||
BX lr
|
||||
LSR r0,r1,r3
|
||||
MOV r1,#0
|
||||
BX lr
|
||||
|
||||
END
|
||||
|
||||
|
||||
|
38
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lshrdi3.S
Normal file
38
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lshrdi3.S
Normal file
@@ -0,0 +1,38 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___lshrdi3
|
||||
___lshrdi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 0, uses_anonymous_args = 0
|
||||
@ link register save eliminated.
|
||||
cmp r2, #31
|
||||
@ lr needed for prologue
|
||||
bls L2
|
||||
cmp r2, #63
|
||||
subls r2, r2, #32
|
||||
movls r2, r1, lsr r2
|
||||
movhi r2, #0
|
||||
mov r0, r2
|
||||
mov r1, #0
|
||||
bx lr
|
||||
L2:
|
||||
cmp r2, #0
|
||||
rsbne r3, r2, #32
|
||||
movne r3, r1, asl r3
|
||||
movne r1, r1, lsr r2
|
||||
orrne r0, r3, r0, lsr r2
|
||||
bx lr
|
83
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lshrdi3.c
Normal file
83
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lshrdi3.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Returns: logical a >> b
|
||||
|
||||
// Precondition: 0 <= b < bits_in_dword
|
||||
|
||||
INT64
|
||||
__lshrdi3(INT64 a, INT32 b)
|
||||
{
|
||||
const int bits_in_word = (int)(sizeof(INT32) * CHAR_BIT);
|
||||
udwords input;
|
||||
udwords result;
|
||||
input.all = a;
|
||||
if (b & bits_in_word) // bits_in_word <= b < bits_in_dword
|
||||
{
|
||||
result.high = 0;
|
||||
result.low = input.high >> (b - bits_in_word);
|
||||
}
|
||||
else // 0 <= b < bits_in_word
|
||||
{
|
||||
if (b == 0)
|
||||
return a;
|
||||
result.high = input.high >> b;
|
||||
result.low = (input.high << (bits_in_word - b)) | (input.low >> b);
|
||||
}
|
||||
return result.all;
|
||||
}
|
35
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memcpy.S
Normal file
35
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memcpy.S
Normal file
@@ -0,0 +1,35 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl _memcpy
|
||||
_memcpy:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r7, lr}
|
||||
mov ip, #0
|
||||
add r7, sp, #0
|
||||
mov lr, r0
|
||||
b L4
|
||||
L5:
|
||||
ldrb r3, [r1], #1 @ zero_extendqisi2
|
||||
add ip, ip, #1
|
||||
and r3, r3, #255
|
||||
strb r3, [lr], #1
|
||||
L4:
|
||||
cmp ip, r2
|
||||
bne L5
|
||||
ldmfd sp!, {r7, pc}
|
||||
|
40
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memcpy.asm
Normal file
40
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memcpy.asm
Normal file
@@ -0,0 +1,40 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_memcpy
|
||||
|
||||
AREA Memcpy, CODE, READONLY
|
||||
|
||||
;
|
||||
;VOID
|
||||
;EFIAPI
|
||||
;__aeabi_memcpy (
|
||||
; IN VOID *Destination,
|
||||
; IN VOID *Source,
|
||||
; IN UINT32 Size
|
||||
; );
|
||||
;
|
||||
__aeabi_memcpy
|
||||
CMP r2, #0
|
||||
BXEQ r14
|
||||
loop
|
||||
LDRB r3, [r1], #1
|
||||
STRB r3, [r0], #1
|
||||
SUBS r2, r2, #1
|
||||
BXEQ r14
|
||||
B loop
|
||||
|
||||
END
|
||||
|
61
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memcpy4.asm
Normal file
61
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memcpy4.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_memcpy4
|
||||
|
||||
AREA Memcpy4, CODE, READONLY
|
||||
|
||||
;
|
||||
;VOID
|
||||
;EFIAPI
|
||||
;__aeabi_memcpy (
|
||||
; IN VOID *Destination,
|
||||
; IN VOID *Source,
|
||||
; IN UINT32 Size
|
||||
; );
|
||||
;
|
||||
__aeabi_memcpy4
|
||||
stmdb sp!, {r4, lr}
|
||||
subs r2, r2, #32 ; 0x20
|
||||
bcc memcpy4_label2
|
||||
memcpy4_label1
|
||||
ldmcsia r1!, {r3, r4, ip, lr}
|
||||
stmcsia r0!, {r3, r4, ip, lr}
|
||||
ldmcsia r1!, {r3, r4, ip, lr}
|
||||
stmcsia r0!, {r3, r4, ip, lr}
|
||||
subcss r2, r2, #32 ; 0x20
|
||||
bcs memcpy4_label1
|
||||
memcpy4_label2
|
||||
movs ip, r2, lsl #28
|
||||
ldmcsia r1!, {r3, r4, ip, lr}
|
||||
stmcsia r0!, {r3, r4, ip, lr}
|
||||
ldmmiia r1!, {r3, r4}
|
||||
stmmiia r0!, {r3, r4}
|
||||
ldmia sp!, {r4, lr}
|
||||
movs ip, r2, lsl #30
|
||||
ldrcs r3, [r1], #4
|
||||
strcs r3, [r0], #4
|
||||
bxeq lr
|
||||
|
||||
_memcpy4_lastbytes_aligned
|
||||
movs r2, r2, lsl #31
|
||||
ldrcsh r3, [r1], #2
|
||||
ldrmib r2, [r1], #1
|
||||
strcsh r3, [r0], #2
|
||||
strmib r2, [r0], #1
|
||||
bx lr
|
||||
|
||||
END
|
||||
|
35
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memset.S
Normal file
35
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memset.S
Normal file
@@ -0,0 +1,35 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl _memset
|
||||
_memset:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r7, lr}
|
||||
mov ip, #0
|
||||
add r7, sp, #0
|
||||
mov lr, r0
|
||||
b L9
|
||||
L10:
|
||||
and r3, r1, #255
|
||||
add ip, ip, #1
|
||||
strb r3, [lr], #1
|
||||
L9:
|
||||
cmp ip, r2
|
||||
bne L10
|
||||
ldmfd sp!, {r7, pc}
|
||||
|
47
ArmPkg/Library/CompilerIntrinsicsLib/Arm/moddi3.S
Normal file
47
ArmPkg/Library/CompilerIntrinsicsLib/Arm/moddi3.S
Normal file
@@ -0,0 +1,47 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___moddi3
|
||||
___moddi3:
|
||||
@ args = 0, pretend = 0, frame = 8
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r4, r5, r7, lr}
|
||||
mov r4, r1, asr #31
|
||||
add r7, sp, #8
|
||||
stmfd sp!, {r10, r11}
|
||||
mov r10, r3, asr #31
|
||||
sub sp, sp, #16
|
||||
mov r5, r4
|
||||
mov r11, r10
|
||||
eor r0, r0, r4
|
||||
eor r1, r1, r4
|
||||
eor r2, r2, r10
|
||||
eor r3, r3, r10
|
||||
add ip, sp, #8
|
||||
subs r0, r0, r4
|
||||
sbc r1, r1, r5
|
||||
subs r2, r2, r10
|
||||
sbc r3, r3, r11
|
||||
str ip, [sp, #0]
|
||||
bl ___udivmoddi4
|
||||
ldrd r0, [sp, #8]
|
||||
eor r0, r0, r4
|
||||
eor r1, r1, r4
|
||||
subs r0, r0, r4
|
||||
sbc r1, r1, r5
|
||||
sub sp, r7, #16
|
||||
ldmfd sp!, {r10, r11}
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
77
ArmPkg/Library/CompilerIntrinsicsLib/Arm/moddi3.c
Normal file
77
ArmPkg/Library/CompilerIntrinsicsLib/Arm/moddi3.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 64-bit mod, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
UINT64 __udivmoddi4(UINT64 a, UINT64 b, UINT64* rem);
|
||||
|
||||
// Returns: a % b
|
||||
|
||||
INT64
|
||||
__moddi3(INT64 a, INT64 b)
|
||||
{
|
||||
const int bits_in_dword_m1 = (int)(sizeof(INT64) * CHAR_BIT) - 1;
|
||||
INT64 s = b >> bits_in_dword_m1; // s = b < 0 ? -1 : 0
|
||||
b = (b ^ s) - s; // negate if s == -1
|
||||
s = a >> bits_in_dword_m1; // s = a < 0 ? -1 : 0
|
||||
a = (a ^ s) - s; // negate if s == -1
|
||||
INT64 r;
|
||||
__udivmoddi4(a, b, (UINT64*)&r);
|
||||
return (r ^ s) - s; // negate if s == -1
|
||||
}
|
||||
|
28
ArmPkg/Library/CompilerIntrinsicsLib/Arm/modsi3.S
Normal file
28
ArmPkg/Library/CompilerIntrinsicsLib/Arm/modsi3.S
Normal file
@@ -0,0 +1,28 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___modsi3
|
||||
___modsi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r4, r5, r7, lr}
|
||||
add r7, sp, #8
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl ___divsi3
|
||||
mul r0, r4, r0
|
||||
rsb r0, r0, r5
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
70
ArmPkg/Library/CompilerIntrinsicsLib/Arm/modsi3.c
Normal file
70
ArmPkg/Library/CompilerIntrinsicsLib/Arm/modsi3.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 32-bit mod, ported from LLVM code.
|
||||
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Returns: a % b
|
||||
|
||||
INT32
|
||||
__modsi3(INT32 a, INT32 b)
|
||||
{
|
||||
return a - (a / b) * b;
|
||||
}
|
||||
|
||||
|
59
ArmPkg/Library/CompilerIntrinsicsLib/Arm/muldi3.S
Normal file
59
ArmPkg/Library/CompilerIntrinsicsLib/Arm/muldi3.S
Normal file
@@ -0,0 +1,59 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___muldi3
|
||||
___muldi3:
|
||||
@ args = 0, pretend = 0, frame = 8
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r4, r5, r6, r7, lr}
|
||||
add r7, sp, #12
|
||||
stmfd sp!, {r8, r10, r11}
|
||||
ldr r11, L4
|
||||
mov r4, r0, lsr #16
|
||||
and r8, r0, r11
|
||||
and ip, r2, r11
|
||||
mul lr, ip, r8
|
||||
mul ip, r4, ip
|
||||
sub sp, sp, #8
|
||||
add r10, ip, lr, lsr #16
|
||||
and ip, r10, r11
|
||||
and lr, lr, r11
|
||||
mov r6, r2, lsr #16
|
||||
str r4, [sp, #4]
|
||||
add r4, lr, ip, asl #16
|
||||
mul ip, r8, r6
|
||||
mov r5, r10, lsr #16
|
||||
add r10, ip, r4, lsr #16
|
||||
and ip, r10, r11
|
||||
and lr, r4, r11
|
||||
add r4, lr, ip, asl #16
|
||||
mul r0, r3, r0
|
||||
add ip, r5, r10, lsr #16
|
||||
ldr r5, [sp, #4]
|
||||
mla r0, r2, r1, r0
|
||||
mla r5, r6, r5, ip
|
||||
mov r10, r4
|
||||
add r11, r0, r5
|
||||
mov r1, r11
|
||||
mov r0, r4
|
||||
sub sp, r7, #24
|
||||
ldmfd sp!, {r8, r10, r11}
|
||||
ldmfd sp!, {r4, r5, r6, r7, pc}
|
||||
.p2align 2
|
||||
L5:
|
||||
.align 2
|
||||
L4:
|
||||
.long 65535
|
98
ArmPkg/Library/CompilerIntrinsicsLib/Arm/muldi3.c
Normal file
98
ArmPkg/Library/CompilerIntrinsicsLib/Arm/muldi3.c
Normal file
@@ -0,0 +1,98 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
#include <Base.h>
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
|
||||
// Returns: a * b
|
||||
|
||||
static
|
||||
INT64
|
||||
__muldsi3(UINT32 a, UINT32 b)
|
||||
{
|
||||
dwords r;
|
||||
const int bits_in_word_2 = (int)(sizeof(INT32) * CHAR_BIT) / 2;
|
||||
const UINT32 lower_mask = (UINT32)~0 >> bits_in_word_2;
|
||||
r.low = (a & lower_mask) * (b & lower_mask);
|
||||
UINT32 t = r.low >> bits_in_word_2;
|
||||
r.low &= lower_mask;
|
||||
t += (a >> bits_in_word_2) * (b & lower_mask);
|
||||
r.low += (t & lower_mask) << bits_in_word_2;
|
||||
r.high = t >> bits_in_word_2;
|
||||
t = r.low >> bits_in_word_2;
|
||||
r.low &= lower_mask;
|
||||
t += (b >> bits_in_word_2) * (a & lower_mask);
|
||||
r.low += (t & lower_mask) << bits_in_word_2;
|
||||
r.high += t >> bits_in_word_2;
|
||||
r.high += (a >> bits_in_word_2) * (b >> bits_in_word_2);
|
||||
return r.all;
|
||||
}
|
||||
|
||||
// Returns: a * b
|
||||
|
||||
INT64
|
||||
__muldi3(INT64 a, INT64 b)
|
||||
{
|
||||
dwords x;
|
||||
x.all = a;
|
||||
dwords y;
|
||||
y.all = b;
|
||||
dwords r;
|
||||
r.all = __muldsi3(x.low, y.low);
|
||||
r.high += x.high * y.low + x.low * y.high;
|
||||
return r.all;
|
||||
}
|
49
ArmPkg/Library/CompilerIntrinsicsLib/Arm/mullu.asm
Normal file
49
ArmPkg/Library/CompilerIntrinsicsLib/Arm/mullu.asm
Normal file
@@ -0,0 +1,49 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __ARM_ll_mullu
|
||||
EXPORT __aeabi_lmul
|
||||
|
||||
AREA Math, CODE, READONLY
|
||||
|
||||
;
|
||||
;INT64
|
||||
;EFIAPI
|
||||
;__aeabi_lmul (
|
||||
; IN INT64 Multiplicand
|
||||
; IN INT32 Multiplier
|
||||
; );
|
||||
;
|
||||
__ARM_ll_mullu
|
||||
mov r3, #0
|
||||
// Make upper part of INT64 Multiplier 0 and use __aeabi_lmul
|
||||
|
||||
;
|
||||
;INT64
|
||||
;EFIAPI
|
||||
;__aeabi_lmul (
|
||||
; IN INT64 Multiplicand
|
||||
; IN INT64 Multiplier
|
||||
; );
|
||||
;
|
||||
__aeabi_lmul
|
||||
stmdb sp!, {lr}
|
||||
mov lr, r0
|
||||
umull r0, ip, r2, lr
|
||||
mla r1, r2, r1, ip
|
||||
mla r1, r3, lr, r1
|
||||
ldmia sp!, {pc}
|
||||
|
||||
END
|
29
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch.asm
Normal file
29
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch.asm
Normal file
@@ -0,0 +1,29 @@
|
||||
///------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
EXPORT __ARM_switch8
|
||||
|
||||
AREA ArmSwitch, CODE, READONLY
|
||||
|
||||
__ARM_switch8
|
||||
LDRB r12,[lr,#-1]
|
||||
CMP r3,r12
|
||||
LDRBCC r3,[lr,r3]
|
||||
LDRBCS r3,[lr,r12]
|
||||
ADD r12,lr,r3,LSL #1
|
||||
BX r12
|
||||
|
||||
END
|
46
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch16.S
Normal file
46
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch16.S
Normal file
@@ -0,0 +1,46 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#/** @file
|
||||
# Compiler intrinsic for ARM compiler
|
||||
#
|
||||
# Copyright (c) 2008, Apple, Inc.
|
||||
# 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.;
|
||||
#
|
||||
#**/
|
||||
#
|
||||
|
||||
.text
|
||||
.p2align 2
|
||||
|
||||
.globl ASM_PFX(__switch16)
|
||||
|
||||
|
||||
ASM_PFX(__switch16):
|
||||
ldrh ip, [lr, #-1]
|
||||
cmp r0, ip
|
||||
add r0, lr, r0, lsl #1
|
||||
ldrccsh r0, [r0, #1]
|
||||
add ip, lr, ip, lsl #1
|
||||
ldrcssh r0, [ip, #1]
|
||||
add ip, lr, r0, lsl #1
|
||||
bx ip
|
||||
|
||||
|
45
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch32.S
Normal file
45
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch32.S
Normal file
@@ -0,0 +1,45 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#/** @file
|
||||
# Compiler intrinsic for ARM compiler
|
||||
#
|
||||
# Copyright (c) 2008, Apple, Inc.
|
||||
# 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.;
|
||||
#
|
||||
#**/
|
||||
#
|
||||
|
||||
.text
|
||||
.p2align 2
|
||||
|
||||
.globl ASM_PFX(__switch32)
|
||||
|
||||
|
||||
ASM_PFX(__switch32):
|
||||
ldr ip, [lr, #-1]
|
||||
cmp r0, ip
|
||||
add r0, lr, r0, lsl #2
|
||||
ldrcc r0, [r0, #3]
|
||||
add ip, lr, ip, lsl #2
|
||||
ldrcs r0, [ip, #3]
|
||||
add ip, lr, r0
|
||||
bx ip
|
||||
|
43
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch8.S
Normal file
43
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch8.S
Normal file
@@ -0,0 +1,43 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#/** @file
|
||||
# Compiler intrinsic for ARM compiler
|
||||
#
|
||||
# Copyright (c) 2008, Apple, Inc.
|
||||
# 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.;
|
||||
#
|
||||
#**/
|
||||
#
|
||||
|
||||
.text
|
||||
.p2align 2
|
||||
|
||||
.globl ASM_PFX(__switch8)
|
||||
|
||||
|
||||
ASM_PFX(__switch8):
|
||||
ldrb ip, [lr, #-1]
|
||||
cmp r0, ip
|
||||
ldrccsb r0, [lr, r0]
|
||||
ldrcssb r0, [lr, ip]
|
||||
add ip, lr, r0, lsl #1
|
||||
bx ip
|
||||
|
43
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switchu8.S
Normal file
43
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switchu8.S
Normal file
@@ -0,0 +1,43 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#/** @file
|
||||
# Compiler intrinsic for ARM compiler
|
||||
#
|
||||
# Copyright (c) 2008, Apple, Inc.
|
||||
# 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.;
|
||||
#
|
||||
#**/
|
||||
#
|
||||
|
||||
.text
|
||||
.p2align 2
|
||||
|
||||
.globl ASM_PFX(__switchu8)
|
||||
|
||||
|
||||
ASM_PFX(__switchu8):
|
||||
ldrb ip,[lr,#-1]
|
||||
cmp r3,ip
|
||||
ldrccb r3,[lr,r3]
|
||||
ldrcsb r3,[lr,ip]
|
||||
add ip,lr,r3,LSL #1
|
||||
bx ip
|
||||
|
82
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.c
Normal file
82
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.c
Normal file
@@ -0,0 +1,82 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 64-bit compare, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
|
||||
// Returns: if (a < b) returns 0
|
||||
// if (a == b) returns 1
|
||||
// if (a > b) returns 2
|
||||
|
||||
UINT32
|
||||
__ucmpdi2(UINT64 a, UINT64 b)
|
||||
{
|
||||
udwords x;
|
||||
x.all = a;
|
||||
udwords y;
|
||||
y.all = b;
|
||||
if (x.high < y.high)
|
||||
return 0;
|
||||
if (x.high > y.high)
|
||||
return 2;
|
||||
if (x.low < y.low)
|
||||
return 0;
|
||||
if (x.low > y.low)
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
28
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivdi3.S
Normal file
28
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivdi3.S
Normal file
@@ -0,0 +1,28 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___udivdi3
|
||||
___udivdi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r7, lr}
|
||||
add r7, sp, #0
|
||||
sub sp, sp, #8
|
||||
mov ip, #0
|
||||
str ip, [sp, #0]
|
||||
bl ___udivmoddi4
|
||||
sub sp, r7, #0
|
||||
ldmfd sp!, {r7, pc}
|
71
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivdi3.c
Normal file
71
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivdi3.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 64-bit unisigned div, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
UINT64 __udivmoddi4 (UINT64 a, UINT64 b, UINT64 *rem);
|
||||
|
||||
// Returns: a / b
|
||||
|
||||
UINT64
|
||||
__udivdi3(UINT64 a, UINT64 b)
|
||||
{
|
||||
return __udivmoddi4(a, b, 0);
|
||||
}
|
||||
|
||||
|
243
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.S
Normal file
243
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.S
Normal file
@@ -0,0 +1,243 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___udivmoddi4
|
||||
___udivmoddi4:
|
||||
@ args = 8, pretend = 0, frame = 16
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r4, r5, r6, r7, lr}
|
||||
add r7, sp, #12
|
||||
stmfd sp!, {r10, r11}
|
||||
sub sp, sp, #20
|
||||
stmia sp, {r2-r3}
|
||||
ldr r6, [sp, #48]
|
||||
orrs r2, r2, r3
|
||||
mov r10, r0
|
||||
mov r11, r1
|
||||
beq L2
|
||||
subs ip, r1, #0
|
||||
bne L4
|
||||
cmp r3, #0
|
||||
bne L6
|
||||
cmp r6, #0
|
||||
beq L8
|
||||
mov r1, r2
|
||||
bl ___umodsi3
|
||||
mov r1, #0
|
||||
stmia r6, {r0-r1}
|
||||
L8:
|
||||
ldr r1, [sp, #0]
|
||||
mov r0, r10
|
||||
b L45
|
||||
L6:
|
||||
cmp r6, #0
|
||||
movne r1, #0
|
||||
stmneia r6, {r0-r1}
|
||||
b L2
|
||||
L4:
|
||||
ldr r1, [sp, #0]
|
||||
cmp r1, #0
|
||||
bne L12
|
||||
ldr r2, [sp, #4]
|
||||
cmp r2, #0
|
||||
bne L14
|
||||
cmp r6, #0
|
||||
beq L16
|
||||
mov r1, r2
|
||||
mov r0, r11
|
||||
bl ___umodsi3
|
||||
mov r1, #0
|
||||
stmia r6, {r0-r1}
|
||||
L16:
|
||||
ldr r1, [sp, #4]
|
||||
mov r0, r11
|
||||
L45:
|
||||
bl ___udivsi3
|
||||
L46:
|
||||
mov r10, r0
|
||||
mov r11, #0
|
||||
b L10
|
||||
L14:
|
||||
subs r1, r0, #0
|
||||
bne L18
|
||||
cmp r6, #0
|
||||
beq L16
|
||||
ldr r1, [sp, #4]
|
||||
mov r0, r11
|
||||
bl ___umodsi3
|
||||
mov r4, r10
|
||||
mov r5, r0
|
||||
stmia r6, {r4-r5}
|
||||
b L16
|
||||
L18:
|
||||
sub r3, r2, #1
|
||||
tst r2, r3
|
||||
bne L22
|
||||
cmp r6, #0
|
||||
movne r4, r0
|
||||
andne r5, ip, r3
|
||||
stmneia r6, {r4-r5}
|
||||
L24:
|
||||
rsb r3, r2, #0
|
||||
and r3, r2, r3
|
||||
clz r3, r3
|
||||
rsb r3, r3, #31
|
||||
mov r0, ip, lsr r3
|
||||
b L46
|
||||
L22:
|
||||
clz r2, r2
|
||||
clz r3, ip
|
||||
rsb r3, r3, r2
|
||||
cmp r3, #30
|
||||
bhi L48
|
||||
rsb r2, r3, #31
|
||||
add lr, r3, #1
|
||||
mov r3, r1, asl r2
|
||||
str r3, [sp, #12]
|
||||
mov r3, r1, lsr lr
|
||||
ldr r0, [sp, #0]
|
||||
mov r5, ip, lsr lr
|
||||
orr r4, r3, ip, asl r2
|
||||
str r0, [sp, #8]
|
||||
b L29
|
||||
L12:
|
||||
ldr r3, [sp, #4]
|
||||
cmp r3, #0
|
||||
bne L30
|
||||
sub r3, r1, #1
|
||||
tst r1, r3
|
||||
bne L32
|
||||
cmp r6, #0
|
||||
andne r3, r3, r0
|
||||
movne r2, r3
|
||||
movne r3, #0
|
||||
stmneia r6, {r2-r3}
|
||||
L34:
|
||||
cmp r1, #1
|
||||
beq L10
|
||||
rsb r3, r1, #0
|
||||
and r3, r1, r3
|
||||
clz r3, r3
|
||||
rsb r0, r3, #31
|
||||
mov r1, ip, lsr r0
|
||||
rsb r3, r0, #32
|
||||
mov r0, r10, lsr r0
|
||||
orr ip, r0, ip, asl r3
|
||||
str r1, [sp, #12]
|
||||
str ip, [sp, #8]
|
||||
ldrd r10, [sp, #8]
|
||||
b L10
|
||||
L32:
|
||||
clz r2, r1
|
||||
clz r3, ip
|
||||
rsb r3, r3, r2
|
||||
rsb r4, r3, #31
|
||||
mov r2, r0, asl r4
|
||||
mvn r1, r3
|
||||
and r2, r2, r1, asr #31
|
||||
add lr, r3, #33
|
||||
str r2, [sp, #8]
|
||||
add r2, r3, #1
|
||||
mov r3, r3, asr #31
|
||||
and r0, r3, r0, asl r1
|
||||
mov r3, r10, lsr r2
|
||||
orr r3, r3, ip, asl r4
|
||||
and r3, r3, r1, asr #31
|
||||
orr r0, r0, r3
|
||||
mov r3, ip, lsr lr
|
||||
str r0, [sp, #12]
|
||||
mov r0, r10, lsr lr
|
||||
and r5, r3, r2, asr #31
|
||||
rsb r3, lr, #31
|
||||
mov r3, r3, asr #31
|
||||
orr r0, r0, ip, asl r1
|
||||
and r3, r3, ip, lsr r2
|
||||
and r0, r0, r2, asr #31
|
||||
orr r4, r3, r0
|
||||
b L29
|
||||
L30:
|
||||
clz r2, r3
|
||||
clz r3, ip
|
||||
rsb r3, r3, r2
|
||||
cmp r3, #31
|
||||
bls L37
|
||||
L48:
|
||||
cmp r6, #0
|
||||
stmneia r6, {r10-r11}
|
||||
b L2
|
||||
L37:
|
||||
rsb r1, r3, #31
|
||||
mov r0, r0, asl r1
|
||||
add lr, r3, #1
|
||||
mov r2, #0
|
||||
str r0, [sp, #12]
|
||||
mov r0, r10, lsr lr
|
||||
str r2, [sp, #8]
|
||||
sub r2, r3, #31
|
||||
and r0, r0, r2, asr #31
|
||||
mov r3, ip, lsr lr
|
||||
orr r4, r0, ip, asl r1
|
||||
and r5, r3, r2, asr #31
|
||||
L29:
|
||||
mov ip, #0
|
||||
mov r10, ip
|
||||
b L40
|
||||
L41:
|
||||
ldr r1, [sp, #12]
|
||||
ldr r2, [sp, #8]
|
||||
mov r3, r4, lsr #31
|
||||
orr r5, r3, r5, asl #1
|
||||
mov r3, r1, lsr #31
|
||||
orr r4, r3, r4, asl #1
|
||||
mov r3, r2, lsr #31
|
||||
orr r0, r3, r1, asl #1
|
||||
orr r1, ip, r2, asl #1
|
||||
ldmia sp, {r2-r3}
|
||||
str r0, [sp, #12]
|
||||
subs r2, r2, r4
|
||||
sbc r3, r3, r5
|
||||
str r1, [sp, #8]
|
||||
subs r0, r2, #1
|
||||
sbc r1, r3, #0
|
||||
mov r2, r1, asr #31
|
||||
ldmia sp, {r0-r1}
|
||||
mov r3, r2
|
||||
and ip, r2, #1
|
||||
and r3, r3, r1
|
||||
and r2, r2, r0
|
||||
subs r4, r4, r2
|
||||
sbc r5, r5, r3
|
||||
add r10, r10, #1
|
||||
L40:
|
||||
cmp r10, lr
|
||||
bne L41
|
||||
ldrd r0, [sp, #8]
|
||||
adds r0, r0, r0
|
||||
adc r1, r1, r1
|
||||
cmp r6, #0
|
||||
orr r10, r0, ip
|
||||
mov r11, r1
|
||||
stmneia r6, {r4-r5}
|
||||
b L10
|
||||
L2:
|
||||
mov r10, #0
|
||||
mov r11, #0
|
||||
L10:
|
||||
mov r0, r10
|
||||
mov r1, r11
|
||||
sub sp, r7, #20
|
||||
ldmfd sp!, {r10, r11}
|
||||
ldmfd sp!, {r4, r5, r6, r7, pc}
|
287
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.c
Normal file
287
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.c
Normal file
@@ -0,0 +1,287 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 64-bit compare, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
// Effects: if rem != 0, *rem = a % b
|
||||
// Returns: a / b
|
||||
|
||||
// Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide
|
||||
|
||||
UINT64
|
||||
__udivmoddi4 (UINT64 a, UINT64 b, UINT64* rem)
|
||||
{
|
||||
const unsigned n_uword_bits = sizeof(UINT32) * CHAR_BIT;
|
||||
const unsigned n_udword_bits = sizeof(UINT64) * CHAR_BIT;
|
||||
udwords n;
|
||||
n.all = a;
|
||||
udwords d;
|
||||
d.all = b;
|
||||
udwords q;
|
||||
udwords r;
|
||||
unsigned sr;
|
||||
|
||||
if (b == 0) {
|
||||
// ASSERT (FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// special cases, X is unknown, K != 0
|
||||
if (n.high == 0)
|
||||
{
|
||||
if (d.high == 0)
|
||||
{
|
||||
// 0 X
|
||||
// ---
|
||||
// 0 X
|
||||
if (rem)
|
||||
*rem = n.low % d.low;
|
||||
return n.low / d.low;
|
||||
}
|
||||
// 0 X
|
||||
// ---
|
||||
// K X
|
||||
if (rem)
|
||||
*rem = n.low;
|
||||
return 0;
|
||||
}
|
||||
// n.high != 0
|
||||
if (d.low == 0)
|
||||
{
|
||||
if (d.high == 0)
|
||||
{
|
||||
// K X
|
||||
// ---
|
||||
// 0 0
|
||||
if (rem)
|
||||
*rem = n.high % d.low;
|
||||
return n.high / d.low;
|
||||
}
|
||||
// d.high != 0
|
||||
if (n.low == 0)
|
||||
{
|
||||
// K 0
|
||||
// ---
|
||||
// K 0
|
||||
if (rem)
|
||||
{
|
||||
r.high = n.high % d.high;
|
||||
r.low = 0;
|
||||
*rem = r.all;
|
||||
}
|
||||
return n.high / d.high;
|
||||
}
|
||||
// K K
|
||||
// ---
|
||||
// K 0
|
||||
if ((d.high & (d.high - 1)) == 0) // if d is a power of 2
|
||||
{
|
||||
if (rem)
|
||||
{
|
||||
r.low = n.low;
|
||||
r.high = n.high & (d.high - 1);
|
||||
*rem = r.all;
|
||||
}
|
||||
return n.high >> COUNT_TRAILING_ZEROS(d.high);
|
||||
}
|
||||
// K K
|
||||
// ---
|
||||
// K 0
|
||||
sr = COUNT_LEADING_ZEROS(d.high) - COUNT_LEADING_ZEROS(n.high);
|
||||
// 0 <= sr <= n_uword_bits - 2 or sr large
|
||||
if (sr > n_uword_bits - 2)
|
||||
{
|
||||
if (rem)
|
||||
*rem = n.all;
|
||||
return 0;
|
||||
}
|
||||
++sr;
|
||||
// 1 <= sr <= n_uword_bits - 1
|
||||
// q.all = n.all << (n_udword_bits - sr);
|
||||
q.low = 0;
|
||||
q.high = n.low << (n_uword_bits - sr);
|
||||
// r.all = n.all >> sr;
|
||||
r.high = n.high >> sr;
|
||||
r.low = (n.high << (n_uword_bits - sr)) | (n.low >> sr);
|
||||
}
|
||||
else // d.low != 0
|
||||
{
|
||||
if (d.high == 0)
|
||||
{
|
||||
// K X
|
||||
// ---
|
||||
// 0 K
|
||||
if ((d.low & (d.low - 1)) == 0) // if d is a power of 2
|
||||
{
|
||||
if (rem)
|
||||
*rem = n.low & (d.low - 1);
|
||||
if (d.low == 1)
|
||||
return n.all;
|
||||
unsigned sr = COUNT_TRAILING_ZEROS(d.low);
|
||||
q.high = n.high >> sr;
|
||||
q.low = (n.high << (n_uword_bits - sr)) | (n.low >> sr);
|
||||
return q.all;
|
||||
}
|
||||
// K X
|
||||
// ---
|
||||
// 0 K
|
||||
sr = 1 + n_uword_bits + COUNT_LEADING_ZEROS(d.low) - COUNT_LEADING_ZEROS(n.high);
|
||||
// 2 <= sr <= n_udword_bits - 1
|
||||
// q.all = n.all << (n_udword_bits - sr);
|
||||
// r.all = n.all >> sr;
|
||||
// if (sr == n_uword_bits)
|
||||
// {
|
||||
// q.low = 0;
|
||||
// q.high = n.low;
|
||||
// r.high = 0;
|
||||
// r.low = n.high;
|
||||
// }
|
||||
// else if (sr < n_uword_bits) // 2 <= sr <= n_uword_bits - 1
|
||||
// {
|
||||
// q.low = 0;
|
||||
// q.high = n.low << (n_uword_bits - sr);
|
||||
// r.high = n.high >> sr;
|
||||
// r.low = (n.high << (n_uword_bits - sr)) | (n.low >> sr);
|
||||
// }
|
||||
// else // n_uword_bits + 1 <= sr <= n_udword_bits - 1
|
||||
// {
|
||||
// q.low = n.low << (n_udword_bits - sr);
|
||||
// q.high = (n.high << (n_udword_bits - sr)) |
|
||||
// (n.low >> (sr - n_uword_bits));
|
||||
// r.high = 0;
|
||||
// r.low = n.high >> (sr - n_uword_bits);
|
||||
// }
|
||||
q.low = (n.low << (n_udword_bits - sr)) &
|
||||
((INT32)(n_uword_bits - sr) >> (n_uword_bits-1));
|
||||
q.high = ((n.low << ( n_uword_bits - sr)) &
|
||||
((INT32)(sr - n_uword_bits - 1) >> (n_uword_bits-1))) |
|
||||
(((n.high << (n_udword_bits - sr)) |
|
||||
(n.low >> (sr - n_uword_bits))) &
|
||||
((INT32)(n_uword_bits - sr) >> (n_uword_bits-1)));
|
||||
r.high = (n.high >> sr) &
|
||||
((INT32)(sr - n_uword_bits) >> (n_uword_bits-1));
|
||||
r.low = ((n.high >> (sr - n_uword_bits)) &
|
||||
((INT32)(n_uword_bits - sr - 1) >> (n_uword_bits-1))) |
|
||||
(((n.high << (n_uword_bits - sr)) |
|
||||
(n.low >> sr)) &
|
||||
((INT32)(sr - n_uword_bits) >> (n_uword_bits-1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
// K X
|
||||
// ---
|
||||
// K K
|
||||
sr = COUNT_LEADING_ZEROS(d.high) - COUNT_LEADING_ZEROS(n.high);
|
||||
// 0 <= sr <= n_uword_bits - 1 or sr large
|
||||
if (sr > n_uword_bits - 1)
|
||||
{
|
||||
if (rem)
|
||||
*rem = n.all;
|
||||
return 0;
|
||||
}
|
||||
++sr;
|
||||
// 1 <= sr <= n_uword_bits
|
||||
// q.all = n.all << (n_udword_bits - sr);
|
||||
q.low = 0;
|
||||
q.high = n.low << (n_uword_bits - sr);
|
||||
// r.all = n.all >> sr;
|
||||
// if (sr < n_uword_bits)
|
||||
// {
|
||||
// r.high = n.high >> sr;
|
||||
// r.low = (n.high << (n_uword_bits - sr)) | (n.low >> sr);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// r.high = 0;
|
||||
// r.low = n.high;
|
||||
// }
|
||||
r.high = (n.high >> sr) &
|
||||
((INT32)(sr - n_uword_bits) >> (n_uword_bits-1));
|
||||
r.low = (n.high << (n_uword_bits - sr)) |
|
||||
((n.low >> sr) &
|
||||
((INT32)(sr - n_uword_bits) >> (n_uword_bits-1)));
|
||||
}
|
||||
}
|
||||
// Not a special case
|
||||
// q and r are initialized with:
|
||||
// q.all = n.all << (n_udword_bits - sr);
|
||||
// r.all = n.all >> sr;
|
||||
// 1 <= sr <= n_udword_bits - 1
|
||||
UINT32 carry = 0;
|
||||
for (; sr > 0; --sr)
|
||||
{
|
||||
// r:q = ((r:q) << 1) | carry
|
||||
r.high = (r.high << 1) | (r.low >> (n_uword_bits - 1));
|
||||
r.low = (r.low << 1) | (q.high >> (n_uword_bits - 1));
|
||||
q.high = (q.high << 1) | (q.low >> (n_uword_bits - 1));
|
||||
q.low = (q.low << 1) | carry;
|
||||
// carry = 0;
|
||||
// if (r.all >= d.all)
|
||||
// {
|
||||
// r.all -= d.all;
|
||||
// carry = 1;
|
||||
// }
|
||||
const INT64 s = (INT64)(d.all - r.all - 1) >> (n_udword_bits - 1);
|
||||
carry = s & 1;
|
||||
r.all -= d.all & s;
|
||||
}
|
||||
q.all = (q.all << 1) | carry;
|
||||
if (rem)
|
||||
*rem = r.all;
|
||||
return q.all;
|
||||
}
|
57
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivsi3.S
Normal file
57
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivsi3.S
Normal file
@@ -0,0 +1,57 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___udivsi3
|
||||
___udivsi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
cmp r1, #0
|
||||
cmpne r0, #0
|
||||
stmfd sp!, {r4, r5, r7, lr}
|
||||
add r7, sp, #8
|
||||
beq L2
|
||||
clz r2, r1
|
||||
clz r3, r0
|
||||
rsb r3, r3, r2
|
||||
cmp r3, #31
|
||||
bhi L2
|
||||
ldmeqfd sp!, {r4, r5, r7, pc}
|
||||
add r5, r3, #1
|
||||
rsb r3, r3, #31
|
||||
mov lr, #0
|
||||
mov r2, r0, asl r3
|
||||
mov ip, r0, lsr r5
|
||||
mov r4, lr
|
||||
b L8
|
||||
L9:
|
||||
mov r0, r2, lsr #31
|
||||
orr ip, r0, ip, asl #1
|
||||
orr r2, r3, lr
|
||||
rsb r3, ip, r1
|
||||
sub r3, r3, #1
|
||||
and r0, r1, r3, asr #31
|
||||
mov lr, r3, lsr #31
|
||||
rsb ip, r0, ip
|
||||
add r4, r4, #1
|
||||
L8:
|
||||
cmp r4, r5
|
||||
mov r3, r2, asl #1
|
||||
bne L9
|
||||
orr r0, r3, lr
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
||||
L2:
|
||||
mov r0, #0
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
111
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivsi3.c
Normal file
111
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivsi3.c
Normal file
@@ -0,0 +1,111 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 32-bit unsigned div, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
|
||||
// Returns: n / d
|
||||
|
||||
// Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide
|
||||
|
||||
UINT32
|
||||
__udivsi3(UINT32 n, UINT32 d)
|
||||
{
|
||||
const unsigned n_uword_bits = sizeof(UINT32) * CHAR_BIT;
|
||||
UINT32 q;
|
||||
UINT32 r;
|
||||
unsigned sr;
|
||||
|
||||
// special cases
|
||||
if (d == 0) {
|
||||
// ASSERT (FALSE);
|
||||
return 0; // ?!
|
||||
}
|
||||
if (n == 0)
|
||||
return 0;
|
||||
|
||||
sr = COUNT_LEADING_ZEROS(d) - COUNT_LEADING_ZEROS(n);
|
||||
// 0 <= sr <= n_uword_bits - 1 or sr large
|
||||
if (sr > n_uword_bits - 1) // d > r
|
||||
return 0;
|
||||
if (sr == n_uword_bits - 1) // d == 1
|
||||
return n;
|
||||
++sr;
|
||||
// 1 <= sr <= n_uword_bits - 1
|
||||
// Not a special case
|
||||
q = n << (n_uword_bits - sr);
|
||||
r = n >> sr;
|
||||
UINT32 carry = 0;
|
||||
for (; sr > 0; --sr)
|
||||
{
|
||||
// r:q = ((r:q) << 1) | carry
|
||||
r = (r << 1) | (q >> (n_uword_bits - 1));
|
||||
q = (q << 1) | carry;
|
||||
// carry = 0;
|
||||
// if (r.all >= d.all)
|
||||
// {
|
||||
// r.all -= d.all;
|
||||
// carry = 1;
|
||||
// }
|
||||
const INT32 s = (INT32)(d - r - 1) >> (n_uword_bits - 1);
|
||||
carry = s & 1;
|
||||
r -= d & s;
|
||||
}
|
||||
q = (q << 1) | carry;
|
||||
return q;
|
||||
}
|
268
ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
Normal file
268
ArmPkg/Library/CompilerIntrinsicsLib/Arm/uldiv.asm
Normal file
@@ -0,0 +1,268 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
EXPORT __aeabi_uldivmod
|
||||
|
||||
AREA Uldivmod, CODE, READONLY
|
||||
|
||||
;
|
||||
;UINT64
|
||||
;EFIAPI
|
||||
;__aeabi_uldivmod (
|
||||
; IN UINT64 Dividend
|
||||
; IN UINT64 Divisor
|
||||
; )
|
||||
;
|
||||
__aeabi_uldivmod
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r4, r1
|
||||
mov r5, r0
|
||||
mov r6, #0 ; 0x0
|
||||
orrs ip, r3, r2, lsr #31
|
||||
bne __aeabi_uldivmod_label1
|
||||
tst r2, r2
|
||||
beq _ll_div0
|
||||
movs ip, r2, lsr #15
|
||||
addeq r6, r6, #16 ; 0x10
|
||||
mov ip, r2, lsl r6
|
||||
movs lr, ip, lsr #23
|
||||
moveq ip, ip, lsl #8
|
||||
addeq r6, r6, #8 ; 0x8
|
||||
movs lr, ip, lsr #27
|
||||
moveq ip, ip, lsl #4
|
||||
addeq r6, r6, #4 ; 0x4
|
||||
movs lr, ip, lsr #29
|
||||
moveq ip, ip, lsl #2
|
||||
addeq r6, r6, #2 ; 0x2
|
||||
movs lr, ip, lsr #30
|
||||
moveq ip, ip, lsl #1
|
||||
addeq r6, r6, #1 ; 0x1
|
||||
b _ll_udiv_small
|
||||
__aeabi_uldivmod_label1
|
||||
tst r3, #-2147483648 ; 0x80000000
|
||||
bne __aeabi_uldivmod_label2
|
||||
movs ip, r3, lsr #15
|
||||
addeq r6, r6, #16 ; 0x10
|
||||
mov ip, r3, lsl r6
|
||||
movs lr, ip, lsr #23
|
||||
moveq ip, ip, lsl #8
|
||||
addeq r6, r6, #8 ; 0x8
|
||||
movs lr, ip, lsr #27
|
||||
moveq ip, ip, lsl #4
|
||||
addeq r6, r6, #4 ; 0x4
|
||||
movs lr, ip, lsr #29
|
||||
moveq ip, ip, lsl #2
|
||||
addeq r6, r6, #2 ; 0x2
|
||||
movs lr, ip, lsr #30
|
||||
addeq r6, r6, #1 ; 0x1
|
||||
rsb r3, r6, #32 ; 0x20
|
||||
moveq ip, ip, lsl #1
|
||||
orr ip, ip, r2, lsr r3
|
||||
mov lr, r2, lsl r6
|
||||
b _ll_udiv_big
|
||||
__aeabi_uldivmod_label2
|
||||
mov ip, r3
|
||||
mov lr, r2
|
||||
b _ll_udiv_ginormous
|
||||
|
||||
_ll_udiv_small
|
||||
cmp r4, ip, lsl #1
|
||||
mov r3, #0 ; 0x0
|
||||
subcs r4, r4, ip, lsl #1
|
||||
addcs r3, r3, #2 ; 0x2
|
||||
cmp r4, ip
|
||||
subcs r4, r4, ip
|
||||
adcs r3, r3, #0 ; 0x0
|
||||
add r2, r6, #32 ; 0x20
|
||||
cmp r2, #32 ; 0x20
|
||||
rsb ip, ip, #0 ; 0x0
|
||||
bcc _ll_udiv_small_label1
|
||||
orrs r0, r4, r5, lsr #30
|
||||
moveq r4, r5
|
||||
moveq r5, #0 ; 0x0
|
||||
subeq r2, r2, #32 ; 0x20
|
||||
_ll_udiv_small_label1
|
||||
mov r1, #0 ; 0x0
|
||||
cmp r2, #16 ; 0x10
|
||||
bcc _ll_udiv_small_label2
|
||||
movs r0, r4, lsr #14
|
||||
moveq r4, r4, lsl #16
|
||||
addeq r1, r1, #16 ; 0x10
|
||||
_ll_udiv_small_label2
|
||||
sub lr, r2, r1
|
||||
cmp lr, #8 ; 0x8
|
||||
bcc _ll_udiv_small_label3
|
||||
movs r0, r4, lsr #22
|
||||
moveq r4, r4, lsl #8
|
||||
addeq r1, r1, #8 ; 0x8
|
||||
_ll_udiv_small_label3
|
||||
rsb r0, r1, #32 ; 0x20
|
||||
sub r2, r2, r1
|
||||
orr r4, r4, r5, lsr r0
|
||||
mov r5, r5, lsl r1
|
||||
cmp r2, #1 ; 0x1
|
||||
bcc _ll_udiv_small_label5
|
||||
sub r2, r2, #1 ; 0x1
|
||||
and r0, r2, #7 ; 0x7
|
||||
eor r0, r0, #7 ; 0x7
|
||||
adds r0, r0, r0, lsl #1
|
||||
add pc, pc, r0, lsl #2
|
||||
nop ; (mov r0,r0)
|
||||
_ll_udiv_small_label4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
rsbcc r4, ip, r4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, ip, r4, lsl #1
|
||||
sub r2, r2, #8 ; 0x8
|
||||
tst r2, r2
|
||||
rsbcc r4, ip, r4
|
||||
bpl _ll_udiv_small_label4
|
||||
_ll_udiv_small_label5
|
||||
mov r2, r4, lsr r6
|
||||
bic r4, r4, r2, lsl r6
|
||||
adcs r0, r5, r5
|
||||
adc r1, r4, r4
|
||||
add r1, r1, r3, lsl r6
|
||||
mov r3, #0 ; 0x0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
|
||||
_ll_udiv_big
|
||||
subs r0, r5, lr
|
||||
mov r3, #0 ; 0x0
|
||||
sbcs r1, r4, ip
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
adcs r3, r3, #0 ; 0x0
|
||||
subs r0, r5, lr
|
||||
sbcs r1, r4, ip
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
adcs r3, r3, #0 ; 0x0
|
||||
subs r0, r5, lr
|
||||
sbcs r1, r4, ip
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
adcs r3, r3, #0 ; 0x0
|
||||
mov r1, #0 ; 0x0
|
||||
rsbs lr, lr, #0 ; 0x0
|
||||
rsc ip, ip, #0 ; 0x0
|
||||
cmp r6, #16 ; 0x10
|
||||
bcc _ll_udiv_big_label1
|
||||
movs r0, r4, lsr #14
|
||||
moveq r4, r4, lsl #16
|
||||
addeq r1, r1, #16 ; 0x10
|
||||
_ll_udiv_big_label1
|
||||
sub r2, r6, r1
|
||||
cmp r2, #8 ; 0x8
|
||||
bcc _ll_udiv_big_label2
|
||||
movs r0, r4, lsr #22
|
||||
moveq r4, r4, lsl #8
|
||||
addeq r1, r1, #8 ; 0x8
|
||||
_ll_udiv_big_label2
|
||||
rsb r0, r1, #32 ; 0x20
|
||||
sub r2, r6, r1
|
||||
orr r4, r4, r5, lsr r0
|
||||
mov r5, r5, lsl r1
|
||||
cmp r2, #1 ; 0x1
|
||||
bcc _ll_udiv_big_label4
|
||||
sub r2, r2, #1 ; 0x1
|
||||
and r0, r2, #3 ; 0x3
|
||||
rsb r0, r0, #3 ; 0x3
|
||||
adds r0, r0, r0, lsl #1
|
||||
add pc, pc, r0, lsl #3
|
||||
nop ; (mov r0,r0)
|
||||
_ll_udiv_big_label3
|
||||
adcs r5, r5, r5
|
||||
adcs r4, r4, r4
|
||||
adcs r0, lr, r5
|
||||
adcs r1, ip, r4
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
adcs r5, r5, r5
|
||||
adcs r4, r4, r4
|
||||
adcs r0, lr, r5
|
||||
adcs r1, ip, r4
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
adcs r5, r5, r5
|
||||
adcs r4, r4, r4
|
||||
adcs r0, lr, r5
|
||||
adcs r1, ip, r4
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
sub r2, r2, #4 ; 0x4
|
||||
adcs r5, r5, r5
|
||||
adcs r4, r4, r4
|
||||
adcs r0, lr, r5
|
||||
adcs r1, ip, r4
|
||||
tst r2, r2
|
||||
movcs r5, r0
|
||||
movcs r4, r1
|
||||
bpl _ll_udiv_big_label3
|
||||
_ll_udiv_big_label4
|
||||
mov r1, #0 ; 0x0
|
||||
mov r2, r5, lsr r6
|
||||
bic r5, r5, r2, lsl r6
|
||||
adcs r0, r5, r5
|
||||
adc r1, r1, #0 ; 0x0
|
||||
movs lr, r3, lsl r6
|
||||
mov r3, r4, lsr r6
|
||||
bic r4, r4, r3, lsl r6
|
||||
adc r1, r1, #0 ; 0x0
|
||||
adds r0, r0, lr
|
||||
orr r2, r2, r4, ror r6
|
||||
adc r1, r1, #0 ; 0x0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
|
||||
_ll_udiv_ginormous
|
||||
subs r2, r5, lr
|
||||
mov r1, #0 ; 0x0
|
||||
sbcs r3, r4, ip
|
||||
adc r0, r1, r1
|
||||
movcc r2, r5
|
||||
movcc r3, r4
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
|
||||
_ll_div0
|
||||
ldmia sp!, {r4, r5, r6, lr}
|
||||
mov r0, #0 ; 0x0
|
||||
mov r1, #0 ; 0x0
|
||||
b __aeabi_ldiv0
|
||||
|
||||
__aeabi_ldiv0
|
||||
BX r14
|
||||
|
||||
END
|
||||
|
30
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umoddi3.S
Normal file
30
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umoddi3.S
Normal file
@@ -0,0 +1,30 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___umoddi3
|
||||
___umoddi3:
|
||||
@ args = 0, pretend = 0, frame = 8
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r7, lr}
|
||||
add r7, sp, #0
|
||||
sub sp, sp, #16
|
||||
add ip, sp, #8
|
||||
str ip, [sp, #0]
|
||||
bl ___udivmoddi4
|
||||
ldrd r0, [sp, #8]
|
||||
sub sp, r7, #0
|
||||
ldmfd sp!, {r7, pc}
|
||||
|
72
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umoddi3.c
Normal file
72
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umoddi3.c
Normal file
@@ -0,0 +1,72 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 64-bit unsigned mod, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
UINT64 __udivmoddi4(UINT64 a, UINT64 b, UINT64* rem);
|
||||
|
||||
// Returns: a % b
|
||||
|
||||
UINT64
|
||||
__umoddi3(UINT64 a, UINT64 b)
|
||||
{
|
||||
UINT64 r;
|
||||
__udivmoddi4(a, b, &r);
|
||||
return r;
|
||||
}
|
||||
|
40
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umodsi3.S
Normal file
40
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umodsi3.S
Normal file
@@ -0,0 +1,40 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl ___umodsi3
|
||||
___umodsi3:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
stmfd sp!, {r4, r5, r7, lr}
|
||||
add r7, sp, #8
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl L___udivsi3$stub
|
||||
mul r0, r4, r0
|
||||
rsb r0, r0, r5
|
||||
ldmfd sp!, {r4, r5, r7, pc}
|
||||
.section __TEXT,__symbol_stub4,symbol_stubs,none,12
|
||||
.align 2
|
||||
L___udivsi3$stub:
|
||||
.indirect_symbol ___udivsi3
|
||||
ldr ip, L___udivsi3$slp
|
||||
ldr pc, [ip, #0]
|
||||
L___udivsi3$slp:
|
||||
.long L___udivsi3$lazy_ptr
|
||||
.lazy_symbol_pointer
|
||||
L___udivsi3$lazy_ptr:
|
||||
.indirect_symbol ___udivsi3
|
||||
.long dyld_stub_binding_helper
|
68
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umodsi3.c
Normal file
68
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umodsi3.c
Normal file
@@ -0,0 +1,68 @@
|
||||
/** @file
|
||||
Compiler intrinsic for 32-bit unsigned mod, ported from LLVM code.
|
||||
|
||||
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
/**
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include "Llvm_int_lib.h"
|
||||
|
||||
|
||||
// Returns: a % b
|
||||
|
||||
UINT32
|
||||
__umodsi3(UINT32 a, UINT32 b)
|
||||
{
|
||||
return a - (a / b) * b;
|
||||
}
|
38
ArmPkg/Library/CompilerIntrinsicsLib/Arm/uread.asm
Normal file
38
ArmPkg/Library/CompilerIntrinsicsLib/Arm/uread.asm
Normal file
@@ -0,0 +1,38 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
EXPORT __aeabi_uread4
|
||||
|
||||
AREA Uread4, CODE, READONLY
|
||||
|
||||
;
|
||||
;UINT32
|
||||
;EFIAPI
|
||||
;__aeabi_uread4 (
|
||||
; IN VOID *Pointer
|
||||
; );
|
||||
;
|
||||
__aeabi_uread4
|
||||
ldrb r2, [r0, #1]
|
||||
ldrb r1, [r0]
|
||||
ldrb r3, [r0, #2]
|
||||
ldrb r0, [r0, #3]
|
||||
orr r1, r1, r2, lsl #8
|
||||
orr r1, r1, r3, lsl #16
|
||||
orr r0, r1, r0, lsl #24
|
||||
bx lr
|
||||
|
||||
END
|
40
ArmPkg/Library/CompilerIntrinsicsLib/Arm/uwrite.asm
Normal file
40
ArmPkg/Library/CompilerIntrinsicsLib/Arm/uwrite.asm
Normal file
@@ -0,0 +1,40 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EXPORT __aeabi_uwrite4
|
||||
|
||||
AREA Uwrite4, CODE, READONLY
|
||||
|
||||
;
|
||||
;UINT32
|
||||
;EFIAPI
|
||||
;__aeabi_uwrite4 (
|
||||
; IN UINT32 Data,
|
||||
; IN VOID *Pointer
|
||||
; );
|
||||
;
|
||||
;
|
||||
__aeabi_uwrite4
|
||||
mov r2, r0, lsr #8
|
||||
strb r0, [r1]
|
||||
strb r2, [r1, #1]
|
||||
mov r2, r0, lsr #16
|
||||
strb r2, [r1, #2]
|
||||
mov r2, r0, lsr #24
|
||||
strb r2, [r1, #3]
|
||||
bx lr
|
||||
|
||||
END
|
||||
|
Reference in New Issue
Block a user