2009-05-06 21:04:49 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								! Copyright (C) 2007, 2009 Slava Pestov.
							 | 
						
					
						
							
								
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								USING: bootstrap.image.private kernel namespaces system
							 | 
						
					
						
							
								
									
										
										
										
											2009-07-30 03:22:37 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								cpu.x86.assembler cpu.x86.assembler.operands layouts
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								vocabs parser compiler.constants ;
							 | 
						
					
						
							
								
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								IN: bootstrap.x86
							 | 
						
					
						
							
								
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								4 \ cell set
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: stack-frame-size ( -- n ) 4 bootstrap-cells ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-11-03 02:18:35 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: shift-arg ( -- reg ) ECX ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: div-arg ( -- reg ) EAX ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: mod-arg ( -- reg ) EDX ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-23 14:45:18 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: arg1 ( -- reg ) EAX ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-19 14:02:12 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: arg2 ( -- reg ) EDX ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-12-09 18:14:17 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: temp0 ( -- reg ) EAX ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: temp1 ( -- reg ) EDX ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: temp2 ( -- reg ) ECX ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: temp3 ( -- reg ) EBX ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-10-16 12:39:22 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: safe-reg ( -- reg ) EAX ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-06-11 05:52:19 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: stack-reg ( -- reg ) ESP ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: ds-reg ( -- reg ) ESI ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-07 11:39:04 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: rs-reg ( -- reg ) EDI ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-12-09 18:14:17 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								: fixnum>slot@ ( -- ) temp0 1 SAR ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-06-11 05:52:19 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: rex-length ( -- n ) 0 ;
							 | 
						
					
						
							
								
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-11-13 04:20:34 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								[
							 | 
						
					
						
							
								
									
										
										
										
											2009-04-25 23:35:19 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    ! load stack_chain
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    temp0 0 [] MOV rc-absolute-cell rt-stack-chain jit-rel
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ! save stack pointer
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    temp0 [] stack-reg MOV
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-18 15:49:22 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    ! pass vm ptr to primitive
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-23 14:45:18 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    arg1 0 MOV rc-absolute-cell rt-vm jit-rel
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-06 21:04:49 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    ! call the primitive
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-06 17:14:53 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    0 JMP rc-relative rt-primitive jit-rel
							 | 
						
					
						
							
								
									
										
										
										
											2009-04-25 23:35:19 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								] jit-primitive jit-define
							 | 
						
					
						
							
								
									
										
										
										
											2008-11-13 04:20:34 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-02-15 20:53:21 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								<< "vocab:cpu/x86/bootstrap.factor" parse-file parsed >>
							 | 
						
					
						
							
								
									
										
										
										
											2008-01-26 22:47:52 -05:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								call
							 |