Skip to content

Commit

Permalink
arm/setjmp: align to 4, change 2 instructions to 16-bit
Browse files Browse the repository at this point in the history
Align .text to 4 bytes instead of 2, change ldr/str to ldm/stm
to save 2 bytes in Thumb mode.

JIRA: RTOS-780
  • Loading branch information
lukileczo committed Feb 14, 2024
1 parent 30d718d commit a86e766
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 34 deletions.
30 changes: 13 additions & 17 deletions arch/armv7a/jmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,28 @@
* %LICENSE%
*/

/* setjmp env buffer description
* Offset Description
* 0 Signal mask flag - if != 0 then next value stores a signal mask
* 4 Signal mask
* 8 SP register
* 12-43 r4-r11 registers
* 44 LR register
* 48-79 d8-d15 registers
* 80 fpscr register
*/
/* setjmp env buffer description
* Offset Description
* 0 Signal mask flag - if != 0 then next value stores a signal mask
* 4 Signal mask
* 8 SP register
* 12-43 r4-r11 registers
* 44 LR register
* 48-103 d8-d15 registers
* 104 fpscr register
*/

#define __ASSEMBLY__

.thumb
.syntax unified

.text
.align 2
.align 4


.globl sigsetjmp
.type sigsetjmp, %function
.align 2
sigsetjmp:
/* Store signal mask if savesigs != 0 */
movs r2, #0
Expand All @@ -60,7 +59,7 @@ sigsetjmp:
/* Store fpu registers */
vstm r0!, {d8-d15}
vmrs r2, fpscr
str r2, [r0], #4
stm r0!, {r2}
#endif

movs r0, #0
Expand All @@ -70,7 +69,6 @@ sigsetjmp:

.globl _setjmp
.type _setjmp, %function
.align 2
_setjmp:
movs r1, #0
b sigsetjmp
Expand All @@ -79,7 +77,6 @@ _setjmp:

.globl setjmp
.type setjmp, %function
.align 2
setjmp:
movs r1, #1
b sigsetjmp
Expand All @@ -88,7 +85,6 @@ setjmp:

.globl _longjmp
.type _longjmp, %function
.align 2
_longjmp:
/* Check for signal mask in env buffer, if it's saved restore it */
ldmia r0!, {r2-r3}
Expand All @@ -109,7 +105,7 @@ _longjmp:
#ifndef __SOFTFP__
/* Restore fpu registers */
vldm r0!, {d8-d15}
ldr r2, [r0], #4
ldm r0!, {r2}
vmsr fpscr, r2
#endif

Expand Down
30 changes: 13 additions & 17 deletions arch/armv7m/jmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,28 @@
* %LICENSE%
*/

/* setjmp env buffer description
* Offset Description
* 0 Signal mask flag - if != 0 then next value stores a signal mask
* 4 Signal mask
* 8 SP register
* 12-43 r4-r11 registers
* 44 LR register
* 48-79 d8-d15 registers
* 80 fpscr register
*/
/* setjmp env buffer description
* Offset Description
* 0 Signal mask flag - if != 0 then next value stores a signal mask
* 4 Signal mask
* 8 SP register
* 12-43 r4-r11 registers
* 44 LR register
* 48-103 d8-d15 registers
* 104 fpscr register
*/

#define __ASSEMBLY__

.thumb
.syntax unified

.text
.align 2
.align 4


.globl sigsetjmp
.type sigsetjmp, %function
.align 2
sigsetjmp:
/* Store signal mask if savesigs != 0 */
movs r2, #0
Expand All @@ -60,7 +59,7 @@ sigsetjmp:
/* Store fpu registers */
vstm r0!, {d8-d15}
vmrs r2, fpscr
str r2, [r0], #4
stm r0!, {r2}
#endif

movs r0, #0
Expand All @@ -70,7 +69,6 @@ sigsetjmp:

.globl _setjmp
.type _setjmp, %function
.align 2
_setjmp:
movs r1, #0
b sigsetjmp
Expand All @@ -79,7 +77,6 @@ _setjmp:

.globl setjmp
.type setjmp, %function
.align 2
setjmp:
movs r1, #1
b sigsetjmp
Expand All @@ -88,7 +85,6 @@ setjmp:

.globl _longjmp
.type _longjmp, %function
.align 2
_longjmp:
/* Check for signal mask in env buffer, if it's saved restore it */
ldmia r0!, {r2-r3}
Expand All @@ -109,7 +105,7 @@ _longjmp:
#ifndef __SOFTFP__
/* Restore fpu registers */
vldm r0!, {d8-d15}
ldr r2, [r0], #4
ldm r0!, {r2}
vmsr fpscr, r2
#endif

Expand Down

0 comments on commit a86e766

Please sign in to comment.