| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #include <ucontext.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:24:31 -04:00
										 |  |  | namespace factor { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | inline static unsigned int uap_fpu_status(void* uap) { | 
					
						
							|  |  |  |   ucontext_t* ucontext = (ucontext_t*)uap; | 
					
						
							|  |  |  |   return ucontext->uc_mcontext.fpregs->swd | | 
					
						
							|  |  |  |          ucontext->uc_mcontext.fpregs->mxcsr; | 
					
						
							| 
									
										
										
										
											2009-09-14 00:37:28 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:24:31 -04:00
										 |  |  | inline static void uap_clear_fpu_status(void* uap) { | 
					
						
							|  |  |  |   ucontext_t* ucontext = (ucontext_t*)uap; | 
					
						
							|  |  |  |   ucontext->uc_mcontext.fpregs->swd = 0; | 
					
						
							|  |  |  |   ucontext->uc_mcontext.fpregs->mxcsr &= 0xffffffc0; | 
					
						
							| 
									
										
										
										
											2009-09-14 00:37:28 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:24:31 -04:00
										 |  |  | #define UAP_STACK_POINTER(ucontext) \
 | 
					
						
							|  |  |  |   (((ucontext_t*)ucontext)->uc_mcontext.gregs[15]) | 
					
						
							|  |  |  | #define UAP_PROGRAM_COUNTER(ucontext) \
 | 
					
						
							|  |  |  |   (((ucontext_t*)ucontext)->uc_mcontext.gregs[16]) | 
					
						
							| 
									
										
										
										
											2013-05-13 00:53:47 -04:00
										 |  |  | #define UAP_SET_TOC_POINTER(uap, ptr) (void)0
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-13 00:53:47 -04:00
										 |  |  | #define CODE_TO_FUNCTION_POINTER(code) (void)0
 | 
					
						
							|  |  |  | #define CODE_TO_FUNCTION_POINTER_CALLBACK(vm, code) (void)0
 | 
					
						
							| 
									
										
										
										
											2011-05-20 18:11:50 -04:00
										 |  |  | #define FUNCTION_CODE_POINTER(ptr) ptr
 | 
					
						
							|  |  |  | #define FUNCTION_TOC_POINTER(ptr) ptr
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define UAP_STACK_POINTER_TYPE greg_t
 | 
					
						
							| 
									
										
										
										
											2011-11-25 21:58:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-30 15:39:21 -05:00
										 |  |  | /* Must match the leaf-stack-frame-size, signal-handler-stack-frame-size,
 | 
					
						
							|  |  |  | and stack-frame-size constants in basis/cpu/x86/64/unix/bootstrap.factor */ | 
					
						
							| 
									
										
										
										
											2011-12-13 18:13:32 -05:00
										 |  |  | static const unsigned LEAF_FRAME_SIZE = 16; | 
					
						
							| 
									
										
										
										
											2011-12-13 22:31:59 -05:00
										 |  |  | static const unsigned SIGNAL_HANDLER_STACK_FRAME_SIZE = 160; | 
					
						
							| 
									
										
										
										
											2011-11-25 21:58:21 -05:00
										 |  |  | static const unsigned JIT_FRAME_SIZE = 32; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | } |