;; GCC assembler includefile for AS1750
;;
;; Macros defined:
;;   EFLR.M  #d,#s	Load the three regs starting at R#s to R#d following.
;;   RET.M   #fs	Return from function (uses the framesize #fs)


UC	SET	15

; Return from function ; parameter: framesize
     MACRO RET.M
	IF `1` > 0
	    IF `1` <= 16
		AISP R14,`1`
	    ELSE
		AIM  R14,`1`
	    ENDIF
	ENDIF
	LR   R15,R14
	URS  R15
     ENDMACRO

; Useful instructions missing from the 1750A standard:

; Extended Float Load from Registers
     MACRO EFLR.M	; args : #1=dest-regno, #2=source-regno
ONE 	SET  `1` + 2
TWO 	SET  `2` + 2
	IF `1` >= `2` || `1`+2 < `2`
	    LR    R`ONE`,R`TWO`
	    DLR   R`1`,R`2`
	ELSE
	    DLR   R`1`,R`2`
	    LR    R`ONE`,R`TWO`
	    DLR   R`1`,R`1`	; Just to update condition codes
	ENDIF
     ENDMACRO

; The following leave the condition codes haywire. But that is
; accounted for (see notice_update_cc in config/1750a.c.)

; Double ANd Register with Register
     MACRO DANR.M
ONE 	SET  `1` + 1
TWO 	SET  `2` + 1
	ANDR  R`1`,R`2`
	ANDR  R`ONE`,R`TWO`
     ENDMACRO

; Double OR Register with Register
     MACRO DORR.M
ONE 	SET  `1` + 1
TWO 	SET  `2` + 1
	ORR   R`1`,R`2`
	ORR   R`ONE`,R`TWO`
     ENDMACRO

; Double eXoR Register with Register
     MACRO DXRR.M
ONE 	SET  `1` + 1
TWO 	SET  `2` + 1
	XORR  R`1`,R`2`
	XORR  R`ONE`,R`TWO`
     ENDMACRO

; Double Nand Register with register
     MACRO DNR.M
ONE 	SET  `1` + 1
TWO 	SET  `2` + 1
	NR    R`1`,R`2`
	NR    R`ONE`,R`TWO`
     ENDMACRO

