[Issue 6829] Unsigned rotate standard function in Phobos
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Jul 10 03:28:21 PDT 2013
http://d.puremagic.com/issues/show_bug.cgi?id=6829
--- Comment #8 from bearophile_hugs at eml.cc 2013-07-10 03:28:19 PDT ---
(In reply to comment #6)
> (In reply to comment #5)
> > I think this should be a recognizable rotate left function:
> >
> > private static uint rol(in uint x, in uint y) pure nothrow {
> > return (x << y) | (x >> (32 - y));
> > }
>
> It is (in gdc with -O :)
>
> _D3rol3rolFNaNbxkxkZk:
> mov x, %eax
> mov y, %ecx
> rol %cl, %eax
> ret
Both dmd and ldc2 recognize the patterns:
uint rol(in uint x, in uint y) pure nothrow {
return (x << y) | (x >> (32 - y));
}
uint ror(in uint x, in uint y) pure nothrow {
return (x >> y) | (x << (32 - y));
}
extern(C) uint rol2(in uint x, in uint y) pure nothrow {
return (x << y) | (x >> (32 - y));
}
void main() {}
/*
dmd -O
_D5temp23rolFNaNbxkxkZk:
push EAX
mov EAX,8[ESP]
mov ECX,[ESP]
rol EAX,CL
pop ECX
ret 4
_D5temp23rorFNaNbxkxkZk:
push EAX
mov EAX,8[ESP]
mov ECX,[ESP]
ror EAX,CL
pop ECX
ret 4
_rol2 :
mov EAX,4[ESP]
mov ECX,8[ESP]
rol EAX,CL
ret
----------------
ldmd2 -O -output-s
__D5temp23rolFNaNbxkxkZk:
movl 4(%esp), %edx
movb %al, %cl
roll %cl, %edx
movl %edx, %eax
ret $4
__D5temp23rorFNaNbxkxkZk:
movl 4(%esp), %edx
movb %al, %cl
rorl %cl, %edx
movl %edx, %eax
ret $4
_rol2:
movb 8(%esp), %cl
movl 4(%esp), %eax
roll %cl, %eax
ret
*/
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list