libgcc enhancement for v850

Vladimir Vishniakov volodia@hex-rays.com
Tue Jan 6 08:31:42 GMT 2026


Hi Jeffrey,

this is the patch that allows to reduce the size of libgcc for v850 by 
18 bytes! :)

-- 
With best regards,
Volodia.
-------------- next part --------------
commit 4bd6e118a208b932357e9e5e6b40c463d7a17c40
Author: Vladimir Vishniakov <volodia@hex-rays.com>
Date:   Tue Jan 6 11:24:53 2026 +0300

    v850: reduced the size of some functions;
    
    `add imm, sp` takes 2 bytes while `addi imm, sp, sp` takes 4 bytes
    (providing `imm >= -16 && imm < 15`);

diff --git a/libgcc/config/v850/lib1funcs.S b/libgcc/config/v850/lib1funcs.S
index 61078181b9ac..4ac54ae8f557 100644
--- a/libgcc/config/v850/lib1funcs.S
+++ b/libgcc/config/v850/lib1funcs.S
@@ -1460,7 +1460,7 @@ __return_r26_r31:
 __save_r27_r31:
 #ifdef __EP__
 	mov	ep,r1
-	addi	-16,sp,sp
+	add	-16,sp
 	mov	sp,ep
 	sst.w	r29,0[ep]
 	sst.w	r28,4[ep]
@@ -1468,7 +1468,7 @@ __save_r27_r31:
 	sst.w	r31,12[ep]
 	mov	r1,ep
 #else
-	addi	-16,sp,sp
+	add	-16,sp
 	st.w	r29,0[sp]
 	st.w	r28,4[sp]
 	st.w	r27,8[sp]
@@ -1512,7 +1512,7 @@ __return_r27_r31:
 	/* Also allocate space for the argument save area.  */
 	/* Called via:	jalr __save_r28_r31,r10.  */
 __save_r28_r31:
-	addi	-12,sp,sp
+	add	-12,sp
 	st.w	r29,0[sp]
 	st.w	r28,4[sp]
 	st.w	r31,8[sp]
@@ -1528,7 +1528,7 @@ __return_r28_r31:
 	ld.w	0[sp],r29
 	ld.w	4[sp],r28
 	ld.w	8[sp],r31
-	addi	12,sp,sp
+	add	12,sp
 	jmp	[r31]
 	.size	__return_r28_r31,.-__return_r28_r31
 #endif /* L_save_28c */
@@ -1542,7 +1542,7 @@ __return_r28_r31:
 	/* Also allocate space for the argument save area.  */
 	/* Called via:	jalr __save_r29_r31,r10.  */
 __save_r29_r31:
-	addi	-8,sp,sp
+	add	-8,sp
 	st.w	r29,0[sp]
 	st.w	r31,4[sp]
 	jmp	[r10]
@@ -1556,7 +1556,7 @@ __save_r29_r31:
 __return_r29_r31:
 	ld.w	0[sp],r29
 	ld.w	4[sp],r31
-	addi	8,sp,sp
+	add	8,sp
 	jmp	[r31]
 	.size	__return_r29_r31,.-__return_r29_r31
 #endif /* L_save_29c */
@@ -1570,7 +1570,7 @@ __return_r29_r31:
 	/* Also allocate space for the argument save area.  */
 	/* Called via:	jalr __save_r31,r10.  */
 __save_r31:
-	addi	-4,sp,sp
+	add	-4,sp
 	st.w	r31,0[sp]
 	jmp	[r10]
 	.size	__save_r31,.-__save_r31
@@ -1582,7 +1582,7 @@ __save_r31:
 	.type	__return_r31,@function
 __return_r31:
 	ld.w	0[sp],r31
-	addi	4,sp,sp
+	add	4,sp
 	jmp	[r31]
         .size   __return_r31,.-__return_r31
 #endif /* L_save_31c */
@@ -1820,7 +1820,7 @@ __callt_return_r2_r29:	.short ctoff(.L_return_r2_r29)
 .L_return_r2_r31:
 	dispose 0, {r20 - r29, r31}
 	ld.w    0[sp], r2
-	addi	4, sp, sp
+	add	4, sp
 	jmp     [r31]
 
 	/* Place the offsets of the start of these routines into the call table.  */


More information about the Gcc-patches mailing list