Add comments explaining recent changes
							parent
							
								
									ab689c098b
								
							
						
					
					
						commit
						a4282139dc
					
				| 
						 | 
				
			
			@ -9,6 +9,10 @@ The non-optimizing compiler compiles a quotation at a time by concatenating
 | 
			
		|||
machine code chunks; prolog, epilog, call word, jump to word, etc. These machine
 | 
			
		||||
code chunks are generated from Factor code in core/cpu/.../bootstrap.factor.
 | 
			
		||||
 | 
			
		||||
Calls to words and constant quotations (referenced by conditionals and dips)
 | 
			
		||||
are direct jumps to machine code blocks. Literals are also referenced directly
 | 
			
		||||
without going through the literal table.
 | 
			
		||||
 | 
			
		||||
It actually does do a little bit of very simple optimization:
 | 
			
		||||
 | 
			
		||||
1) Tail call optimization.
 | 
			
		||||
| 
						 | 
				
			
			@ -21,12 +25,15 @@ generated.
 | 
			
		|||
'if' and 'dispatch' conditionals are generated inline, instead of as a call to
 | 
			
		||||
the 'if' word.
 | 
			
		||||
 | 
			
		||||
4) When preceded by an array, calls to the 'declare' word are optimized out
 | 
			
		||||
4) When preceded by a quotation, calls to 'dip', '2dip' and '3dip' are
 | 
			
		||||
open-coded as retain stack manipulation surrounding a subroutine call.
 | 
			
		||||
 | 
			
		||||
5) When preceded by an array, calls to the 'declare' word are optimized out
 | 
			
		||||
entirely. This word is only used by the optimizing compiler, and with the
 | 
			
		||||
non-optimizing compiler it would otherwise just decrease performance to have to
 | 
			
		||||
push the array and immediately drop it after.
 | 
			
		||||
 | 
			
		||||
5) Sub-primitives are primitive words which are implemented in assembly and not
 | 
			
		||||
6) Sub-primitives are primitive words which are implemented in assembly and not
 | 
			
		||||
in the VM. They are open-coded and no subroutine call is generated. This
 | 
			
		||||
includes stack shufflers, some fixnum arithmetic words, and words such as tag,
 | 
			
		||||
slot and eq?. A primitive call is relatively expensive (two subroutine calls)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue