master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#include <_mingw_mac.h>
  7
  8#if defined(_ARM_) || defined(__arm__) || defined(_ARM64_) || defined(__aarch64__)
  9	.globl __MINGW_USYMBOL(__mingw_setjmp)
 10	.def	__MINGW_USYMBOL(__mingw_setjmp);	.scl	2;	.type	32;	.endef
 11__MINGW_USYMBOL(__mingw_setjmp):
 12#if defined(_ARM_) || defined(__arm__)
 13	mov     r1,  #0
 14	str     r1,  [r0]            /* jmp_buf->Frame */
 15	str     r4,  [r0, #0x4]      /* jmp_buf->R4 */
 16	str     r5,  [r0, #0x8]      /* jmp_buf->R5 */
 17	str     r6,  [r0, #0xc]      /* jmp_buf->R6 */
 18	str     r7,  [r0, #0x10]     /* jmp_buf->R7 */
 19	str     r8,  [r0, #0x14]     /* jmp_buf->R8 */
 20	str     r9,  [r0, #0x18]     /* jmp_buf->R9 */
 21	str     r10, [r0, #0x1c]     /* jmp_buf->R10 */
 22	str     r11, [r0, #0x20]     /* jmp_buf->R11 */
 23	str     sp,  [r0, #0x24]     /* jmp_buf->Sp */
 24	str     lr,  [r0, #0x28]     /* jmp_buf->Pc */
 25	vmrs    r2,  fpscr
 26	str     r2,  [r0, #0x2c]     /* jmp_buf->Fpscr */
 27	vstr    d8,  [r0, #0x30]     /* jmp_buf->D[0] */
 28	vstr    d9,  [r0, #0x38]     /* jmp_buf->D[1] */
 29	vstr    d10, [r0, #0x40]     /* jmp_buf->D[2] */
 30	vstr    d11, [r0, #0x48]     /* jmp_buf->D[3] */
 31	vstr    d12, [r0, #0x50]     /* jmp_buf->D[4] */
 32	vstr    d13, [r0, #0x58]     /* jmp_buf->D[5] */
 33	vstr    d14, [r0, #0x60]     /* jmp_buf->D[6] */
 34	vstr    d15, [r0, #0x68]     /* jmp_buf->D[7] */
 35	mov     r0,  #0
 36	bx      lr
 37#elif defined(_ARM64_) || defined(__aarch64__)
 38	str     xzr, [x0]             /* jmp_buf->Frame */
 39	stp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
 40	stp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
 41	stp     x23, x24, [x0, #0x30] /* jmp_buf->X23, X24 */
 42	stp     x25, x26, [x0, #0x40] /* jmp_buf->X25, X26 */
 43	stp     x27, x28, [x0, #0x50] /* jmp_buf->X27, X28 */
 44	stp     x29, x30, [x0, #0x60] /* jmp_buf->Fp,  Lr  */
 45	mov     x2,  sp
 46	str     x2,       [x0, #0x70] /* jmp_buf->Sp */
 47	mrs     x2,  fpcr
 48	str     w2,       [x0, #0x78] /* jmp_buf->Fpcr */
 49	mrs     x2,  fpsr
 50	str     w2,       [x0, #0x7c] /* jmp_buf->Fpsr */
 51	stp     d8,  d9,  [x0, #0x80] /* jmp_buf->D[0-1] */
 52	stp     d10, d11, [x0, #0x90] /* jmp_buf->D[2-3] */
 53	stp     d12, d13, [x0, #0xa0] /* jmp_buf->D[4-5] */
 54	stp     d14, d15, [x0, #0xb0] /* jmp_buf->D[6-7] */
 55	mov     x0,  #0
 56	ret
 57#endif
 58
 59	.globl __MINGW_USYMBOL(__mingw_longjmp)
 60	.def	__MINGW_USYMBOL(__mingw_longjmp);	.scl	2;	.type	32;	.endef
 61__MINGW_USYMBOL(__mingw_longjmp):
 62#if defined(_ARM_) || defined(__arm__)
 63	ldr     r4,  [r0, #0x4]      /* jmp_buf->R4 */
 64	ldr     r5,  [r0, #0x8]      /* jmp_buf->R5 */
 65	ldr     r6,  [r0, #0xc]      /* jmp_buf->R6 */
 66	ldr     r7,  [r0, #0x10]     /* jmp_buf->R7 */
 67	ldr     r8,  [r0, #0x14]     /* jmp_buf->R8 */
 68	ldr     r9,  [r0, #0x18]     /* jmp_buf->R9 */
 69	ldr     r10, [r0, #0x1c]     /* jmp_buf->R10 */
 70	ldr     r11, [r0, #0x20]     /* jmp_buf->R11 */
 71	ldr     sp,  [r0, #0x24]     /* jmp_buf->Sp */
 72	ldr     r2,  [r0, #0x28]     /* jmp_buf->Pc */
 73	ldr     r3,  [r0, #0x2c]     /* jmp_buf->Fpscr */
 74	vmsr    fpscr, r3
 75	vldr    d8,  [r0, #0x30]     /* jmp_buf->D[0] */
 76	vldr    d9,  [r0, #0x38]     /* jmp_buf->D[1] */
 77	vldr    d10, [r0, #0x40]     /* jmp_buf->D[2] */
 78	vldr    d11, [r0, #0x48]     /* jmp_buf->D[3] */
 79	vldr    d12, [r0, #0x50]     /* jmp_buf->D[4] */
 80	vldr    d13, [r0, #0x58]     /* jmp_buf->D[5] */
 81	vldr    d14, [r0, #0x60]     /* jmp_buf->D[6] */
 82	vldr    d15, [r0, #0x68]     /* jmp_buf->D[7] */
 83	mov     r0,  r1              /* retval */
 84	bx      r2
 85#elif defined(_ARM64_) || defined(__aarch64__)
 86	ldp     x19, x20, [x0, #0x10] /* jmp_buf->X19, X20 */
 87	ldp     x21, x22, [x0, #0x20] /* jmp_buf->X21, X22 */
 88	ldp     x23, x24, [x0, #0x30] /* jmp_buf->X23, X24 */
 89	ldp     x25, x26, [x0, #0x40] /* jmp_buf->X25, X26 */
 90	ldp     x27, x28, [x0, #0x50] /* jmp_buf->X27, X28 */
 91	ldp     x29, x30, [x0, #0x60] /* jmp_buf->Fp,  Lr  */
 92	ldr     x2,       [x0, #0x70] /* jmp_buf->Sp */
 93	mov     sp,  x2
 94	ldr     w2,       [x0, #0x78] /* jmp_buf->Fpcr */
 95	msr     fpcr, x2
 96	ldr     w2,       [x0, #0x7c] /* jmp_buf->Fpsr */
 97	msr     fpsr, x2
 98	ldp     d8,  d9,  [x0, #0x80] /* jmp_buf->D[0-1] */
 99	ldp     d10, d11, [x0, #0x90] /* jmp_buf->D[2-3] */
100	ldp     d12, d13, [x0, #0xa0] /* jmp_buf->D[4-5] */
101	ldp     d14, d15, [x0, #0xb0] /* jmp_buf->D[6-7] */
102	mov     x0,  x1               /* retval */
103	ret
104#endif
105#endif