2014-03-21 Sabrina Ni <sabrinanitw@gmail.com>

* libc/machine/nds32/setjmp.S: Keep jmp_buff sync with GDB.
This commit is contained in:
Jeff Johnston 2014-03-21 20:28:57 +00:00
parent 488d885bf3
commit c18decccef
2 changed files with 17 additions and 11 deletions

View File

@ -1,3 +1,7 @@
2014-03-21 Sabrina Ni <sabrinanitw@gmail.com>
* libc/machine/nds32/setjmp.S: Keep jmp_buff sync with GDB.
2014-03-21 Sabrina Ni <sabrinanitw@gmail.com>
* libc/machine/nds32/setjmp.S: Optimize.

View File

@ -40,7 +40,9 @@ The usage of thirty-two 32-bit General Purpose Registers (GPR):
reserved for assembler : $r15
reserved for other use : $r24, $r25, $r26, $r27
Save all callee-save registers and $fp, $gp, $lp and $sp.
Save all callee-save registers and $fp, $gp, $lp and $sp is enough in theory.
For debugging issue, the layout of jum_buf in here should be in sync with GDB.
The $r16 ~ $r19 are used to store D0/D1, keep them for backward-compatible.
*/
/* int setjmp(jmp_buf env); */
@ -50,13 +52,12 @@ Save all callee-save registers and $fp, $gp, $lp and $sp.
.type setjmp, @function
setjmp:
#ifdef __NDS32_REDUCED_REGS__
/* This case, save 10 words. */
smw.bim $r6, [$r0], $r10, 0x0
smw.bim $r31, [$r0], $r31, 0xf
smw.bim $r6, [$r0], $r10, #0b0000
addi $r0, $r0, #32 /* Leave room to keep jum_buf all the same. */
smw.bim $r31, [$r0], $r31, #0b1111
#else
/* This case, save 17 words. */
smw.bim $r6, [$r0], $r14, 0x0
smw.bim $r16, [$r0], $r19, 0xf
smw.bim $r6, [$r0], $r14, #0b0000
smw.bim $r16, [$r0], $r19, #0b1111
#endif
/* Set return value to zero. */
@ -72,11 +73,12 @@ setjmp:
.type longjmp, @function
longjmp:
#ifdef __NDS32_REDUCED_REGS__
lmw.bim $r6, [$r0], $r10, 0x0
lmw.bim $r31, [$r0], $r31, 0xf
lmw.bim $r6, [$r0], $r10, #0b0000
addi $r0, $r0, #32
lmw.bim $r31, [$r0], $r31, #0b1111
#else
lmw.bim $r6, [$r0], $r14, 0x0
lmw.bim $r16, [$r0], $r19, 0xf
lmw.bim $r6, [$r0], $r14, #0b0000
lmw.bim $r16, [$r0], $r19, #0b1111
#endif
/* Set val as return value. If the value val is 0, 1 will be returned
instead. */