mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +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
|
||||
|
||||
/*
|
||||
__int64
|
||||
__rt_srsh(
|
||||
__int64 value,
|
||||
uint32_t shift);
|
||||
|
||||
R0 = loword of value
|
||||
R1 = hiword of value
|
||||
R2 = shift
|
||||
|
||||
*/
|
||||
|
||||
LEAF_ENTRY __rt_srsh
|
||||
|
||||
__assertfail
|
||||
bx lr
|
||||
/* r3 = 32 - r2 */
|
||||
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
|
||||
|
||||
|
|
Loading…
Reference in a new issue