vm: reserve some more special-objects
Need a jit-safepoint object to deal with #332, and ffi-signal-handler words for immediate signal handling during FFI callsdb4
							parent
							
								
									86c35999f9
								
							
						
					
					
						commit
						d28845a1ef
					
				| 
						 | 
				
			
			@ -166,46 +166,49 @@ SPECIAL-OBJECT: jit-word-jump 26
 | 
			
		|||
SPECIAL-OBJECT: jit-word-call 27
 | 
			
		||||
SPECIAL-OBJECT: jit-if-word 28
 | 
			
		||||
SPECIAL-OBJECT: jit-if 29
 | 
			
		||||
SPECIAL-OBJECT: jit-epilog 30
 | 
			
		||||
SPECIAL-OBJECT: jit-return 31
 | 
			
		||||
SPECIAL-OBJECT: jit-profiling 32
 | 
			
		||||
SPECIAL-OBJECT: jit-push 33
 | 
			
		||||
SPECIAL-OBJECT: jit-dip-word 34
 | 
			
		||||
SPECIAL-OBJECT: jit-dip 35
 | 
			
		||||
SPECIAL-OBJECT: jit-2dip-word 36
 | 
			
		||||
SPECIAL-OBJECT: jit-2dip 37
 | 
			
		||||
SPECIAL-OBJECT: jit-3dip-word 38
 | 
			
		||||
SPECIAL-OBJECT: jit-3dip 39
 | 
			
		||||
SPECIAL-OBJECT: jit-execute 40
 | 
			
		||||
SPECIAL-OBJECT: jit-declare-word 41
 | 
			
		||||
SPECIAL-OBJECT: jit-safepoint 30
 | 
			
		||||
SPECIAL-OBJECT: jit-epilog 31
 | 
			
		||||
SPECIAL-OBJECT: jit-return 32
 | 
			
		||||
SPECIAL-OBJECT: jit-profiling 33
 | 
			
		||||
SPECIAL-OBJECT: jit-push 34
 | 
			
		||||
SPECIAL-OBJECT: jit-dip-word 35
 | 
			
		||||
SPECIAL-OBJECT: jit-dip 36
 | 
			
		||||
SPECIAL-OBJECT: jit-2dip-word 37
 | 
			
		||||
SPECIAL-OBJECT: jit-2dip 38
 | 
			
		||||
SPECIAL-OBJECT: jit-3dip-word 39
 | 
			
		||||
SPECIAL-OBJECT: jit-3dip 40
 | 
			
		||||
SPECIAL-OBJECT: jit-execute 41
 | 
			
		||||
SPECIAL-OBJECT: jit-declare-word 42
 | 
			
		||||
 | 
			
		||||
SPECIAL-OBJECT: c-to-factor-word 42
 | 
			
		||||
SPECIAL-OBJECT: lazy-jit-compile-word 43
 | 
			
		||||
SPECIAL-OBJECT: unwind-native-frames-word 44
 | 
			
		||||
SPECIAL-OBJECT: fpu-state-word 45
 | 
			
		||||
SPECIAL-OBJECT: set-fpu-state-word 46
 | 
			
		||||
SPECIAL-OBJECT: signal-handler-word 47
 | 
			
		||||
SPECIAL-OBJECT: leaf-signal-handler-word 48
 | 
			
		||||
SPECIAL-OBJECT: c-to-factor-word 43
 | 
			
		||||
SPECIAL-OBJECT: lazy-jit-compile-word 44
 | 
			
		||||
SPECIAL-OBJECT: unwind-native-frames-word 45
 | 
			
		||||
SPECIAL-OBJECT: fpu-state-word 46
 | 
			
		||||
SPECIAL-OBJECT: set-fpu-state-word 47
 | 
			
		||||
SPECIAL-OBJECT: signal-handler-word 48
 | 
			
		||||
SPECIAL-OBJECT: leaf-signal-handler-word 49
 | 
			
		||||
SPECIAL-OBJECT: ffi-signal-handler-word 50
 | 
			
		||||
SPECIAL-OBJECT: ffi-leaf-signal-handler-word 51
 | 
			
		||||
 | 
			
		||||
SPECIAL-OBJECT: callback-stub 50
 | 
			
		||||
SPECIAL-OBJECT: callback-stub 53
 | 
			
		||||
 | 
			
		||||
! PIC stubs
 | 
			
		||||
SPECIAL-OBJECT: pic-load 51
 | 
			
		||||
SPECIAL-OBJECT: pic-tag 52
 | 
			
		||||
SPECIAL-OBJECT: pic-tuple 53
 | 
			
		||||
SPECIAL-OBJECT: pic-check-tag 54
 | 
			
		||||
SPECIAL-OBJECT: pic-check-tuple 55
 | 
			
		||||
SPECIAL-OBJECT: pic-hit 56
 | 
			
		||||
SPECIAL-OBJECT: pic-miss-word 57
 | 
			
		||||
SPECIAL-OBJECT: pic-miss-tail-word 58
 | 
			
		||||
SPECIAL-OBJECT: pic-load 54
 | 
			
		||||
SPECIAL-OBJECT: pic-tag 55
 | 
			
		||||
SPECIAL-OBJECT: pic-tuple 56
 | 
			
		||||
SPECIAL-OBJECT: pic-check-tag 57
 | 
			
		||||
SPECIAL-OBJECT: pic-check-tuple 58
 | 
			
		||||
SPECIAL-OBJECT: pic-hit 59
 | 
			
		||||
SPECIAL-OBJECT: pic-miss-word 60
 | 
			
		||||
SPECIAL-OBJECT: pic-miss-tail-word 61
 | 
			
		||||
 | 
			
		||||
! Megamorphic dispatch
 | 
			
		||||
SPECIAL-OBJECT: mega-lookup 59
 | 
			
		||||
SPECIAL-OBJECT: mega-lookup-word 60
 | 
			
		||||
SPECIAL-OBJECT: mega-miss-word 61
 | 
			
		||||
SPECIAL-OBJECT: mega-lookup 62
 | 
			
		||||
SPECIAL-OBJECT: mega-lookup-word 63
 | 
			
		||||
SPECIAL-OBJECT: mega-miss-word 64
 | 
			
		||||
 | 
			
		||||
! Default definition for undefined words
 | 
			
		||||
SPECIAL-OBJECT: undefined-quot 62
 | 
			
		||||
SPECIAL-OBJECT: undefined-quot 65
 | 
			
		||||
 | 
			
		||||
: special-object-offset ( symbol -- n )
 | 
			
		||||
    special-objects get at header-size + ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -350,6 +350,8 @@ tuple
 | 
			
		|||
    { "set-fpu-state" "kernel.private" ( -- ) }
 | 
			
		||||
    { "signal-handler" "kernel.private" ( -- ) }
 | 
			
		||||
    { "leaf-signal-handler" "kernel.private" ( -- ) }
 | 
			
		||||
    { "ffi-signal-handler" "kernel.private" ( -- ) }
 | 
			
		||||
    { "ffi-leaf-signal-handler" "kernel.private" ( -- ) }
 | 
			
		||||
    { "unwind-native-frames" "kernel.private" ( -- ) }
 | 
			
		||||
    { "set-callstack" "kernel.private" ( callstack -- * ) }
 | 
			
		||||
    { "lazy-jit-compile" "kernel.private" ( -- ) }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -285,59 +285,62 @@ CONSTANT: JIT-WORD-JUMP 26
 | 
			
		|||
CONSTANT: JIT-WORD-CALL 27
 | 
			
		||||
CONSTANT: JIT-IF-WORD 28
 | 
			
		||||
CONSTANT: JIT-IF 29
 | 
			
		||||
CONSTANT: JIT-EPILOG 30
 | 
			
		||||
CONSTANT: JIT-RETURN 31
 | 
			
		||||
CONSTANT: JIT-PROFILING 32
 | 
			
		||||
CONSTANT: JIT-PUSH-IMMEDIATE 33
 | 
			
		||||
CONSTANT: JIT-DIP-WORD 34
 | 
			
		||||
CONSTANT: JIT-DIP 35
 | 
			
		||||
CONSTANT: JIT-2DIP-WORD 36
 | 
			
		||||
CONSTANT: JIT-2DIP 37
 | 
			
		||||
CONSTANT: JIT-3DIP-WORD 38
 | 
			
		||||
CONSTANT: JIT-3DIP 39
 | 
			
		||||
CONSTANT: JIT-EXECUTE 40
 | 
			
		||||
CONSTANT: JIT-DECLARE-WORD 41
 | 
			
		||||
CONSTANT: JIT-SAFEPOINT 30
 | 
			
		||||
CONSTANT: JIT-EPILOG 31
 | 
			
		||||
CONSTANT: JIT-RETURN 32
 | 
			
		||||
CONSTANT: JIT-PROFILING 33
 | 
			
		||||
CONSTANT: JIT-PUSH-IMMEDIATE 34
 | 
			
		||||
CONSTANT: JIT-DIP-WORD 35
 | 
			
		||||
CONSTANT: JIT-DIP 36
 | 
			
		||||
CONSTANT: JIT-2DIP-WORD 37
 | 
			
		||||
CONSTANT: JIT-2DIP 38
 | 
			
		||||
CONSTANT: JIT-3DIP-WORD 39
 | 
			
		||||
CONSTANT: JIT-3DIP 40
 | 
			
		||||
CONSTANT: JIT-EXECUTE 41
 | 
			
		||||
CONSTANT: JIT-DECLARE-WORD 42
 | 
			
		||||
 | 
			
		||||
CONSTANT: C-TO-FACTOR-WORD 42
 | 
			
		||||
CONSTANT: LAZY-JIT-COMPILE-WORD 43
 | 
			
		||||
CONSTANT: UNWIND-NATIVE-FRAMES-WORD 44
 | 
			
		||||
CONSTANT: GET-FPU-STATE-WORD 45
 | 
			
		||||
CONSTANT: SET-FPU-STATE-WORD 46
 | 
			
		||||
CONSTANT: SIGNAL-HANDLER-WORD 47
 | 
			
		||||
CONSTANT: LEAF-SIGNAL-HANDLER-WORD 48
 | 
			
		||||
CONSTANT: C-TO-FACTOR-WORD 43
 | 
			
		||||
CONSTANT: LAZY-JIT-COMPILE-WORD 44
 | 
			
		||||
CONSTANT: UNWIND-NATIVE-FRAMES-WORD 45
 | 
			
		||||
CONSTANT: GET-FPU-STATE-WORD 46
 | 
			
		||||
CONSTANT: SET-FPU-STATE-WORD 47
 | 
			
		||||
CONSTANT: SIGNAL-HANDLER-WORD 48
 | 
			
		||||
CONSTANT: LEAF-SIGNAL-HANDLER-WORD 49
 | 
			
		||||
CONSTANT: FFI-SIGNAL-HANDLER-WORD 50
 | 
			
		||||
CONSTANT: FFI-LEAF-SIGNAL-HANDLER-WORD 51
 | 
			
		||||
 | 
			
		||||
CONSTANT: REDEFINITION-COUNTER 49
 | 
			
		||||
CONSTANT: REDEFINITION-COUNTER 52
 | 
			
		||||
 | 
			
		||||
CONSTANT: CALLBACK-STUB 50
 | 
			
		||||
CONSTANT: CALLBACK-STUB 53
 | 
			
		||||
 | 
			
		||||
CONSTANT: PIC-LOAD 51
 | 
			
		||||
CONSTANT: PIC-TAG 52
 | 
			
		||||
CONSTANT: PIC-TUPLE 53
 | 
			
		||||
CONSTANT: PIC-CHECK-TAG 54
 | 
			
		||||
CONSTANT: PIC-CHECK-TUPLE 55
 | 
			
		||||
CONSTANT: PIC-HIT 56
 | 
			
		||||
CONSTANT: PIC-MISS-WORD 57
 | 
			
		||||
CONSTANT: PIC-MISS-TAIL-WORD 58
 | 
			
		||||
CONSTANT: PIC-LOAD 54
 | 
			
		||||
CONSTANT: PIC-TAG 55
 | 
			
		||||
CONSTANT: PIC-TUPLE 56
 | 
			
		||||
CONSTANT: PIC-CHECK-TAG 57
 | 
			
		||||
CONSTANT: PIC-CHECK-TUPLE 58
 | 
			
		||||
CONSTANT: PIC-HIT 59
 | 
			
		||||
CONSTANT: PIC-MISS-WORD 60
 | 
			
		||||
CONSTANT: PIC-MISS-TAIL-WORD 61
 | 
			
		||||
 | 
			
		||||
CONSTANT: MEGA-LOOKUP 59
 | 
			
		||||
CONSTANT: MEGA-LOOKUP-WORD 60
 | 
			
		||||
CONSTANT: MEGA-MISS-WORD 61
 | 
			
		||||
CONSTANT: MEGA-LOOKUP 62
 | 
			
		||||
CONSTANT: MEGA-LOOKUP-WORD 63
 | 
			
		||||
CONSTANT: MEGA-MISS-WORD 64
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-UNDEFINED 62
 | 
			
		||||
CONSTANT: OBJ-UNDEFINED 65
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-STDERR 63
 | 
			
		||||
CONSTANT: OBJ-STDERR 66
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-STAGE2 64
 | 
			
		||||
CONSTANT: OBJ-STAGE2 67
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-CURRENT-THREAD 65
 | 
			
		||||
CONSTANT: OBJ-CURRENT-THREAD 68
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-THREADS 66
 | 
			
		||||
CONSTANT: OBJ-RUN-QUEUE 67
 | 
			
		||||
CONSTANT: OBJ-SLEEP-QUEUE 68
 | 
			
		||||
CONSTANT: OBJ-THREADS 69
 | 
			
		||||
CONSTANT: OBJ-RUN-QUEUE 70
 | 
			
		||||
CONSTANT: OBJ-SLEEP-QUEUE 71
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-VM-COMPILER 69
 | 
			
		||||
CONSTANT: OBJ-VM-COMPILER 72
 | 
			
		||||
 | 
			
		||||
CONSTANT: OBJ-WAITING-CALLBACKS 70
 | 
			
		||||
CONSTANT: OBJ-WAITING-CALLBACKS 73
 | 
			
		||||
 | 
			
		||||
! Context object count and identifiers must be kept in sync with:
 | 
			
		||||
!   vm/contexts.hpp
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,6 +42,7 @@ enum special_object {
 | 
			
		|||
	JIT_WORD_CALL,
 | 
			
		||||
	JIT_IF_WORD,
 | 
			
		||||
	JIT_IF,
 | 
			
		||||
	JIT_SAFEPOINT,
 | 
			
		||||
	JIT_EPILOG,
 | 
			
		||||
	JIT_RETURN,
 | 
			
		||||
	JIT_PROFILING,
 | 
			
		||||
| 
						 | 
				
			
			@ -56,23 +57,25 @@ enum special_object {
 | 
			
		|||
	JIT_DECLARE_WORD,
 | 
			
		||||
 | 
			
		||||
	/* External entry points */
 | 
			
		||||
	C_TO_FACTOR_WORD,
 | 
			
		||||
	C_TO_FACTOR_WORD = 43,
 | 
			
		||||
	LAZY_JIT_COMPILE_WORD,
 | 
			
		||||
	UNWIND_NATIVE_FRAMES_WORD,
 | 
			
		||||
	GET_FPU_STATE_WORD,
 | 
			
		||||
	SET_FPU_STATE_WORD,
 | 
			
		||||
	SIGNAL_HANDLER_WORD,
 | 
			
		||||
	LEAF_SIGNAL_HANDLER_WORD,
 | 
			
		||||
	FFI_SIGNAL_HANDLER_WORD,
 | 
			
		||||
	FFI_LEAF_SIGNAL_HANDLER_WORD,
 | 
			
		||||
 | 
			
		||||
	/* Incremented on every modify-code-heap call; invalidates call( inline
 | 
			
		||||
	caching */
 | 
			
		||||
	REDEFINITION_COUNTER = 49,
 | 
			
		||||
	REDEFINITION_COUNTER = 52,
 | 
			
		||||
 | 
			
		||||
	/* Callback stub generation in callbacks.c */
 | 
			
		||||
	CALLBACK_STUB = 50,
 | 
			
		||||
	
 | 
			
		||||
	CALLBACK_STUB = 53,
 | 
			
		||||
 | 
			
		||||
	/* Polymorphic inline cache generation in inline_cache.c */
 | 
			
		||||
	PIC_LOAD = 51,
 | 
			
		||||
	PIC_LOAD = 54,
 | 
			
		||||
	PIC_TAG,
 | 
			
		||||
	PIC_TUPLE,
 | 
			
		||||
	PIC_CHECK_TAG,
 | 
			
		||||
| 
						 | 
				
			
			@ -82,25 +85,25 @@ enum special_object {
 | 
			
		|||
	PIC_MISS_TAIL_WORD,
 | 
			
		||||
 | 
			
		||||
	/* Megamorphic cache generation in dispatch.c */
 | 
			
		||||
	MEGA_LOOKUP = 59,
 | 
			
		||||
	MEGA_LOOKUP = 62,
 | 
			
		||||
	MEGA_LOOKUP_WORD,
 | 
			
		||||
	MEGA_MISS_WORD,
 | 
			
		||||
 | 
			
		||||
	OBJ_UNDEFINED = 62,       /* default quotation for undefined words */
 | 
			
		||||
	OBJ_UNDEFINED = 65,       /* default quotation for undefined words */
 | 
			
		||||
 | 
			
		||||
	OBJ_STDERR = 63,          /* stderr FILE* handle */
 | 
			
		||||
	OBJ_STDERR = 66,          /* stderr FILE* handle */
 | 
			
		||||
 | 
			
		||||
	OBJ_STAGE2 = 64,          /* have we bootstrapped? */
 | 
			
		||||
	OBJ_STAGE2 = 67,          /* have we bootstrapped? */
 | 
			
		||||
 | 
			
		||||
	OBJ_CURRENT_THREAD = 65,
 | 
			
		||||
	OBJ_CURRENT_THREAD = 68,
 | 
			
		||||
 | 
			
		||||
	OBJ_THREADS = 66,
 | 
			
		||||
	OBJ_RUN_QUEUE = 67,
 | 
			
		||||
	OBJ_SLEEP_QUEUE = 68,
 | 
			
		||||
	OBJ_THREADS = 69,
 | 
			
		||||
	OBJ_RUN_QUEUE = 70,
 | 
			
		||||
	OBJ_SLEEP_QUEUE = 71,
 | 
			
		||||
 | 
			
		||||
	OBJ_VM_COMPILER = 69,     /* version string of the compiler we were built with */
 | 
			
		||||
	OBJ_VM_COMPILER = 72,     /* version string of the compiler we were built with */
 | 
			
		||||
 | 
			
		||||
	OBJ_WAITING_CALLBACKS = 70,
 | 
			
		||||
	OBJ_WAITING_CALLBACKS = 73,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* save-image-and-exit discards special objects that are filled in on startup
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue