[RFC PATCH v1] arm: lib: add __gnu_thumb1_case_si

The assembly for __gnu_thumb1_case_si was taken from upstream gcc and adapted as width suffix was removed for the add instruction [1].
Signed-off-by: Francis Laniel francis.laniel@amarulasolutions.com Tested-by: Tony Dinh mibodhi@gmail.com [1] https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1... --- arch/arm/lib/lib1funcs.S | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index 7ff4446dd6..79cedc0aad 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S @@ -424,4 +424,21 @@ ENTRY(__gnu_thumb1_case_uhi) ret lr ENDPROC(__gnu_thumb1_case_uhi) .popsection + +/* Taken and adapted from: https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1... */ +.pushsection .text.__gnu_thumb1_case_si, "ax" +ENTRY(__gnu_thumb1_case_si) + push {r0, r1} + mov r1, lr + adds r1, r1, #2 /* Align to word. */ + lsrs r1, r1, #2 + lsls r0, r0, #2 + lsls r1, r1, #2 + ldr r0, [r1, r0] + adds r0, r0, r1 + mov lr, r0 + pop {r0, r1} + mov pc, lr /* We know we were called from thumb code. */ +ENDPROC(__gnu_thumb1_case_si) +.popsection #endif -- 2.34.1

Hi Francis,
On Sat, Apr 1, 2023 at 2:55 PM Francis Laniel francis.laniel@amarulasolutions.com wrote:
The assembly for __gnu_thumb1_case_si was taken from upstream gcc and adapted as width suffix was removed for the add instruction [1].
Signed-off-by: Francis Laniel francis.laniel@amarulasolutions.com Tested-by: Tony Dinh mibodhi@gmail.com [1] https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1...
Thanks for the patch! I've added Tom, Pali, and Stefan.
I think we need to do some more testing for other boards that have CONFIG_HAS_THUMB2 and CONFIG_SPL_SYS_THUMB_BUILD. My test target (Marvell Armada 385 SoC) is somewhat broken right now. So it will take some time for me to get that back running to run this test.
All the best, Tony
arch/arm/lib/lib1funcs.S | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index 7ff4446dd6..79cedc0aad 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S @@ -424,4 +424,21 @@ ENTRY(__gnu_thumb1_case_uhi) ret lr ENDPROC(__gnu_thumb1_case_uhi) .popsection
+/* Taken and adapted from: https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1... */ +.pushsection .text.__gnu_thumb1_case_si, "ax" +ENTRY(__gnu_thumb1_case_si)
push {r0, r1}
mov r1, lr
adds r1, r1, #2 /* Align to word. */
lsrs r1, r1, #2
lsls r0, r0, #2
lsls r1, r1, #2
ldr r0, [r1, r0]
adds r0, r0, r1
mov lr, r0
pop {r0, r1}
mov pc, lr /* We know we were called from thumb code. */
+ENDPROC(__gnu_thumb1_case_si) +.popsection
#endif
2.34.1

On Saturday 01 April 2023 15:17:59 Tony Dinh wrote:
Hi Francis,
On Sat, Apr 1, 2023 at 2:55 PM Francis Laniel francis.laniel@amarulasolutions.com wrote:
The assembly for __gnu_thumb1_case_si was taken from upstream gcc and adapted as width suffix was removed for the add instruction [1].
Signed-off-by: Francis Laniel francis.laniel@amarulasolutions.com Tested-by: Tony Dinh mibodhi@gmail.com [1] https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1...
Thanks for the patch! I've added Tom, Pali, and Stefan.
Looks good,
Acked-by: Pali Rohár pali@kernel.org
I think we need to do some more testing for other boards that have CONFIG_HAS_THUMB2 and CONFIG_SPL_SYS_THUMB_BUILD. My test target (Marvell Armada 385 SoC) is somewhat broken right now. So it will take some time for me to get that back running to run this test.
All the best, Tony
arch/arm/lib/lib1funcs.S | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index 7ff4446dd6..79cedc0aad 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S @@ -424,4 +424,21 @@ ENTRY(__gnu_thumb1_case_uhi) ret lr ENDPROC(__gnu_thumb1_case_uhi) .popsection
+/* Taken and adapted from: https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1... */ +.pushsection .text.__gnu_thumb1_case_si, "ax" +ENTRY(__gnu_thumb1_case_si)
push {r0, r1}
mov r1, lr
adds r1, r1, #2 /* Align to word. */
lsrs r1, r1, #2
lsls r0, r0, #2
lsls r1, r1, #2
ldr r0, [r1, r0]
adds r0, r0, r1
mov lr, r0
pop {r0, r1}
mov pc, lr /* We know we were called from thumb code. */
+ENDPROC(__gnu_thumb1_case_si) +.popsection
#endif
2.34.1

Hi Francis,
On Sun, Apr 2, 2023 at 3:17 AM Pali Rohár pali@kernel.org wrote:
On Saturday 01 April 2023 15:17:59 Tony Dinh wrote:
Hi Francis,
On Sat, Apr 1, 2023 at 2:55 PM Francis Laniel francis.laniel@amarulasolutions.com wrote:
The assembly for __gnu_thumb1_case_si was taken from upstream gcc and adapted as width suffix was removed for the add instruction [1].
Signed-off-by: Francis Laniel francis.laniel@amarulasolutions.com Tested-by: Tony Dinh mibodhi@gmail.com [1] https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1...
Thanks for the patch! I've added Tom, Pali, and Stefan.
Looks good,
Acked-by: Pali Rohár pali@kernel.org
I think we need to do some more testing for other boards that have CONFIG_HAS_THUMB2 and CONFIG_SPL_SYS_THUMB_BUILD. My test target (Marvell Armada 385 SoC) is somewhat broken right now. So it will take some time for me to get that back running to run this test.
I've done some more testing with other boards. I'm seeing some problems with LTO in gcc-12, but it is not related to this patch.
Acked-by: Tony Dinh mibodhi@gmail.com
Thanks, Tony
All the best, Tony
arch/arm/lib/lib1funcs.S | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index 7ff4446dd6..79cedc0aad 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S @@ -424,4 +424,21 @@ ENTRY(__gnu_thumb1_case_uhi) ret lr ENDPROC(__gnu_thumb1_case_uhi) .popsection
+/* Taken and adapted from: https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1... */ +.pushsection .text.__gnu_thumb1_case_si, "ax" +ENTRY(__gnu_thumb1_case_si)
push {r0, r1}
mov r1, lr
adds r1, r1, #2 /* Align to word. */
lsrs r1, r1, #2
lsls r0, r0, #2
lsls r1, r1, #2
ldr r0, [r1, r0]
adds r0, r0, r1
mov lr, r0
pop {r0, r1}
mov pc, lr /* We know we were called from thumb code. */
+ENDPROC(__gnu_thumb1_case_si) +.popsection
#endif
2.34.1

On Sat, Apr 01, 2023 at 10:54:39PM +0100, Francis Laniel wrote:
The assembly for __gnu_thumb1_case_si was taken from upstream gcc and adapted as width suffix was removed for the add instruction [1].
Signed-off-by: Francis Laniel francis.laniel@amarulasolutions.com Tested-by: Tony Dinh mibodhi@gmail.com [1] https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be9018f1... Acked-by: Pali Rohár pali@kernel.org Acked-by: Tony Dinh mibodhi@gmail.com
Applied to u-boot/master, thanks!

Le vendredi 7 avril 2023, 15:51:09 WEST Tom Rini a écrit :
On Sat, Apr 01, 2023 at 10:54:39PM +0100, Francis Laniel wrote:
The assembly for __gnu_thumb1_case_si was taken from upstream gcc and adapted as width suffix was removed for the add instruction [1].
Signed-off-by: Francis Laniel francis.laniel@amarulasolutions.com Tested-by: Tony Dinh mibodhi@gmail.com [1] https://github.com/gcc-mirror/gcc/blob/4f181f9c7ee3efc509d185fdfda33be901 8f1611/libgcc/config/arm/lib1funcs.S#L2156 Acked-by: Pali Rohár pali@kernel.org Acked-by: Tony Dinh mibodhi@gmail.com
Applied to u-boot/master, thanks!
Thank you for the merge!
participants (4)
-
Francis Laniel
-
Pali Rohár
-
Tom Rini
-
Tony Dinh