; Comba/KCM Macros for 64-bit Windows ; ; Note that mr_small is 64-bit unsigned __int64 ; ; Triple register is extra|sumhi|sumlo ; ; See makemcs.txt for more information about this file ; MACRO PMUL_START carry=0; ENDM MACRO PMUL su=_umul128(a[%d],sn,&v); su+=carry; v+=(sua[0]); c[0]=u; ENDM ; ; SUB macro - c[.]=a[.]-b[.] ; MACRO SUB ma=a[%d]; mb=b[%d]; u=ma-carry; carry=(u>ma); ma=u; u=ma-mb; carry+=(u>ma); c[%d]=u; ENDM MACRO SUB_END ENDM ; ; DEC_START macro ; MACRO DEC_START u=a[0]-b[0]; carry=(u>a[0]); a[0]=u; ENDM ; ; DEC macro a[.]-=b[.] ; MACRO DEC ma=a[%d]; mb=b[%d]; u=ma-carry; carry=(u>ma); ma=u; u=ma-mb; carry+=(u>ma); a[%d]=u; ENDM ; ; DEC_END macro ; MACRO DEC_END ENDM ; ; KADD_START macro. Zero Carry ; MACRO KADD_START carry=0; k%d: ENDM ; ; KASL macro ; MACRO KASL n--; if (n==0) goto k%d; a+=%d; b+=%d; c+=%d; goto k%d; k%d: ENDM ; ; KADD_END macro ; MACRO KADD_END ENDM ; ; KINC_START macro ; MACRO KINC_START carry=0; k%d: ENDM ; ; KIDL macro ; MACRO KIDL n--; if (n==0) goto k%d; a+=%d; b+=%d; goto k%d; k%d: ENDM ; ; KINC_END macro ; MACRO KINC_END ENDM ; ; KDEC_START macro. Zero carry ; MACRO KDEC_START carry=0; k%d: ENDM ; ; KDEC_END macro ; MACRO KDEC_END ENDM