Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

setjmp.S 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
  2. .text
  3. /* Must match jmp_buf structure layout */
  4. .struct 0
  5. env_x19_x20: .quad 0, 0
  6. env_x21_x22: .quad 0, 0
  7. env_x23_x24: .quad 0, 0
  8. env_x25_x26: .quad 0, 0
  9. env_x27_x28: .quad 0, 0
  10. env_x29_x30: .quad 0, 0
  11. env_sp: .quad 0
  12. .previous
  13. /*
  14. * Save stack context for non-local goto
  15. */
  16. .globl setjmp
  17. .type setjmp, %function
  18. setjmp:
  19. /* Store registers */
  20. stp x19, x20, [x0, #env_x19_x20]
  21. stp x21, x22, [x0, #env_x21_x22]
  22. stp x23, x24, [x0, #env_x23_x24]
  23. stp x25, x26, [x0, #env_x25_x26]
  24. stp x27, x28, [x0, #env_x27_x28]
  25. stp x29, x30, [x0, #env_x29_x30]
  26. mov x16, sp
  27. str x16, [x0, #env_sp]
  28. /* Return 0 when returning as setjmp() */
  29. mov x0, #0
  30. ret
  31. .size setjmp, . - setjmp
  32. /*
  33. * Non-local jump to a saved stack context
  34. */
  35. .globl longjmp
  36. .type longjmp, %function
  37. longjmp:
  38. /* Restore registers */
  39. ldp x19, x20, [x0, #env_x19_x20]
  40. ldp x21, x22, [x0, #env_x21_x22]
  41. ldp x23, x24, [x0, #env_x23_x24]
  42. ldp x25, x26, [x0, #env_x25_x26]
  43. ldp x27, x28, [x0, #env_x27_x28]
  44. ldp x29, x30, [x0, #env_x29_x30]
  45. ldr x16, [x0, #env_sp]
  46. mov sp, x16
  47. /* Force result to non-zero */
  48. cmp w1, #0
  49. csinc w0, w1, w1, ne
  50. /* Return to setjmp() caller */
  51. br x30
  52. .size longjmp, . - longjmp