File: fp_amd64.h

package info (click to toggle)
golang-github-cloudflare-circl 1.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 18,064 kB
  • sloc: asm: 20,492; ansic: 1,292; makefile: 68
file content (85 lines) | stat: -rw-r--r-- 1,833 bytes parent folder | download | duplicates (5)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// CHECK_BMI2 triggers bmi2 if supported,
// otherwise it fallbacks to legacy code.
#define CHECK_BMI2(label, legacy, bmi2) \
    CMPB ·hasBMI2(SB), $0 \
    JE label              \
    bmi2                  \
    RET                   \
    label:                \
    legacy                \
    RET

#define _fpReduce(c0, c1) \
    BTRQ $63, c1          \
    ADCQ  $0, c0          \
    ADCQ  $0, c1

// _fpMod: c = c mod p
// Uses: AX, DX, FLAGS
// Instr: x86_64
#define _fpMod(c) \
    MOVQ 0+c, AX \
    MOVQ 8+c, DX \
    SUBQ ·modulusP+0(SB), AX \
    SBBQ ·modulusP+8(SB), DX \
    BTRQ $63, DX  \
    SBBQ  $0, AX  \
    SBBQ  $0, DX  \
    _fpReduce(AX, DX) \
    _fpReduce(AX, DX) \
    MOVQ AX, 0+c  \
    MOVQ DX, 8+c

// _fpAdd: c = a + b
// Uses: AX, DX, FLAGS
// Instr: x86_64
#define _fpAdd(c,a,b) \
    MOVQ 0+a, AX      \
    MOVQ 8+a, DX      \
    ADDQ 0+b, AX      \
    ADCQ 8+b, DX      \
    _fpReduce(AX, DX) \
    MOVQ AX, 0+c      \
    MOVQ DX, 8+c

// _fpSub: c = a - b
// Uses: AX, DX, FLAGS
// Instr: x86_64
#define _fpSub(c,a,b) \
    MOVQ 0+a, AX      \
    MOVQ 8+a, DX      \
    SUBQ 0+b, AX      \
    SBBQ 8+b, DX      \
    BTRQ $63, DX      \
    SBBQ  $0, AX      \
    SBBQ  $0, DX      \
    MOVQ AX, 0+c      \
    MOVQ DX, 8+c

#define _fpMulLeg(C2, C1, C0, a, b) \
    MOVQ   $0, C2 \
    MOVQ  0+b, CX \
    MOVQ  0+a, AX \
    MULQ CX       \
    MOVQ AX, C0   \
    MOVQ DX, C1   \
    MOVQ  8+a, AX \
    MULQ CX       \
    SHLQ $1,DX    \
    ADDQ DX,C0    \
    ADCQ AX, C1   \
    ADCQ $0, C2   \
    MOVQ  8+b, CX \
    MOVQ  0+a, AX \
    MULQ CX       \
    SHLQ $1,DX    \
    ADDQ DX,C0    \
    ADCQ AX, C1   \
    ADCQ $0, C2   \
    MOVQ  8+a, AX \
    MULQ CX       \
    SHLQ $1,AX,DX \
    SHLQ $1,AX    \
    ADDQ AX,C0    \
    ADCQ DX, C1   \
    ADCQ $0, C2