Bonjour a tous

La fonction suivante fait un décalage a droite de n bit dans mot de 64 bits

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
static inline Word64 SAR64(Word64 x, int n)
{
        unsigned int xLo = ((unsigned int *)&x)[0];
        int xHi = ((int *)&x)[1];
        unsigned char nb = (unsigned char)n;
 
        if (n < 32) {
                     __asm {
                                mov edx, xHi
                                mov eax, xLo
                                mov cl, nb
                                 shrd eax, edx, cl
                                sar edx, cl
                                  }
 
 
        } else if (n < 64) {   */
                /* sar masks cl to 0x1f */
                     __asm {
                                mov edx, xHi
                                mov eax, xHi
                                mov cl, nb
                                sar edx, 31
                               sar eax, cl
                             }
                } else {
                      __asm {
                                  sar xHi, 31
                                  mov eax, xHi
                                  mov edx, xHi
                                }
                          }
 
}
Pouvez vous m'aider a traduire cette fonction en C

Merci d'avance