blob: 3c8ea0489b12ed974bdbaa3f7c9e8ecb85e4d0ad (
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
|
/*
* OpenBSD/alpha machine-dependent thread macros
*
* $OpenBSD: uthread_machdep.h,v 1.1 1998/08/28 01:54:57 d Exp $
*/
/* save the floating point state of a thread */
#define _thread_machdep_save_float_state(thr) \
{ \
char *fdata = (char*)((thr)->_machdep.saved_fp); \
__asm__("fsave %0"::"m" (*fdata)); \
}
/* restore the floating point state of a thread */
#define _thread_machdep_restore_float_state(thr) \
{ \
char *fdata = (char*)((thr)->_machdep.saved_fp); \
__asm__("frstor %0"::"m" (*fdata)); \
}
/* initialise the jmpbuf stack frame so it continues from entry */
#define _thread_machdep_thread_create(thr, entry, pattr) \
{ \
/* entry */ \
(thr)->saved_jmp_buf[2] = (long) entry; \
(thr)->saved_jmp_buf[4+R_RA] = 0; \
(thr)->saved_jmp_buf[4+R_T12] = (long) entry; \
/* stack */ \
(thr)->saved_jmp_buf[4 + R_SP] = (long) (thr)->stack \
+ (pattr)->stacksize_attr \
- sizeof(double); \
}
struct _machdep_struct {
char saved_fp[108];
};
|