• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
106