Skip to content

Instantly share code, notes, and snippets.

@jlinnosa
Created November 17, 2021 13:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jlinnosa/357b2378c897f0356a3321bb6aee071e to your computer and use it in GitHub Desktop.
Save jlinnosa/357b2378c897f0356a3321bb6aee071e to your computer and use it in GitHub Desktop.
gcc -I. -E mpf/pow_ui.c | grep -A20 '^__gmpf_pow_ui'
__gmpf_pow_ui (mpf_ptr r, mpf_srcptr b, unsigned long int e)
{
mpf_t t;
int cnt;
if (e <= 1)
{
if (e == 0)
__gmpf_set_ui (r, 1);
else
__gmpf_set (r, b);
return;
}
do { __asm__ ("rep;bsr\t%1, %q0" : "=r" (cnt) : "rm" ((UDItype)((mp_limb_t) e))); } while (0);
cnt = 64 - 1 - cnt;
@citrus-it
Copy link

build% mdb libgmp.so
> __gmpf_pow_ui::dis
__gmpf_pow_ui:                  pushq  %rbp
__gmpf_pow_ui+1:                movq   %rsp,%rbp
__gmpf_pow_ui+4:                pushq  %r15
__gmpf_pow_ui+6:                pushq  %r14
__gmpf_pow_ui+8:                pushq  %r13
__gmpf_pow_ui+0xa:              movq   %rdi,%r13
__gmpf_pow_ui+0xd:              pushq  %r12
__gmpf_pow_ui+0xf:              movq   %rsi,%r12
__gmpf_pow_ui+0x12:             pushq  %rbx
__gmpf_pow_ui+0x13:             movq   %rdx,%rbx
__gmpf_pow_ui+0x16:             subq   $0x28,%rsp
__gmpf_pow_ui+0x1a:             movq   +0x68faf(%rip),%rax      <0x8b200>
__gmpf_pow_ui+0x21:             movq   (%rax),%rcx
__gmpf_pow_ui+0x24:             movq   %rcx,-0x38(%rbp)
__gmpf_pow_ui+0x28:             xorl   %ecx,%ecx
__gmpf_pow_ui+0x2a:             cmpq   $0x1,%rdx
__gmpf_pow_ui+0x2e:             jbe    +0xcc    <__gmpf_pow_ui+0x100>
__gmpf_pow_ui+0x34:             lzcntq %rdx,%r15
__gmpf_pow_ui+0x39:             call   -0x6cae  <PLT:__gmpf_get_prec>
__gmpf_pow_ui+0x3e:             movl   $0x3f,%esi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment