diff --git a/avr-libc/ChangeLog b/avr-libc/ChangeLog
index 1a586af..0bcb81c 100644
--- a/avr-libc/ChangeLog
+++ b/avr-libc/ChangeLog
@@ -1,3 +1,64 @@
+2015-03-27  Martin Nowak <code@dawg.eu>
+
+	* libm/fplib/asmdef.h : Add XCALL/XJMP macros
+	* libm/fplib/acos.S : Use XCALL/XJMP instead of explicit
+	rcall/rjmp for external functions to fix LTO (bug #33698).
+	The linker can still relax those calls if possible.
+	* libm/fplib/acos.S : Ditto.
+	* libm/fplib/addsf3.S : Ditto.
+	* libm/fplib/addsf3x.S : Ditto.
+	* libm/fplib/asin.S : Ditto.
+	* libm/fplib/asmdef.h : Ditto.
+	* libm/fplib/atan.S : Ditto.
+	* libm/fplib/atan2.S : Ditto.
+	* libm/fplib/cbrt.S : Ditto.
+	* libm/fplib/ceil.S : Ditto.
+	* libm/fplib/cmpsf2.S : Ditto.
+	* libm/fplib/cos.S : Ditto.
+	* libm/fplib/cosh.S : Ditto.
+	* libm/fplib/divsf3.S : Ditto.
+	* libm/fplib/divsf3x.S : Ditto.
+	* libm/fplib/exp.S : Ditto.
+	* libm/fplib/fdim.S : Ditto.
+	* libm/fplib/fixsfdi.S : Ditto.
+	* libm/fplib/fixsfsi.S : Ditto.
+	* libm/fplib/fixunssfsi.S : Ditto.
+	* libm/fplib/floatdisf.S : Ditto.
+	* libm/fplib/floor.S : Ditto.
+	* libm/fplib/fma.S : Ditto.
+	* libm/fplib/fmod.S : Ditto.
+	* libm/fplib/fp_arccos.S : Ditto.
+	* libm/fplib/fp_powser.S : Ditto.
+	* libm/fplib/fp_powsodd.S : Ditto.
+	* libm/fplib/fp_rempio2.S : Ditto.
+	* libm/fplib/fp_sinus.S : Ditto.
+	* libm/fplib/fp_trunc.S : Ditto.
+	* libm/fplib/frexp.S : Ditto.
+	* libm/fplib/gesf2.S : Ditto.
+	* libm/fplib/hypot.S : Ditto.
+	* libm/fplib/inverse.S : Ditto.
+	* libm/fplib/isinf.S : Ditto.
+	* libm/fplib/isnan.S : Ditto.
+	* libm/fplib/ldexp.S : Ditto.
+	* libm/fplib/log.S : Ditto.
+	* libm/fplib/log10.S : Ditto.
+	* libm/fplib/lrint.S : Ditto.
+	* libm/fplib/lround.S : Ditto.
+	* libm/fplib/modf.S : Ditto.
+	* libm/fplib/mulsf3.S : Ditto.
+	* libm/fplib/mulsf3x.S : Ditto.
+	* libm/fplib/pow.S : Ditto.
+	* libm/fplib/round.S : Ditto.
+	* libm/fplib/sin.S : Ditto.
+	* libm/fplib/sinh.S : Ditto.
+	* libm/fplib/sqrt.S : Ditto.
+	* libm/fplib/square.S : Ditto.
+	* libm/fplib/tan.S : Ditto.
+	* libm/fplib/tanh.S : Ditto.
+	* libm/fplib/trunc.S : Ditto.
+	* libm/fplib/unordsf2.S : Ditto.
+	* libc/stdlib/ctype.S : Ditto.
+
 2015-03-18  Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
 
 	bug #44514: Wrong build option '-mtiny-stack' instead of '-msp8'
diff --git a/avr-libc/libc/stdlib/ctype.S b/avr-libc/libc/stdlib/ctype.S
index 12ab217..536a5d6 100644
--- a/avr-libc/libc/stdlib/ctype.S
+++ b/avr-libc/libc/stdlib/ctype.S
@@ -77,7 +77,7 @@
 
 GLOBAL(isascii)
           CPSE    rHigh,__zero_reg__
-          RJMP    _U(__ctype_isfalse)
+          XJMP    _U(__ctype_isfalse)
           COM     rLow
           ANDI    rLow, 0x80
           RET
@@ -135,15 +135,15 @@ GLOBAL(__ctype_istrue)
 
 GLOBAL(isupper)
           ;CPSE  rHigh,__zero_reg__
-          ;RJMP  _U(__ctype_isfalse)    ; checked by _islower later on
+          ;XJMP  _U(__ctype_isfalse)    ; checked by _islower later on
           SBRC  rLow,5       ; if bit 5 is set it is no upper
-          RJMP  _U(__ctype_isfalse)     ; bit 5 is clear, so if isalpha is true it is an upper
+          XJMP  _U(__ctype_isfalse)     ; bit 5 is clear, so if isalpha is true it is an upper
 GLOBAL(isalpha)
           ORI     rLow,0x20        ; make a lower out of an upper (all others are changed but do not get alpha)
 GLOBAL(islower)
           CPSE  rHigh,__zero_reg__
 1:
-          RJMP  _U(__ctype_isfalse)
+          XJMP  _U(__ctype_isfalse)
           SUBI	rLow, 'a'
           SUBI	rLow, 'z'-'a'+1
           BRSH	1b
@@ -161,7 +161,7 @@ GLOBAL(islower)
 GLOBAL(isdigit)
           CPSE  rHigh,__zero_reg__
 1:        
-          RJMP  _U(__ctype_isfalse)
+          XJMP  _U(__ctype_isfalse)
           SUBI  rLow,'0'
           SUBI  rLow,10
           BRSH  1b
@@ -206,7 +206,7 @@ GLOBAL(isxdigit)
 GLOBAL(iscntrl)
           CPSE  rHigh,__zero_reg__
 1:
-          RJMP  _U(__ctype_isfalse)
+          XJMP  _U(__ctype_isfalse)
           CPI   rLow,0x7F
           BREQ  2f
           SUBI  rLow, ' '
@@ -228,7 +228,7 @@ GLOBAL(isgraph)
           BREQ  1f
 GLOBAL(isprint)
 	  CPSE	rHigh, __zero_reg__
-1:	  RJMP	_U(__ctype_isfalse)
+1:	  XJMP	_U(__ctype_isfalse)
 	  SUBI	rLow, ' '
 	  SUBI	rLow, 0x7E - ' ' + 1
 	  BRSH	1b
@@ -251,7 +251,7 @@ GLOBAL(isprint)
 GLOBAL(isspace)
           CPSE  rHigh,__zero_reg__
 1:
-          RJMP  _U(__ctype_isfalse)
+          XJMP  _U(__ctype_isfalse)
           CPI   rLow,' '           ; blank
           BREQ  2f
 	  SUBI	rLow, '\t'
@@ -293,7 +293,7 @@ GLOBAL(ispunct)
 GLOBAL(isblank)
           CPSE  rHigh,__zero_reg__
 1:
-          RJMP  _U(__ctype_isfalse)
+          XJMP  _U(__ctype_isfalse)
           CPI   rLow,' '           ; blank
           BREQ  2f
           CPI   rLow,0x09    ;'\t' ; tab
diff --git a/avr-libc/libm/fplib/acos.S b/avr-libc/libm/fplib/acos.S
index 7fa5e20..a9c749a 100644
--- a/avr-libc/libm/fplib/acos.S
+++ b/avr-libc/libm/fplib/acos.S
@@ -48,7 +48,7 @@ ENTRY acos
 	push	rA3
   ; A = arccos(fabs(A))
 	andi	rA3, 0x7f
-	rcall	_U(__fp_arccos)
+	XCALL	_U(__fp_arccos)
   ; check sign
 	pop	r0
 	tst	r0
@@ -60,9 +60,9 @@ ENTRY acos
 	ldi	rB1,  hi8(HI40_PI)
 	ldi	rB2, hlo8(HI40_PI)
 	ldi	rB3, hhi8(HI40_PI)
-	rcall	_U(__addsf3x)
+	XCALL	_U(__addsf3x)
   ; round
-1:	rjmp	_U(__fp_round)
+1:	XJMP	_U(__fp_round)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/addsf3.S b/avr-libc/libm/fplib/addsf3.S
index 5697db2..eb672c4 100644
--- a/avr-libc/libm/fplib/addsf3.S
+++ b/avr-libc/libm/fplib/addsf3.S
@@ -41,6 +41,6 @@ ENTRY	__subsf3
 ENTRY	__addsf3
 	clr	rAE
 	clr	rBE
-	rcall	_U(__addsf3x)
-	rjmp	_U(__fp_round)
+	XCALL	_U(__addsf3x)
+	XJMP	_U(__fp_round)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/addsf3x.S b/avr-libc/libm/fplib/addsf3x.S
index 27a5385..f49f88a 100644
--- a/avr-libc/libm/fplib/addsf3x.S
+++ b/avr-libc/libm/fplib/addsf3x.S
@@ -48,26 +48,26 @@
 
 FUNCTION __addsf3x
 
-0:	rcall	_U(__fp_pscA)
+0:	XCALL	_U(__fp_pscA)
 	brcs	.L_nan
-	rcall	_U(__fp_pscB)
+	XCALL	_U(__fp_pscB)
 	brcs	.L_nan
 	brne	.L_inf		; B is finite --> return A
 	cpi	rA3, 255
 	brne	.L_infB		; A is finite --> return B
 	brtc	.L_inf		; Inf + Inf with the same sign
 .L_nan:
-	rjmp	_U(__fp_nan)
+	XJMP	_U(__fp_nan)
 .L_infB:
 	brtc	.L_inf
 	com	ZL
 .L_inf:
 	bst	ZL, 7
-	rjmp	_U(__fp_inf)
+	XJMP	_U(__fp_inf)
 
 ENTRY	__addsf3x
 	mov	ZL, rA3		; save sign of A
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	0b
   ; compare A and B
 	cp	rAE, rBE
@@ -78,7 +78,7 @@ ENTRY	__addsf3x
 	brlo	2f		; fabs(A) < fabs(B)
 	brne	4f		; fabs(A) > fabs(B)
 	brtc	.L_add
-	rjmp	_U(__fp_zero)	; A + (-A) = +0.0
+	XJMP	_U(__fp_zero)	; A + (-A) = +0.0
   ; swap A and B
 2:	brtc	3f
 	com	ZL		; update sign
diff --git a/avr-libc/libm/fplib/asin.S b/avr-libc/libm/fplib/asin.S
index f00c86e..e78d6d0 100644
--- a/avr-libc/libm/fplib/asin.S
+++ b/avr-libc/libm/fplib/asin.S
@@ -57,18 +57,18 @@ ENTRY asin
   ; for small x
 	ldi	ZL, lo8 (.L_table)
 	ldi	ZH, hi8 (.L_table)
-	rcall	_U(__fp_powsodd)
+	XCALL	_U(__fp_powsodd)
 	rjmp	2f
   ; arcsin(x) = Pi/2 - arccos(x)
-1:	rcall	_U(__fp_arccos)
+1:	XCALL	_U(__fp_arccos)
 	subi	rA3, 0x80
 	ldi	rBE, LO40_PI_2
 	ldi	rB0,  lo8(HI40_PI_2)
 	ldi	rB1,  hi8(HI40_PI_2)
 	ldi	rB2, hlo8(HI40_PI_2)
 	ldi	rB3, hhi8(HI40_PI_2)
-	rcall	_U(__addsf3x)
-	rcall	_U(__fp_round)
+	XCALL	_U(__addsf3x)
+	XCALL	_U(__fp_round)
   ; restore sign
 2:	pop	r0
 	sbrc	r0, 7
diff --git a/avr-libc/libm/fplib/asmdef.h b/avr-libc/libm/fplib/asmdef.h
index 8b8b442..9f3845d 100644
--- a/avr-libc/libm/fplib/asmdef.h
+++ b/avr-libc/libm/fplib/asmdef.h
@@ -43,6 +43,14 @@
 # endif
 #endif
 
+#if __AVR_MEGA__
+# define XJMP jmp
+# define XCALL call
+#else
+# define XJMP rjmp
+# define XCALL rcall
+#endif
+
 /* Historicaly, the _U() was intended to concatinate '_' prefix.
    Let us save it, as one is usefull to find externals quickly.	*/
 #define	_U(name)	name
diff --git a/avr-libc/libm/fplib/atan.S b/avr-libc/libm/fplib/atan.S
index a43bab4..8c5981c 100644
--- a/avr-libc/libm/fplib/atan.S
+++ b/avr-libc/libm/fplib/atan.S
@@ -68,22 +68,22 @@ ENTRY atan
 	cpc	rB3, rAE
 	brsh	1f
 	mov	corr, rA3		; rA3 != 0
-	rcall	_U(inverse)
+	XCALL	_U(inverse)
   ; calculate atan(A) for -1.0 <= A <= +1.0
 1:	push	rA3
 	push	rA2
 	push	rA1
 	push	rA0
-	rcall	_U(square)
+	XCALL	_U(square)
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powser)
-	rcall	_U(__fp_round)
+	XCALL	_U(__fp_powser)
+	XCALL	_U(__fp_round)
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
-	rcall	_U(__mulsf3x)
+	XCALL	_U(__mulsf3x)
   ; is correction needed ?
 	tst	corr
 	breq	2f
@@ -96,10 +96,10 @@ ENTRY atan
 	ldi	rB3, hhi8(HI40_PI_2)
 	andi	corr, 0x80
 	eor	rB3, corr
-	rcall	_U(__addsf3x)
+	XCALL	_U(__addsf3x)
   ; restore and round
 2:	pop	corr
-	rjmp	_U(__fp_round)
+	XJMP	_U(__fp_round)
 ENDFUNC
 
 	PGM_SECTION
diff --git a/avr-libc/libm/fplib/atan2.S b/avr-libc/libm/fplib/atan2.S
index 4792679..6ed142c 100644
--- a/avr-libc/libm/fplib/atan2.S
+++ b/avr-libc/libm/fplib/atan2.S
@@ -68,13 +68,13 @@
 
 FUNCTION atan2
 
-.L_nf:	rcall	_U(__fp_pscA)
+.L_nf:	XCALL	_U(__fp_pscA)
 	brcs	.L_nan
 	ldi	rA2, 0x80
 	ldi	rA3, 0x01	; replace finite to very small value
 	brne	1f
 	ldi	rA3, 0xfe	; replace Inf to very big value
-1:	rcall	_U(__fp_pscB)
+1:	XCALL	_U(__fp_pscB)
 	brcs	.L_nan
 	ldi	rB2, 0x80
 	ldi	rB3, 0x01	; replace finite to very small value
@@ -82,15 +82,15 @@ FUNCTION atan2
 	ldi	rB3, 0xfe	; replace Inf to very big value
 	rjmp	.L_cmp
 
-.L_nan:	rjmp	_U(__fp_nan)
-.L_zr:	rjmp	_U(__fp_zero)
+.L_nan:	XJMP	_U(__fp_nan)
+.L_zr:	XJMP	_U(__fp_zero)
 
 ENTRY   atan2
   ; save 'y' sign
 	mov	disp, rA3
 	andi	disp, 0x80
   ; split
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	.L_nf
   ; check the (0,0) case
 	mov	r0, rA3
@@ -124,9 +124,9 @@ ENTRY   atan2
 	X_movw	rB2, XL
   ; save displacement and calculate atan
 2:	push	disp
-	rcall	_U(__divsf3_pse)
-	rcall	_U(__fp_round)
-	rcall	_U(atan)
+	XCALL	_U(__divsf3_pse)
+	XCALL	_U(__fp_round)
+	XCALL	_U(atan)
   ; restore disp and analize
 	pop	rB3		; hhi8()
 	tst	rB3
@@ -137,7 +137,7 @@ ENTRY   atan2
 	ldi	rB2, hlo8(PI)
 	sbrc	rB3, 0		; hhi8(PI) == 0x40,  hhi8(PI_2) == 0x3f
 	ldi	rB2, hlo8(PI_2)
-	rjmp	_U(__addsf3)
+	XJMP	_U(__addsf3)
 
 9:	ret
 ENDFUNC
diff --git a/avr-libc/libm/fplib/cbrt.S b/avr-libc/libm/fplib/cbrt.S
index 0de63f1..8ca323e 100644
--- a/avr-libc/libm/fplib/cbrt.S
+++ b/avr-libc/libm/fplib/cbrt.S
@@ -110,11 +110,11 @@ FUNCTION cbrt
 	ret
 #endif
 
-0:	rjmp	_U(__fp_mpack)
+0:	XJMP	_U(__fp_mpack)
 
 ENTRY cbrt
   ; split and check arg.
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	0b		; !isfinite(A)
 	tst	rA3
 	breq	0b		; return 0 with original sign
diff --git a/avr-libc/libm/fplib/ceil.S b/avr-libc/libm/fplib/ceil.S
index c40b3d6..f475241 100644
--- a/avr-libc/libm/fplib/ceil.S
+++ b/avr-libc/libm/fplib/ceil.S
@@ -46,7 +46,7 @@
 #define FL_P1	0x3f800000	/* +1.0	*/
 
 ENTRY   ceil
-	rcall	_U(__fp_trunc)
+	XCALL	_U(__fp_trunc)
 	brcs	.L_nf
   ; A is finite
 	cpi	rA3, 127
@@ -54,7 +54,7 @@ ENTRY   ceil
   ; fabs(A) < 1.0
 	cpse	rA3, r1
 	brtc	1f
-	rjmp	_U(__fp_szero)		; ceil(-0.0) is -0.0
+	XJMP	_U(__fp_szero)		; ceil(-0.0) is -0.0
   ; 0.0 < A < 1.0 --> +1.0
 1:	ldi	rA0,  lo8(FL_P1)
 	ldi	rA1,  hi8(FL_P1)
@@ -67,9 +67,9 @@ ENTRY   ceil
 	adc	rA0, r1
 	adc	rA1, r1
 	adc	rA2, r1		; rA2 was < 0x80, overflow is impossible
-3:	rjmp	_U(__fp_mintl)
+3:	XJMP	_U(__fp_mintl)
 
-.L_nf:	rjmp	_U(__fp_mpack)	; pass nonfinite arg as is
+.L_nf:	XJMP	_U(__fp_mpack)	; pass nonfinite arg as is
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/cmpsf2.S b/avr-libc/libm/fplib/cmpsf2.S
index 8f40621..44b392b 100644
--- a/avr-libc/libm/fplib/cmpsf2.S
+++ b/avr-libc/libm/fplib/cmpsf2.S
@@ -55,7 +55,7 @@ ENTRY   __eqsf2
 ENTRY   __nesf2
 ENTRY   __ltsf2
 ENTRY   __lesf2
-	rcall	_U(__fp_cmp)
+	XCALL	_U(__fp_cmp)
 	brcc	1f
 	ldi	ret_lo, 1
 1:	ret
diff --git a/avr-libc/libm/fplib/cos.S b/avr-libc/libm/fplib/cos.S
index 78256e0..cc45772 100644
--- a/avr-libc/libm/fplib/cos.S
+++ b/avr-libc/libm/fplib/cos.S
@@ -37,7 +37,7 @@
      radians.
  */
 ENTRY cos
-	rcall	_U(__fp_rempio2)
+	XCALL	_U(__fp_rempio2)
 	inc	ZL
-	rjmp	_U(__fp_sinus)
+	XJMP	_U(__fp_sinus)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/cosh.S b/avr-libc/libm/fplib/cosh.S
index aa8e3dd..04380f8 100644
--- a/avr-libc/libm/fplib/cosh.S
+++ b/avr-libc/libm/fplib/cosh.S
@@ -46,10 +46,10 @@
 ENTRY cosh
   ; A = exp(-fabs(x))/2 	negative to exclude an extra inversion
 	ori	rA3, 0x80
-	rcall	_U(exp)
+	XCALL	_U(exp)
 	ldi	exp_lo, lo8(-1)
 	ldi	exp_hi, hi8(-1)
-	rcall	_U(ldexp)
+	XCALL	_U(ldexp)
   ; save A and calculate exp(fabs(x))/2
 	push	rA3
 	push	rA2
@@ -57,12 +57,12 @@ ENTRY cosh
 	push	rA0
 	ldi	exp_lo, lo8(2)
 	ldi	exp_hi, hi8(2)
-	rcall	_U(ldexp)
-	rcall	_U(inverse)
+	XCALL	_U(ldexp)
+	XCALL	_U(inverse)
   ; exp(x)/2 + exp(-x)/2
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
-	rjmp	_U(__addsf3)
+	XJMP	_U(__addsf3)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/divsf3.S b/avr-libc/libm/fplib/divsf3.S
index d02d7f4..754ee6d 100644
--- a/avr-libc/libm/fplib/divsf3.S
+++ b/avr-libc/libm/fplib/divsf3.S
@@ -37,6 +37,6 @@
 #include "asmdef.h"
 
 ENTRY	__divsf3
-	rcall	_U(__divsf3x)
-	rjmp	_U(__fp_round)
+	XCALL	_U(__divsf3x)
+	XJMP	_U(__fp_round)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/divsf3x.S b/avr-libc/libm/fplib/divsf3x.S
index 52cf0ec..f05e47c 100644
--- a/avr-libc/libm/fplib/divsf3x.S
+++ b/avr-libc/libm/fplib/divsf3x.S
@@ -43,23 +43,23 @@
 
 FUNCTION __divsf3x
 
-0:	rcall	_U(__fp_pscB)
+0:	XCALL	_U(__fp_pscB)
 	brcs	.L_nan
-	rcall	_U(__fp_pscA)
+	XCALL	_U(__fp_pscA)
 	brcs	.L_nan
 	brne	.L_zr		; finite / Inf --> 0
 .L_infA:
 	cpi	rB3, 255
 	breq	.L_nan		; Inf / Inf --> NaN
 .L_inf:
-	rjmp	_U(__fp_inf)
+	XJMP	_U(__fp_inf)
 1:
 	cpse	rB3, r1		; 0/finite --> 0,  0/0 --> NaN
-.L_zr:	rjmp	_U(__fp_szero)
-.L_nan:	rjmp	_U(__fp_nan)
+.L_zr:	XJMP	_U(__fp_szero)
+.L_nan:	XJMP	_U(__fp_nan)
 
 ENTRY	__divsf3x
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	0b
 
 ENTRY	__divsf3_pse		; post split entry
@@ -130,9 +130,9 @@ ENTRY	__divsf3_pse		; post split entry
 11:	cpi	rA3, 254
 	cpc	rB3, r1
 	brlo	15f
-	rjmp	_U(__fp_inf)
+	XJMP	_U(__fp_inf)
   ; check lowest value of exponent to avoid long operation
-12:	rjmp	_U(__fp_szero)
+12:	XJMP	_U(__fp_szero)
 13:	cpi	rB3, hi8(-24)		; here rB3 < 0
 	brlt	12b
 	cpi	rA3, lo8(-24)
diff --git a/avr-libc/libm/fplib/exp.S b/avr-libc/libm/fplib/exp.S
index 155b320..6dceb9a 100644
--- a/avr-libc/libm/fplib/exp.S
+++ b/avr-libc/libm/fplib/exp.S
@@ -50,13 +50,13 @@ FUNCTION exp
 
 .L_nf:	brne	.L_nan
 .L_tb:	brts	.L_zr
-	rjmp	_U(__fp_inf)
-.L_zr:	rjmp	_U(__fp_zero)
-.L_nan:	rjmp	_U(__fp_nan)
+	XJMP	_U(__fp_inf)
+.L_zr:	XJMP	_U(__fp_zero)
+.L_nan:	XJMP	_U(__fp_nan)
 
 ENTRY exp
   ; split and analize A
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_nf		; A is not a finite number
 	cpi	rA3, hhi8(X2BIG << 1)
 	brsh	.L_tb		; A is too big (in absolute value)
@@ -69,7 +69,7 @@ ENTRY exp
 	ldi	rB1,  hi8(FL_1_LN2)
 	ldi	rB2, hlo8(FL_1_LN2 | 0x800000)		; hidden '1'
 	ldi	rB3, hhi8(FL_1_LN2 << 1)		; exponent
-	rcall	_U(__mulsf3_pse)
+	XCALL	_U(__mulsf3_pse)
   ; split A into fraction and integral parts
 	push	r0
 	push	r0
@@ -77,11 +77,11 @@ ENTRY exp
 	in	exp_lo, SPL_IO_ADDR
 	in	exp_hi, SPH_IO_ADDR
 	push	r0
-	rcall	_U(modf)
+	XCALL	_U(modf)
   ; calculate 2**(-x) for 0 <= x < 1
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powser)
+	XCALL	_U(__fp_powser)
   ; get integral part
 	pop	exp_lo
 	pop	exp_hi
@@ -102,11 +102,11 @@ ENTRY exp
   ; negate and scale
 	neg	exp_lo
 	sbc	exp_hi, exp_hi
-2:	rcall	_U(ldexp)
+2:	XCALL	_U(ldexp)
   ; inverse for positive arg.
 	pop	r0
 	sbrs	r0, 7
-	rjmp	_U(inverse)
+	XJMP	_U(inverse)
 	ret
 ENDFUNC
 	
diff --git a/avr-libc/libm/fplib/fdim.S b/avr-libc/libm/fplib/fdim.S
index e4148f7..d4de9d1 100644
--- a/avr-libc/libm/fplib/fdim.S
+++ b/avr-libc/libm/fplib/fdim.S
@@ -55,7 +55,7 @@ ENTRY fdim
 	cpc	rA2, rB2
 	cpc	rA3, rB3
 	brcs	3f
-1:	rjmp	_U(__subsf3)
+1:	XJMP	_U(__subsf3)
   ; A < 0 or B < 0
 2:	cp	rB0, rA0
 	cpc	rB1, rA1
@@ -79,9 +79,9 @@ ENTRY fdim
 	cpc	ZH, rB3
 	brlo	.L_nan
   ; return 0
-	rjmp	_U(__fp_zero)
+	XJMP	_U(__fp_zero)
 
-.L_nan:	rjmp	_U(__fp_nan)
+.L_nan:	XJMP	_U(__fp_nan)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/fixsfdi.S b/avr-libc/libm/fplib/fixsfdi.S
index ba9c1a4..1d17105 100644
--- a/avr-libc/libm/fplib/fixsfdi.S
+++ b/avr-libc/libm/fplib/fixsfdi.S
@@ -90,7 +90,7 @@ ENTRY	__fixunssfdi
 	clr	rB1
 	X_movw	rB2, rB0
   ; split
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_ovfl		; is not finite
 
 	subi	rA3, 127	; 1.0 exponent field
@@ -147,7 +147,7 @@ ENTRY	__fixunssfdi
 	brne	6b
 .L_sign:
 	brtc	7f
-	rcall	_U(__fp_negdi)
+	XCALL	_U(__fp_negdi)
 7:	clc
 	ret
 
diff --git a/avr-libc/libm/fplib/fixsfsi.S b/avr-libc/libm/fplib/fixsfsi.S
index 4e463c0..a593e3f 100644
--- a/avr-libc/libm/fplib/fixsfsi.S
+++ b/avr-libc/libm/fplib/fixsfsi.S
@@ -49,10 +49,10 @@
  */
 
 ENTRY __fixsfsi
-	rcall	_U(__fixunssfsi)
+	XCALL	_U(__fixunssfsi)
 	set
 	cpse	rAE, r1			; error flag
-	rjmp	_U(__fp_szero)		; return 0x80000000
+	XJMP	_U(__fp_szero)		; return 0x80000000
 	ret
 ENDFUNC
 
diff --git a/avr-libc/libm/fplib/fixunssfsi.S b/avr-libc/libm/fplib/fixunssfsi.S
index 6d0e2d2..8e7fd66 100644
--- a/avr-libc/libm/fplib/fixunssfsi.S
+++ b/avr-libc/libm/fplib/fixunssfsi.S
@@ -66,7 +66,7 @@
  */
 
 ENTRY __fixunssfsi
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_err
   ; A is finite
 	subi	rA3, 127	; exponent field of 1.0
@@ -91,11 +91,11 @@ ENTRY __fixunssfsi
 2:	cpi	rAE, 1
 	breq	.L_sign		; rAE: overflow for 'signed long' usage
 
-.L_err:	rcall	_U(__fp_zero)
+.L_err:	XCALL	_U(__fp_zero)
 	ldi	rAE, 1		; error flag
 	ret
 
-.L_zr:	rjmp	_U(__fp_zero)	; return 0x00000000, clear rAE
+.L_zr:	XJMP	_U(__fp_zero)	; return 0x00000000, clear rAE
 
   ; fabs(A) <= 0x0.ffffffp+23
   ; Shift A to right by 1 (rA3==-1) .. 23 (rA3==-23) positions.
diff --git a/avr-libc/libm/fplib/floatdisf.S b/avr-libc/libm/fplib/floatdisf.S
index e3a33bc..70bac9b 100644
--- a/avr-libc/libm/fplib/floatdisf.S
+++ b/avr-libc/libm/fplib/floatdisf.S
@@ -42,6 +42,6 @@
 ENTRY   __floatdisf
 	bst	rA3, 7		; sign
 	brtc	1f
-	rcall	_U(__fp_negdi)
-1:	rjmp	_U(__fp_di2sf)
+	XCALL	_U(__fp_negdi)
+1:	XJMP	_U(__fp_di2sf)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/floor.S b/avr-libc/libm/fplib/floor.S
index f408a85..d780c95 100644
--- a/avr-libc/libm/fplib/floor.S
+++ b/avr-libc/libm/fplib/floor.S
@@ -45,7 +45,7 @@
 #define FL_M1	0xbf800000	/* -1.0	*/
 
 ENTRY floor
-	rcall	_U(__fp_trunc)
+	XCALL	_U(__fp_trunc)
 	brcs	.L_nf
   ; A is finite
 	cpi	rA3, 127
@@ -53,7 +53,7 @@ ENTRY floor
   ; fabs(A) < 1.0
 	cpse	rA3, r1		; floor(-0.0) is -0.0
 	brts	1f
-	rjmp	_U(__fp_szero)
+	XJMP	_U(__fp_szero)
   ; fabs (-1.0 < A < 0.0) --> -1.0
 1:	ldi	rA0,  lo8(FL_M1)
 	ldi	rA1,  hi8(FL_M1)
@@ -66,9 +66,9 @@ ENTRY floor
 	adc	rA0, r1
 	adc	rA1, r1
 	adc	rA2, r1		; rA2 was < 0x80, overflow is impossible
-3:	rjmp	_U(__fp_mintl)
+3:	XJMP	_U(__fp_mintl)
 
-.L_nf:	rjmp	_U(__fp_mpack)	; pass nonfinite arg as is
+.L_nf:	XJMP	_U(__fp_mpack)	; pass nonfinite arg as is
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/fma.S b/avr-libc/libm/fplib/fma.S
index 7bc0321..d440939 100644
--- a/avr-libc/libm/fplib/fma.S
+++ b/avr-libc/libm/fplib/fma.S
@@ -45,12 +45,12 @@
 #define	rC2	r16
 
 ENTRY fma
-	rcall	_U(__mulsf3x)
+	XCALL	_U(__mulsf3x)
 	X_movw	rB0, rC0
 	X_movw	rB2, rC2
 	clr	rBE
-	rcall	_U(__addsf3x)
-	rjmp	_U(__fp_round)
+	XCALL	_U(__addsf3x)
+	XJMP	_U(__fp_round)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/fmod.S b/avr-libc/libm/fplib/fmod.S
index e3ad37f..eca56f0 100644
--- a/avr-libc/libm/fplib/fmod.S
+++ b/avr-libc/libm/fplib/fmod.S
@@ -42,19 +42,19 @@
 
 FUNCTION fmod
 
-0:	rcall	_U(__fp_pscA)
+0:	XCALL	_U(__fp_pscA)
 	brcs	.L_nan		; isnan(A)
 	breq	.L_nan		; isinf(A)
-	rcall	_U(__fp_pscB)
+	XCALL	_U(__fp_pscB)
 	brcc	1f		; isinf(B) -- legal arg: return A
 
-.L_nan:	rjmp	_U(__fp_nan)
-.L_sz:	rjmp	_U(__fp_szero)
+.L_nan:	XJMP	_U(__fp_nan)
+.L_sz:	XJMP	_U(__fp_szero)
 
 ENTRY fmod
   ; split and check exceptions
 	mov	ZL, rA3		; save
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	0b
 	tst	rB3
 	breq	.L_nan		; B == 0
@@ -124,7 +124,7 @@ ENTRY fmod
 	brne	7b
 8:	inc	rA3
 .L_pk:
-	rjmp	_U(__fp_mpack)
+	XJMP	_U(__fp_mpack)
 9:	lsr	rA2
 	ror	rA1
 	ror	rA0
diff --git a/avr-libc/libm/fplib/fp_arccos.S b/avr-libc/libm/fplib/fp_arccos.S
index d46f3d8..ed23016 100644
--- a/avr-libc/libm/fplib/fp_arccos.S
+++ b/avr-libc/libm/fplib/fp_arccos.S
@@ -60,8 +60,8 @@ ENTRY __fp_arccos
 
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powser)
-	rcall	_U(__fp_round)
+	XCALL	_U(__fp_powser)
+	XCALL	_U(__fp_round)
 
 	movw	rB0, rC0
 	movw	rB2, rC2
@@ -73,8 +73,8 @@ ENTRY __fp_arccos
 	ldi	rA1,  hi8(FL_1)
 	ldi	rA2, hlo8(FL_1)
 	ldi	rA3, hhi8(FL_1)
-	rcall	_U(__subsf3)
-	rcall	_U(sqrt)
+	XCALL	_U(__subsf3)
+	XCALL	_U(sqrt)
 
 	movw	rB0, rC0
 	movw	rB2, rC2
@@ -84,7 +84,7 @@ ENTRY __fp_arccos
 	pop	rC1
 	pop	rC2
 	pop	rC3
-	rjmp	_U(__mulsf3x)
+	XJMP	_U(__mulsf3x)
 
 #else	/* to __AVR_HAVE_MOVW__ */
 
@@ -96,8 +96,8 @@ ENTRY __fp_arccos
   ; calculate: C0 + A*(C1 + ...)
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powser)
-	rcall	_U(__fp_round)
+	XCALL	_U(__fp_powser)
+	XCALL	_U(__fp_round)
   ; restore A
 	pop	rB0
 	pop	rB1
@@ -113,14 +113,14 @@ ENTRY __fp_arccos
 	ldi	rA1,  hi8(FL_1)
 	ldi	rA2, hlo8(FL_1)
 	ldi	rA3, hhi8(FL_1)
-	rcall	_U(__subsf3)
-	rcall	_U(sqrt)
+	XCALL	_U(__subsf3)
+	XCALL	_U(sqrt)
   ; multiply
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
-	rjmp	_U(__mulsf3x)
+	XJMP	_U(__mulsf3x)
 
 #endif
 ENDFUNC
diff --git a/avr-libc/libm/fplib/fp_powser.S b/avr-libc/libm/fplib/fp_powser.S
index 433d350..61a7805 100644
--- a/avr-libc/libm/fplib/fp_powser.S
+++ b/avr-libc/libm/fplib/fp_powser.S
@@ -76,7 +76,7 @@ ENTRY __fp_powser
 1:	mov	rcntr, rBE
 
 .Loop:	X_movw	YL, ZL
-	rcall	_U(__mulsf3x)
+	XCALL	_U(__mulsf3x)
 	X_movw	ZL, YL
 
 	clt
@@ -89,7 +89,7 @@ ENTRY __fp_powser
 	brts	1b
 
 	X_movw	YL, ZL
-	rcall	_U(__addsf3x)
+	XCALL	_U(__addsf3x)
 	X_movw	ZL, YL
 
 	X_movw	rB0, rC0
diff --git a/avr-libc/libm/fplib/fp_powsodd.S b/avr-libc/libm/fplib/fp_powsodd.S
index f01fbae..61d575a 100644
--- a/avr-libc/libm/fplib/fp_powsodd.S
+++ b/avr-libc/libm/fplib/fp_powsodd.S
@@ -56,15 +56,15 @@ ENTRY __fp_powsodd
 
 	X_movw	rB0, rA0
 	X_movw	rB2, rA2
-	rcall	_U(__mulsf3)
+	XCALL	_U(__mulsf3)
 
 	pop	ZL
 	pop	ZH
-	rcall	_U(__fp_powser)
+	XCALL	_U(__fp_powser)
 
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
-	rjmp	_U(__mulsf3)
+	XJMP	_U(__mulsf3)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/fp_rempio2.S b/avr-libc/libm/fplib/fp_rempio2.S
index afba808..59c08cf 100644
--- a/avr-libc/libm/fplib/fp_rempio2.S
+++ b/avr-libc/libm/fplib/fp_rempio2.S
@@ -47,11 +47,11 @@
 
 FUNCTION __fp_rempio2
 
-0:	rjmp	_U(__fp_nan)
+0:	XJMP	_U(__fp_nan)
 
 ENTRY __fp_rempio2
   ; split and check finite
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	0b		; only finite numbers are valid
 	clt			; ignore a sign
   ; init division result
@@ -98,7 +98,7 @@ ENTRY __fp_rempio2
 	brpl	4b
 
 5:	sbci	rA3, hhi8((HI40_PIO2<<1) + 0x01000000)	; undo the subi 0x7f
-	rjmp	_U(__fp_mpack_finite)
+	XJMP	_U(__fp_mpack_finite)
 ENDFUNC
 
 #if 0
diff --git a/avr-libc/libm/fplib/fp_sinus.S b/avr-libc/libm/fplib/fp_sinus.S
index d443c4b..29f438a 100644
--- a/avr-libc/libm/fplib/fp_sinus.S
+++ b/avr-libc/libm/fplib/fp_sinus.S
@@ -50,9 +50,9 @@ ENTRY __fp_sinus
 	ldi	rB1,  hi8(HI40_PIO2)
 	ldi	rB2, hlo8(HI40_PIO2)
 	ldi	rB3, hhi8(HI40_PIO2 | 0x80000000)
-	rcall	_U(__addsf3x)
+	XCALL	_U(__addsf3x)
 
-1:	rcall	_U(__fp_round)
+1:	XCALL	_U(__fp_round)
 
 	pop	r0
 	inc	r0
@@ -61,7 +61,7 @@ ENTRY __fp_sinus
 
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rjmp	_U(__fp_powsodd)
+	XJMP	_U(__fp_powsodd)
 ENDFUNC
 	
 	PGM_SECTION
diff --git a/avr-libc/libm/fplib/fp_trunc.S b/avr-libc/libm/fplib/fp_trunc.S
index ab0d67c..1770ef0 100644
--- a/avr-libc/libm/fplib/fp_trunc.S
+++ b/avr-libc/libm/fplib/fp_trunc.S
@@ -57,7 +57,7 @@
  */
 
 ENTRY __fp_trunc
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	9f
   ; A is finite
 	ldi	rAE, 126
diff --git a/avr-libc/libm/fplib/frexp.S b/avr-libc/libm/fplib/frexp.S
index e9c6f59..17f28f3 100644
--- a/avr-libc/libm/fplib/frexp.S
+++ b/avr-libc/libm/fplib/frexp.S
@@ -64,7 +64,7 @@ ENTRY frexp
 	st	Z, r1
 	std	Z+1, r1
 1:
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_nf			; return the same value
 	tst	rA3
 	breq	3f
@@ -72,7 +72,7 @@ ENTRY frexp
 	sbc	rB3, rB3
 
 	sbrs	rA2, 7
-	rcall	_U(__fp_norm2)
+	XCALL	_U(__fp_norm2)
 
 #if  defined(__AVR_XMEGA__) && __AVR_XMEGA__
 	adiw	ZL, 0
@@ -94,7 +94,7 @@ ENTRY frexp
 3:	bld	rA3, 7		; restore sign
 	ret
 .L_nf:
-	rjmp	_U(__fp_mpack)
+	XJMP	_U(__fp_mpack)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/gesf2.S b/avr-libc/libm/fplib/gesf2.S
index 4aa604d..a241732 100644
--- a/avr-libc/libm/fplib/gesf2.S
+++ b/avr-libc/libm/fplib/gesf2.S
@@ -52,7 +52,7 @@
  */
 ENTRY   __gesf2
 ENTRY   __gtsf2
-	rcall	_U(__fp_cmp)
+	XCALL	_U(__fp_cmp)
 	brcc	1f
 	ldi	ret_lo, -1
 1:	ret
diff --git a/avr-libc/libm/fplib/hypot.S b/avr-libc/libm/fplib/hypot.S
index e938c10..534157f 100644
--- a/avr-libc/libm/fplib/hypot.S
+++ b/avr-libc/libm/fplib/hypot.S
@@ -71,25 +71,25 @@
 
 FUNCTION hypot
 
-.L_nf:	rcall	_U(__fp_pscA)
+.L_nf:	XCALL	_U(__fp_pscA)
 	breq	1f		; hypot(Inf, *) --> Inf
-	rcall	_U(__fp_pscB)
+	XCALL	_U(__fp_pscB)
 	breq	1f		; hypot(*, Inf) --> Inf
-	rjmp	_U(__fp_nan)	; NaN and finite, or both NaN
-1:	rjmp	_U(__fp_inf)	; T is 0 after __fp_split3()
+	XJMP	_U(__fp_nan)	; NaN and finite, or both NaN
+1:	XJMP	_U(__fp_inf)	; T is 0 after __fp_split3()
 
 .L_retB:
 	X_movw	rA0, rB0
 	X_movw	rA2, rB2
 .L_retA:
-	rjmp	_U(__fp_mpack)
+	XJMP	_U(__fp_mpack)
 
 ENTRY hypot
   ; clear signs
 	andi	rA3, 0x7f
 	andi	rB3, 0x7f
   ; split and check args
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	.L_nf
 	tst	rA3
 	breq	.L_retB
@@ -170,7 +170,7 @@ ENTRY hypot
 	mov	rBE, rAE
 	movw	rB0, rA0
 	movw	rB2, rA2
-	rcall	_U(__mulsf3_pse)
+	XCALL	_U(__mulsf3_pse)
 	
 	movw	rB0, rC0
 	movw	rB2, rC2
@@ -183,7 +183,7 @@ ENTRY hypot
 	mov	rAE, rBE
 	movw	rA0, rB0
 	movw	rA2, rB2
-	rcall	_U(__mulsf3_pse)
+	XCALL	_U(__mulsf3_pse)
 
 	pop	rBE	
 	movw	rB0, rC0
@@ -206,7 +206,7 @@ ENTRY hypot
 	mov	rB1, rA1
 	mov	rB2, rA2
 	mov	rB3, rA3
-	rcall	_U(__mulsf3_pse)
+	XCALL	_U(__mulsf3_pse)
 	
 	pop	rB0
 	pop	rB1
@@ -225,7 +225,7 @@ ENTRY hypot
 	mov	rA1, rB1
 	mov	rA2, rB2
 	mov	rA3, rB3
-	rcall	_U(__mulsf3_pse)
+	XCALL	_U(__mulsf3_pse)
 	
 	pop	rBE
 	pop	rB0
@@ -234,9 +234,9 @@ ENTRY hypot
 	pop	rB3
 #endif	/* ! __AVR_HAVE_MOVW__	*/
 	
-	rcall	_U(__addsf3x)
-	rcall	_U(__fp_round)
-	rcall	_U(sqrt)
+	XCALL	_U(__addsf3x)
+	XCALL	_U(__fp_round)
+	XCALL	_U(sqrt)
 
   ; restore a scale
 #if (-SCALE_SMALL & SCALE_BIG) == 0
@@ -248,5 +248,5 @@ ENTRY hypot
 	clr	exp_hi
 	sbrc	exp_lo, 7
 	com	exp_hi
-	rjmp	_U(ldexp)
+	XJMP	_U(ldexp)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/inverse.S b/avr-libc/libm/fplib/inverse.S
index 1bd838c..fdcec9b 100644
--- a/avr-libc/libm/fplib/inverse.S
+++ b/avr-libc/libm/fplib/inverse.S
@@ -47,5 +47,5 @@ ENTRY inverse
 	ldi	rA2, hlo8(FL_1)
 	ldi	rA3, hhi8(FL_1)
 
-	rjmp	_U(__divsf3)
+	XJMP	_U(__divsf3)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/isinf.S b/avr-libc/libm/fplib/isinf.S
index cc00b8b..49cc66c 100644
--- a/avr-libc/libm/fplib/isinf.S
+++ b/avr-libc/libm/fplib/isinf.S
@@ -43,7 +43,7 @@
  */
 
 ENTRY isinf
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	ldi	r24, 0
 	ldi	r25, 0
 	brcc	2f			; normal value
diff --git a/avr-libc/libm/fplib/isnan.S b/avr-libc/libm/fplib/isnan.S
index 8652142..97a2c99 100644
--- a/avr-libc/libm/fplib/isnan.S
+++ b/avr-libc/libm/fplib/isnan.S
@@ -41,7 +41,7 @@
  */
 
 ENTRY isnan
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	ldi	r24, 0
 	ldi	r25, 0
 	breq	1f		; Z = 1 for Normal or Inf
diff --git a/avr-libc/libm/fplib/ldexp.S b/avr-libc/libm/fplib/ldexp.S
index f46b019..f788476 100644
--- a/avr-libc/libm/fplib/ldexp.S
+++ b/avr-libc/libm/fplib/ldexp.S
@@ -43,11 +43,11 @@
 
 FUNCTION ldexp
 
-.L_inf:	rjmp	_U(__fp_inf)
-.L_pk:	rjmp	_U(__fp_mpack)
+.L_inf:	XJMP	_U(__fp_inf)
+.L_pk:	XJMP	_U(__fp_mpack)
 
 ENTRY ldexp
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_pk			; as is
 	tst	rA3
 	breq	.L_pk			; ldexp(0,*) is always 0
@@ -110,7 +110,7 @@ ENTRY ldexp
 	sbci	rA3, -1
 	rjmp	.L_pack
 .L_zero:
-	rjmp	_U(__fp_szero)
+	XJMP	_U(__fp_szero)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/log.S b/avr-libc/libm/fplib/log.S
index 0f860ec..a8a71bb 100644
--- a/avr-libc/libm/fplib/log.S
+++ b/avr-libc/libm/fplib/log.S
@@ -50,13 +50,13 @@
 FUNCTION log
 
 .L_nf:	brts	.L_nan		; branch, if -Inf
-	rjmp	_U(__fp_mpack)	; pass as is: NaN --> NaN, +Inf --> +Inf
-.L_nan:	rjmp	_U(__fp_nan)
+	XJMP	_U(__fp_mpack)	; pass as is: NaN --> NaN, +Inf --> +Inf
+.L_nan:	XJMP	_U(__fp_nan)
 .L_min:	set
-	rjmp	_U(__fp_inf)
+	XJMP	_U(__fp_inf)
 
 ENTRY log
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_nf		; !isfinite(A)
 	tst	rA3
 	breq	.L_min		; -Inf
@@ -93,14 +93,14 @@ ENTRY log
 	brlo	4f
 	adiw	rC2, 1
 	andi	rA2, ~0x80
-3:	rcall	_U(__addsf3)
+3:	XCALL	_U(__addsf3)
 	ldi	ZL, lo8(.L_tlow)
 	ldi	ZH, hi8(.L_tlow)
 	rjmp	5f
-4:	rcall	_U(__addsf3)
+4:	XCALL	_U(__addsf3)
 	ldi	ZL, lo8(.L_thigh)
 	ldi	ZH, hi8(.L_thigh)
-5:	rcall	_U(__fp_powser)
+5:	XCALL	_U(__fp_powser)
 
 	X_movw	rC0, rA0
 	X_movw	rA0, rC2	; rA1.rA0 = exponent (possible negative)
@@ -113,12 +113,12 @@ ENTRY log
 	rol	rA1		; C = rA1 sign bit
 	sbc	rA2, rA2
 	sbc	rA3, rA3
-	rcall	_U(__floatsisf)
+	XCALL	_U(__floatsisf)
 	ldi	rB0,  lo8(LN_2)
 	ldi	rB1,  hi8(LN_2)
 	ldi	rB2, hlo8(LN_2)
 	ldi	rB3, hhi8(LN_2)
-	rcall	_U(__mulsf3x)
+	XCALL	_U(__mulsf3x)
 	
 	mov	rBE, rCE
 	X_movw	rB0, rC0
@@ -130,8 +130,8 @@ ENTRY log
 	pop	rC2
 	pop	rC3
 	
-	rcall	_U(__addsf3x)
-	rjmp	_U(__fp_round)
+	XCALL	_U(__addsf3x)
+	XJMP	_U(__fp_round)
 ENDFUNC
 	
 	PGM_SECTION
diff --git a/avr-libc/libm/fplib/log10.S b/avr-libc/libm/fplib/log10.S
index 760e5a4..a1a8b49 100644
--- a/avr-libc/libm/fplib/log10.S
+++ b/avr-libc/libm/fplib/log10.S
@@ -39,10 +39,10 @@
 #define	INV_LN_10	0x3ede5bd9	/* 1.0/log(10.0)	*/
 
 ENTRY log10
-	rcall	_U(log)
+	XCALL	_U(log)
 	ldi	rB0,  lo8(INV_LN_10)
 	ldi	rB1,  hi8(INV_LN_10)
 	ldi	rB2, hlo8(INV_LN_10)
 	ldi	rB3, hhi8(INV_LN_10)
-	rjmp	_U(__mulsf3)
+	XJMP	_U(__mulsf3)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/lrint.S b/avr-libc/libm/fplib/lrint.S
index 63fda01..cedc8c4 100644
--- a/avr-libc/libm/fplib/lrint.S
+++ b/avr-libc/libm/fplib/lrint.S
@@ -51,7 +51,7 @@
  */
 
 ENTRY lrint
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_err
   ; A is finite
 	subi	rA3, 126	; exponent field of 0.5
@@ -128,9 +128,9 @@ ENTRY lrint
 6:	ret
 
 .L_err:	set			; force return 0x80000000
-	rjmp	_U(__fp_szero)
+	XJMP	_U(__fp_szero)
 
-.L_zr:	rjmp	_U(__fp_zero)	; return 0x00000000
+.L_zr:	XJMP	_U(__fp_zero)	; return 0x00000000
 
 ENDFUNC
 
diff --git a/avr-libc/libm/fplib/lround.S b/avr-libc/libm/fplib/lround.S
index 13ccdca..66ffcbe 100644
--- a/avr-libc/libm/fplib/lround.S
+++ b/avr-libc/libm/fplib/lround.S
@@ -53,7 +53,7 @@
  */
 
 ENTRY lround
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_err
   ; A is finite
 	subi	rA3, 126	; exponent field of 0.5
@@ -116,9 +116,9 @@ ENTRY lround
 6:	ret
 
 .L_err:	set			; force return 0x80000000
-	rjmp	_U(__fp_szero)
+	XJMP	_U(__fp_szero)
 
-.L_zr:	rjmp	_U(__fp_zero)	; return 0x00000000
+.L_zr:	XJMP	_U(__fp_zero)	; return 0x00000000
 
 ENDFUNC
 
diff --git a/avr-libc/libm/fplib/modf.S b/avr-libc/libm/fplib/modf.S
index 1b33eff..f2514de 100644
--- a/avr-libc/libm/fplib/modf.S
+++ b/avr-libc/libm/fplib/modf.S
@@ -87,7 +87,7 @@ ENTRY modff
   ; write B
 	rcall	.L_write
   ; return nonzero fraction:  A - B
-	rjmp	_U(__subsf3)
+	XJMP	_U(__subsf3)
   ; exponent too big:  compare with smallest NaN (0x7f800001)
 4:	cpi	rA0, 1
 	cpc	rA1, r1
diff --git a/avr-libc/libm/fplib/mulsf3.S b/avr-libc/libm/fplib/mulsf3.S
index e0eebff..8a5a52c 100644
--- a/avr-libc/libm/fplib/mulsf3.S
+++ b/avr-libc/libm/fplib/mulsf3.S
@@ -33,6 +33,6 @@
 #include "asmdef.h"
 
 ENTRY   __mulsf3
-	rcall	_U(__mulsf3x)
-	rjmp	_U(__fp_round)
+	XCALL	_U(__mulsf3x)
+	XJMP	_U(__fp_round)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/mulsf3x.S b/avr-libc/libm/fplib/mulsf3x.S
index bf75e83..34602f7 100644
--- a/avr-libc/libm/fplib/mulsf3x.S
+++ b/avr-libc/libm/fplib/mulsf3x.S
@@ -41,19 +41,19 @@ FUNCTION __mulsf3x
 
 #if	defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
 
-0:	rcall	_U(__fp_pscA)
+0:	XCALL	_U(__fp_pscA)
 	brcs	1f
-	rcall	_U(__fp_pscB)
+	XCALL	_U(__fp_pscB)
 	brcs	1f
 	and	rA3, rB3		; one of args is 0xff
 	breq	1f
-	rjmp	_U(__fp_inf)		; nonzero * Inf --> Inf
-1:	rjmp	_U(__fp_nan)		; 0 * Inf --> NaN
+	XJMP	_U(__fp_inf)		; nonzero * Inf --> Inf
+1:	XJMP	_U(__fp_nan)		; 0 * Inf --> NaN
 2:	clr	r1			; after 'mul rA3,rB3'
-	rjmp	_U(__fp_szero)
+	XJMP	_U(__fp_szero)
 
 ENTRY   __mulsf3x
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	0b
 
 ENTRY   __mulsf3_pse			; post split entry
@@ -122,18 +122,18 @@ ENTRY   __mulsf3_pse			; post split entry
 
 #else	/* to __AVR_ENHANCED__	*/
 
-0:	rcall	_U(__fp_pscA)
+0:	XCALL	_U(__fp_pscA)
 	brcs	1f
-	rcall	_U(__fp_pscB)
+	XCALL	_U(__fp_pscB)
 	brcs	1f
 	and	rA3, rB3		; one of args is 0xff
 	breq	1f
-	rjmp	_U(__fp_inf)		; nonzero * Inf --> Inf
-1:	rjmp	_U(__fp_nan)		; 0 * Inf --> NaN
-2:	rjmp	_U(__fp_szero)
+	XJMP	_U(__fp_inf)		; nonzero * Inf --> Inf
+1:	XJMP	_U(__fp_nan)		; 0 * Inf --> NaN
+2:	XJMP	_U(__fp_szero)
 
 ENTRY   __mulsf3x
-	rcall	_U(__fp_split3)
+	XCALL	_U(__fp_split3)
 	brcs	0b
 
 ENTRY   __mulsf3_pse			; post split entry
@@ -228,9 +228,9 @@ ENTRY   __mulsf3_pse			; post split entry
 11:	cpi	rA3, 254
 	cpc	rB3, r1
 	brlo	15f
-	rjmp	_U(__fp_inf)
+	XJMP	_U(__fp_inf)
   ; check lowest value of exponent to avoid long operation
-12:	rjmp	_U(__fp_szero)
+12:	XJMP	_U(__fp_szero)
 13:	cpi	rB3, hi8(-24)		; here rB3 < 0
 	brlt	12b
 	cpi	rA3, lo8(-24)
diff --git a/avr-libc/libm/fplib/pow.S b/avr-libc/libm/fplib/pow.S
index efc4f1a..dc2ed71 100644
--- a/avr-libc/libm/fplib/pow.S
+++ b/avr-libc/libm/fplib/pow.S
@@ -190,7 +190,7 @@ ENTRY pow
 .L_noint:
 	brts	.L_pow
 .L_nan:
-	rjmp	_U(__fp_nan)
+	XJMP	_U(__fp_nan)
 .L_one:
 	ldi	rA0,  lo8(FL_1)
 	ldi	rA1,  hi8(FL_1)
@@ -206,13 +206,13 @@ ENTRY pow
 	push	rB2
 	push	rB1
 	push	rB0
-	rcall	_U(log)
+	XCALL	_U(log)
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
-	rcall	_U(__mulsf3)
-	rjmp	_U(exp)
+	XCALL	_U(__mulsf3)
+	XJMP	_U(exp)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/round.S b/avr-libc/libm/fplib/round.S
index bc0b814..ed2661c 100644
--- a/avr-libc/libm/fplib/round.S
+++ b/avr-libc/libm/fplib/round.S
@@ -49,7 +49,7 @@
    This is a balance between space and speed.
  */
 ENTRY round
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_nf
   ; A is finite
 	cpi	rA3, 126	; exponent field of 0.5
@@ -86,10 +86,10 @@ ENTRY round
 	ror	rA0
 	inc	rA3
   ; merge
-4:	rjmp	_U(__fp_mintl)
+4:	XJMP	_U(__fp_mintl)
 
-.L_nf:	rjmp	_U(__fp_mpack)	; pass nonfinite arg "as is"
-.L_zr:	rjmp	_U(__fp_szero)	; return +0.0/-0.0
+.L_nf:	XJMP	_U(__fp_mpack)	; pass nonfinite arg "as is"
+.L_zr:	XJMP	_U(__fp_szero)	; return +0.0/-0.0
 
 ENDFUNC
 
diff --git a/avr-libc/libm/fplib/sin.S b/avr-libc/libm/fplib/sin.S
index d9f044e..aaa106c 100644
--- a/avr-libc/libm/fplib/sin.S
+++ b/avr-libc/libm/fplib/sin.S
@@ -40,11 +40,11 @@
 
 ENTRY sin
 	push	rA3
-	rcall	_U(__fp_rempio2)
+	XCALL	_U(__fp_rempio2)
 	pop	r0
 	sbrc	r0, 7
 	subi	ZL, -2
-	rjmp	_U(__fp_sinus)
+	XJMP	_U(__fp_sinus)
 ENDFUNC
 
 #endif /* !defined(__AVR_TINY__) */
diff --git a/avr-libc/libm/fplib/sinh.S b/avr-libc/libm/fplib/sinh.S
index 1d0a5a5..deae895 100644
--- a/avr-libc/libm/fplib/sinh.S
+++ b/avr-libc/libm/fplib/sinh.S
@@ -59,15 +59,15 @@ ENTRY sinh
   ; for small x
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powsodd)
+	XCALL	_U(__fp_powsodd)
 	rjmp	2f
   ; exp(-fabs(x))	// negative to exclude an extra inversion
 1:	ori	rA3, 0x80
-	rcall	_U(exp)
+	XCALL	_U(exp)
   ; exp(-fabs(x)) / 2
 	ldi	exp_lo, lo8(-1)
 	ldi	exp_hi, hi8(-1)
-	rcall	_U(ldexp)
+	XCALL	_U(ldexp)
   ; save
 	push	rA3
 	push	rA2
@@ -76,14 +76,14 @@ ENTRY sinh
   ; exp(fabs(x)) / 2
 	ldi	exp_lo, lo8(2)
 	ldi	exp_hi, hi8(2)
-	rcall	_U(ldexp)
-	rcall	_U(inverse)
+	XCALL	_U(ldexp)
+	XCALL	_U(inverse)
   ; result (in absolute value)
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
-	rcall	_U(__subsf3)
+	XCALL	_U(__subsf3)
   ; set sign
 2:	pop	r0
 	sbrc	r0, 7
diff --git a/avr-libc/libm/fplib/sqrt.S b/avr-libc/libm/fplib/sqrt.S
index 1506d95..64b4e0f 100644
--- a/avr-libc/libm/fplib/sqrt.S
+++ b/avr-libc/libm/fplib/sqrt.S
@@ -42,13 +42,13 @@ FUNCTION sqrt
 
 .L_nf:	brne	.L_pk		; NaN, return as is
 	brtc	.L_pk		; sqrt(+Inf) --> +Inf
-.L_nan:	rjmp	_U(__fp_nan)
-.L_pk:	rjmp	_U(__fp_mpack)
+.L_nan:	XJMP	_U(__fp_nan)
+.L_pk:	XJMP	_U(__fp_mpack)
 
 ENTRY sqrt
 ALIAS_ENTRY sqrtf
   ; split and check arg.
-	rcall	_U(__fp_splitA)
+	XCALL	_U(__fp_splitA)
 	brcs	.L_nf		; !isfinite(A)
 	tst	rA3
 	breq	.L_pk		; return 0 with original sign
@@ -58,7 +58,7 @@ ALIAS_ENTRY sqrtf
 	sbc	rB3, rB3	; exponent high byte
   ; normalize, if A is subnormal
 	sbrs	rA2, 7
-	rcall	_U(__fp_norm2)
+	XCALL	_U(__fp_norm2)
 
 #define	msk0	r0
 #define msk1	r1
diff --git a/avr-libc/libm/fplib/square.S b/avr-libc/libm/fplib/square.S
index 9283702..7dea5df 100644
--- a/avr-libc/libm/fplib/square.S
+++ b/avr-libc/libm/fplib/square.S
@@ -40,5 +40,5 @@ ENTRY square
 	X_movw	rB0, rA0
 	X_movw	rB2, rA2	; B = A
 
-	rjmp	_U(__mulsf3)	; A * B
+	XJMP	_U(__mulsf3)	; A * B
 ENDFUNC
diff --git a/avr-libc/libm/fplib/tan.S b/avr-libc/libm/fplib/tan.S
index 9e16271..2161bdb 100644
--- a/avr-libc/libm/fplib/tan.S
+++ b/avr-libc/libm/fplib/tan.S
@@ -55,7 +55,7 @@ ENTRY tan
 	push	rsign
 	mov	rsign, rA3
   ; fmod by Pi/2
-	rcall	_U(__fp_rempio2)
+	XCALL	_U(__fp_rempio2)
   ; save perion number
 	lsr	ZL
 	ror	rsign
@@ -81,16 +81,16 @@ ENTRY tan
 	ldi	rBE, LO40_PIO2
 	ldi	rB2, hlo8(HI40_PIO2)
 	ori	rA3, 0x80
-	rcall	_U(__addsf3x)
-	rcall	_U(__fp_round)
+	XCALL	_U(__addsf3x)
+	XCALL	_U(__fp_round)
   ; calculate tan(A) for  0 <= A <= Pi/4
 1:	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powsodd)
+	XCALL	_U(__fp_powsodd)
   ; correct result
 	lsl	rsign
 	brvs	2f
-	rcall	_U(inverse)
+	XCALL	_U(inverse)
 2:	lsl	rsign
 	brvc	3f
 	subi	rA3, 0x80
diff --git a/avr-libc/libm/fplib/tanh.S b/avr-libc/libm/fplib/tanh.S
index ba89912..37ab6f3 100644
--- a/avr-libc/libm/fplib/tanh.S
+++ b/avr-libc/libm/fplib/tanh.S
@@ -63,14 +63,14 @@ ENTRY tanh
   ; for small x
 	ldi	ZL, lo8(.L_table)
 	ldi	ZH, hi8(.L_table)
-	rcall	_U(__fp_powsodd)
+	XCALL	_U(__fp_powsodd)
 	rjmp	2f
   ; exp(-2*fabs(x))
 1:	ori	rA3, 0x80
 	ldi	exp_lo, lo8(1)
 	ldi	exp_hi, hi8(1)
-	rcall	_U(ldexp)	; possible overflow -- no matter
-	rcall	_U(exp)
+	XCALL	_U(ldexp)	; possible overflow -- no matter
+	XCALL	_U(exp)
   ; save result and calculate 1 + exp(-2*fabs(x))
 	push	rA3
 	push	rA2
@@ -80,7 +80,7 @@ ENTRY tanh
 	ldi	rB1,  hi8(FL_P1)
 	ldi	rB2, hlo8(FL_P1)
 	ldi	rB3, hhi8(FL_P1)
-	rcall	_U(__addsf3)
+	XCALL	_U(__addsf3)
   ; save/restore and calculate 1 - exp(-2*fabs(x))
 	pop	rB0
 	pop	rB1
@@ -94,14 +94,14 @@ ENTRY tanh
 	ldi	rA1,  hi8(FL_P1)
 	ldi	rA2, hlo8(FL_P1)
 	ldi	rA3, hhi8(FL_P1)
-	rcall	_U(__subsf3)
+	XCALL	_U(__subsf3)
   ; restore
 	pop	rB0
 	pop	rB1
 	pop	rB2
 	pop	rB3
   ; divide
-	rcall	_U(__divsf3)
+	XCALL	_U(__divsf3)
   ; sign
 2:	pop	r0
 	sbrc	r0, 7
diff --git a/avr-libc/libm/fplib/trunc.S b/avr-libc/libm/fplib/trunc.S
index 57f5711..0ecc3b3 100644
--- a/avr-libc/libm/fplib/trunc.S
+++ b/avr-libc/libm/fplib/trunc.S
@@ -42,11 +42,11 @@
  */
 
 ENTRY trunc
-	rcall	_U(__fp_trunc)
+	XCALL	_U(__fp_trunc)
 	brcs	2f		; pass nonfinite arg as is
 	cpi	rA3, 127
 	brsh	1f		; fabs(A) >= 1.0
-	rjmp	_U(__fp_szero)
-1:	rjmp	_U(__fp_mintl)
-2:	rjmp	_U(__fp_mpack)
+	XJMP	_U(__fp_szero)
+1:	XJMP	_U(__fp_mintl)
+2:	XJMP	_U(__fp_mpack)
 ENDFUNC
diff --git a/avr-libc/libm/fplib/unordsf2.S b/avr-libc/libm/fplib/unordsf2.S
index 42ce7a9..354b06a 100644
--- a/avr-libc/libm/fplib/unordsf2.S
+++ b/avr-libc/libm/fplib/unordsf2.S
@@ -39,7 +39,7 @@
 #include "asmdef.h"
 
 ENTRY   __unordsf2
-	rcall	_U(__fp_cmp)	; return C=1, if any of args is NaN
+	XCALL	_U(__fp_cmp)	; return C=1, if any of args is NaN
 	sbc	r24, r24
 	sbc	r25, r25
 	ret
