mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
[CRT]
Implement __rt_srsh svn path=/trunk/; revision=67642
This commit is contained in:
parent
70ff0e774d
commit
c7e9f9e06c
1 changed files with 58 additions and 2 deletions
|
@ -13,10 +13,66 @@
|
||||||
|
|
||||||
TEXTAREA
|
TEXTAREA
|
||||||
|
|
||||||
|
/*
|
||||||
|
__int64
|
||||||
|
__rt_srsh(
|
||||||
|
__int64 value,
|
||||||
|
uint32_t shift);
|
||||||
|
|
||||||
|
R0 = loword of value
|
||||||
|
R1 = hiword of value
|
||||||
|
R2 = shift
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
LEAF_ENTRY __rt_srsh
|
LEAF_ENTRY __rt_srsh
|
||||||
|
|
||||||
__assertfail
|
/* r3 = 32 - r2 */
|
||||||
bx lr
|
rsbs r3, r2, #32
|
||||||
|
|
||||||
|
/* Branch if minus (r2 > 32) */
|
||||||
|
bmi __rt_srsh2
|
||||||
|
|
||||||
|
/* r0 = r0 >> r2 (logical shift!) */
|
||||||
|
lsr r0, r0, r2
|
||||||
|
|
||||||
|
/* r3 = r1 << r3 */
|
||||||
|
lsl r3, r1, r3
|
||||||
|
|
||||||
|
/* r0 |= r1 << (32 - r2) */
|
||||||
|
orr r0, r0, r3
|
||||||
|
|
||||||
|
/* r1 = r1 >> r2 (arithmetic shift!) */
|
||||||
|
asr r1, r1, r2
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
|
||||||
|
__rt_srsh2
|
||||||
|
|
||||||
|
/* Check if shift is > 64 */
|
||||||
|
cmp r2, 64
|
||||||
|
bhs __rt_srsh3
|
||||||
|
|
||||||
|
/* r3 = r2 - 32 */
|
||||||
|
sub r3, r2, #32
|
||||||
|
|
||||||
|
/* r0 = r1 >> r3 (arithmetic shift!) */
|
||||||
|
asr r0, r1, r3
|
||||||
|
|
||||||
|
/* r1 = r1 >> 32 (arithmetic shift!) */
|
||||||
|
asr r1, r1, #32
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
|
||||||
|
__rt_srsh3
|
||||||
|
|
||||||
|
/* r1 = r1 >> 32 (arithmetic shift!) */
|
||||||
|
asr r1, r1, #32
|
||||||
|
|
||||||
|
/* r0 = r1 */
|
||||||
|
mov r0, r1
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
|
||||||
LEAF_END __rt_srsh
|
LEAF_END __rt_srsh
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue