

        global <%=name%>_copy
        global <%=name%>_copyn
        global <%=name%>_add
        global <%=name%>_sub
        global <%=name%>_neg
        global <%=name%>_mul
        global <%=name%>_square
        global <%=name%>_band
        global <%=name%>_bor
        global <%=name%>_bxor
        global <%=name%>_bnot
        global <%=name%>_shl
        global <%=name%>_shr
        global <%=name%>_eq
        global <%=name%>_neq
        global <%=name%>_lt
        global <%=name%>_gt
        global <%=name%>_leq
        global <%=name%>_geq
        global <%=name%>_land
        global <%=name%>_lor
        global <%=name%>_lnot
        global <%=name%>_toNormal
        global <%=name%>_toLongNormal
        global <%=name%>_toMontgomery
        global <%=name%>_toInt
        global <%=name%>_isTrue
        global <%=name%>_q
        global <%=name%>_R3

        global <%=name%>_rawCopy
        global <%=name%>_rawZero
        global <%=name%>_rawSwap
        global <%=name%>_rawAdd
        global <%=name%>_rawSub
        global <%=name%>_rawNeg
        global <%=name%>_rawMMul
        global <%=name%>_rawMMul1
        global <%=name%>_rawMSquare
        global <%=name%>_rawToMontgomery
        global <%=name%>_rawFromMontgomery
        global <%=name%>_rawIsEq
        global <%=name%>_rawIsZero
        global <%=name%>_rawShr
        global <%=name%>_rawShl
        global <%=name%>_rawq
        global <%=name%>_rawR3

        extern <%=name%>_fail
        DEFAULT REL

        section .text
<%- include('utils.asm.ejs'); %>
<%- include('copy.asm.ejs'); %>
<%- include('montgomery.asm.ejs'); %>
<%- include('add.asm.ejs'); %>
<%- include('sub.asm.ejs'); %>
<%- include('neg.asm.ejs'); %>
<%- include('mul.asm.ejs'); %>
<%- include('binops.asm.ejs'); %>
<%- include('cmpops.asm.ejs'); %>
<%- include('logicalops.asm.ejs'); %>

        section .data
<%=name%>_q:
        dd      0
        dd      0x80000000
<%=name%>_rawq:
q       dq      <%= constantElement(q) %>
half    dq      <%= constantElement(q.shiftRight(1)) %>
R2      dq      <%= constantElement(bigInt.one.shiftLeft(n64*64*2).mod(q)) %>
<%=name%>_R3:
        dd      0
        dd      0x80000000
<%=name%>_rawR3:
R3      dq      <%= constantElement(bigInt.one.shiftLeft(n64*64*3).mod(q)) %>
lboMask dq      0x<%= bigInt("10000000000000000",16).shiftRight(n64*64 - q.bitLength()).minus(bigInt.one).toString(16) %>
np      dq      0x<%= (bigInt.one.shiftLeft(64)).minus(q.modInv(bigInt.one.shiftLeft(64))).toString(16) %>

