Projects : gscm : gscm_usrbin

gscm/src/asm-x86_64.s

Dir - Raw

1.intel_syntax noprefix
2.global sc_wide_mul
3.global sc_wide_mul_signed
4.global sc_bit_length
5.global sc_div_extended
6.text
7
8sc_wide_mul: /* rdi=*a, rsi=*b */
9 mov rax, [rdi] /* *a -> rax */
10 mul qword ptr [rsi] /* unsigned rax*(*b) -> rdx:rax */
11 mov [rdi], rax /* lo -> *a */
12 mov [rsi], rdx /* hi -> *b */
13 ret
14
15sc_wide_mul_signed:
16 mov rax, [rdi]
17 imul qword ptr [rsi]
18 mov [rdi], rax
19 mov [rsi], rdx
20 ret
21
22sc_bit_length: /* rdi=a */
23 bsr rax, rdi /* Bit Scan Reverse */
24 jz .L1
25 inc rax
26 ret
27.L1: /* a=0: rax undefined */
28 xor rax, rax
29 ret
30
31sc_div_extended: /* rdi=*a_lo, rsi=*a_hi, rdx=b */
32 mov rcx, rdx /* save b -> rcx */
33 mov rax, [rdi] /* *a_lo -> rax */
34 mov rdx, [rsi] /* *a_hi -> rdx */
35 div rcx /* unsigned rdx:rax / b -> Q rax, R rdx */
36 mov [rsi], rax /* quotient -> *a_hi */
37 mov [rdi], rdx /* remainder -> *a_lo */
38 ret