- ulong target;
- ulong regs[5];
-};
-
-typedef struct jmp_buf_data jmp_buf[1];
-
-static inline int setjmp(jmp_buf jmp)
-{
- long r = 0;
-
-#ifdef CONFIG_ARM64
- asm volatile(
- "adr x1, jmp_target\n"
- "str x1, %1\n"
- "stp x26, x27, %2\n"
- "stp x28, x29, %3\n"
- "mov x1, sp\n"
- "str x1, %4\n"
- "b 2f\n"
- "jmp_target: "
- "mov %0, #1\n"
- "2:\n"
- : "+r" (r), "=m" (jmp->target),
- "=m" (jmp->regs[0]), "=m" (jmp->regs[2]),
- "=m" (jmp->regs[4])
- :
- : "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7",
- "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15",
- "x16", "x17", "x18", "x19", "x20", "x21", "x22",
- "x23", "x24", "x25", /* x26, x27, x28, x29, sp */
- "x30", "cc", "memory");
-#else
- asm volatile(
-#ifdef CONFIG_SYS_THUMB_BUILD
- "adr r0, jmp_target + 1\n"