| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  | namespace factor { | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 10:19:09 -04:00
										 |  |  | struct quotation_jit : public jit { | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |   data_root<array> elements; | 
					
						
							|  |  |  |   bool compiling, relocate; | 
					
						
							| 
									
										
										
										
											2009-05-02 10:19:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-21 10:26:04 -04:00
										 |  |  |   // Allocates memory
 | 
					
						
							| 
									
										
										
										
											2013-05-12 23:20:43 -04:00
										 |  |  |   quotation_jit(cell owner, bool compiling, bool relocate, factor_vm* vm) | 
					
						
							| 
									
										
										
										
											2016-10-19 03:28:59 -04:00
										 |  |  |       : jit(owner, vm), | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |         elements(false_object, vm), | 
					
						
							| 
									
										
										
										
											2013-05-12 23:20:43 -04:00
										 |  |  |         compiling(compiling), | 
					
						
							|  |  |  |         relocate(relocate) {} | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |   ; | 
					
						
							| 
									
										
										
										
											2009-05-02 10:19:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-30 13:32:03 -04:00
										 |  |  |   cell nth(cell index); | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |   void init_quotation(cell quot); | 
					
						
							| 
									
										
										
										
											2016-06-30 07:44:18 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |   bool primitive_call_p(cell i, cell length); | 
					
						
							|  |  |  |   bool fast_if_p(cell i, cell length); | 
					
						
							|  |  |  |   bool fast_dip_p(cell i, cell length); | 
					
						
							|  |  |  |   bool fast_2dip_p(cell i, cell length); | 
					
						
							|  |  |  |   bool fast_3dip_p(cell i, cell length); | 
					
						
							|  |  |  |   bool mega_lookup_p(cell i, cell length); | 
					
						
							|  |  |  |   bool declare_p(cell i, cell length); | 
					
						
							|  |  |  |   bool special_subprimitive_p(cell obj); | 
					
						
							| 
									
										
										
										
											2016-06-30 07:44:18 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   void emit_mega_cache_lookup(cell methods, fixnum index, cell cache); | 
					
						
							|  |  |  |   void emit_quotation(cell quot); | 
					
						
							|  |  |  |   void emit_epilog(bool needed); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |   cell word_stack_frame_size(cell obj); | 
					
						
							| 
									
										
										
										
											2016-05-29 22:57:14 -04:00
										 |  |  |   bool stack_frame_p(); | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  |   void iterate_quotation(); | 
					
						
							| 
									
										
										
										
											2016-05-29 21:03:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-21 10:26:04 -04:00
										 |  |  |   // Allocates memory
 | 
					
						
							| 
									
										
										
										
											2016-05-29 21:03:10 -04:00
										 |  |  |   void word_call(cell word) { | 
					
						
							|  |  |  |     emit_with_literal(parent->special_objects[JIT_WORD_CALL], word); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-21 10:26:04 -04:00
										 |  |  |   // Allocates memory (literal(), emit())
 | 
					
						
							| 
									
										
										
										
											2016-05-29 21:03:10 -04:00
										 |  |  |   void word_jump(cell word_) { | 
					
						
							|  |  |  |     data_root<word> word(word_, parent); | 
					
						
							|  |  |  | #ifndef FACTOR_AMD64
 | 
					
						
							|  |  |  |     literal(tag_fixnum(xt_tail_pic_offset)); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  |     literal(word.value()); | 
					
						
							|  |  |  |     emit(parent->special_objects[JIT_WORD_JUMP]); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-05-02 10:19:09 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:27:06 -04:00
										 |  |  | VM_C_API cell lazy_jit_compile(cell quot, factor_vm* parent); | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | } |