summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/kvx/jmpbuf-offsets.h
blob: 27636fa3367c4546daa25c85e8c1a51f1dbc3ab9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
 * Private macros for accessing __jmp_buf contents.  kvx version.
 * This file is subject to the terms and conditions of the LGPL V2.1
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 2019 Kalray Inc.
 */

#include <bits/wordsize.h>

#if __WORDSIZE == 64

/* We only need to save callee-saved registers plus stackpointer */
# define JB_R12	0 /* stack pointer */
# define JB_R14	1 /* frame pointer */
# define JB_R18	2
# define JB_R19	3
# define JB_R20	4
# define JB_R21	5
# define JB_R22	6
# define JB_R23	7
# define JB_R24	8
# define JB_R25	9
# define JB_R26	10
# define JB_R27	11
# define JB_R28	12
# define JB_R29	13
# define JB_R30	14
# define JB_R31	15

#ifndef  __ASSEMBLER__
#include <setjmp.h>
#include <stdint.h>
#include <sysdep.h>

static inline uintptr_t __attribute__ ((unused))
_jmpbuf_sp (__jmp_buf jmpbuf)
{
  uintptr_t sp = jmpbuf[0].regs[JB_R12];
  return sp;
}
#endif


#else

#error unsupported 32 bit wordsize

#endif