; Comba/KCM Macros for 64-bit Itanium ; ; Scheduled Version ; ; Note that: ; mr_small is a 64-bit unsigned long ; ; Triple register is extra|sumh1|sumlo ; ; See makemcs.txt for more information about this file ; MACRO PMUL_START carry=0; ENDM MACRO PMUL ma=a[%d]; u=_m64_xmalu(ma,sn,carry); carry=_m64_xmahu(ma,sn,carry); b[%d]=0; c[%d]=u; ENDM MACRO PMUL_END b[0]=_m64_xmalu(carry,sn,0); b[1]=_m64_xmahu(carry,sn,0); ENDM MACRO MUL_START extra=sumhi=sumlo=0; ENDM ; ; STEP macros ; MACRO STEP ma=a[%d]; mb=b[%d]; hi1=_m64_xmahu(ma,mb,sumlo); lo1=_m64_xmalu(ma,mb,sumlo); sumhi+=hi1; extra+=(sumhima) carry=0; else if (uma) carry=0; else if (ua[0]); c[0]=u; ENDM ; ; SUB macro - c[.]=a[.]-b[.] ; MACRO SUB ma=a[%d]; u=ma-b[%d]-carry; if (uma) carry=1; 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]; u=ma-b[%d]-carry; if (uma) carry=1; 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