;*************************************************************************
;** General Jump Optimizer						**
;** Contributor: Jess Sosnoski        			Apr 30th  1998  **
;** bsr,rts -> bra, jsr, rts -> bra/jmp, bra.l -> bra.w -> bra.b	**
;*************************************************************************

;----------------------------------------------------------------------------
; bsr.w, rts -> bra.w
#match
#code
6100 YYYY
4E75

#replace
6000
#end

;----------------------------------------------------------------------------
; bsr.l, rts -> bra.l
#match
#code
61FF YYYY YYYY
4E75

#replace
60FF
#end

;----------------------------------------------------------------------------
; bsr.b, rts -> bra.b
#match
#code
%01100001YYYYYYYY 	=@ SourceEA
4E75

#replace
%01100000YYYYYYYY 	=@ SourceEA
#end

;----------------------------------------------------------------------------
; branch SIZE optimizers :)
; bra.l -> bra.w -> bra.b
#match
#code
60FF			;BRA.L
YYYY YYYY  		=@ EA

#replace
6000			;BRA.W
YYYY 			=@ EA
4E71
#end

; bra.w -> bra.b
#match
#code
6000
YYYY			=@ EA

#replace
%01100000YYYYYYYY	=@ EA
4E71
#end

;-----------------------------------------------------------------------------
; abs jsr, rts -> jmp

#match
#code
%0100111010XXXXXX 	=# SourceEA
RRRR RRRR         	=@ EA
4E75

#replace
%0100111011XXXXXX 	=# SourceEA
RRRR RRRR         	=@ EA
#end

;----------------------------------------------------------------------------
; for pc-relative jsr, rts -> bra.w
#match
#code
4EBA YYYY
4E75

#replace
6000
#end

;----------------------------------------------------------------------------
; jmp pc-relative -> bra.w
#match
#code
4EFA YYYY				; JMP foo(PC)

#replace
6000					; BRA.W
#end
