32 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2010 Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: compiler.constants cpu.x86.assembler
 | |
| cpu.x86.assembler.operands layouts locals ;
 | |
| IN: bootstrap.x86
 | |
| 
 | |
| : tib-exception-list-offset ( -- n ) 0 bootstrap-cells ;
 | |
| : tib-stack-base-offset ( -- n ) 1 bootstrap-cells ;
 | |
| : tib-stack-limit-offset ( -- n ) 2 bootstrap-cells ;
 | |
| 
 | |
| : jit-save-tib ( -- )
 | |
|     tib-exception-list-offset [] tib-segment PUSH
 | |
|     tib-stack-base-offset [] tib-segment PUSH
 | |
|     tib-stack-limit-offset [] tib-segment PUSH ;
 | |
| 
 | |
| : jit-restore-tib ( -- )
 | |
|     tib-stack-limit-offset [] tib-segment POP
 | |
|     tib-stack-base-offset [] tib-segment POP
 | |
|     tib-exception-list-offset [] tib-segment POP ;
 | |
| 
 | |
| :: jit-update-tib ( ctx-reg -- )
 | |
|     ! There's a redundant load here because we're not allowed
 | |
|     ! to clobber ctx-reg. Clobbers tib-temp.
 | |
|     ! Save callstack base in TIB
 | |
|     tib-temp ctx-reg context-callstack-seg-offset [+] MOV
 | |
|     tib-temp tib-temp segment-end-offset [+] MOV
 | |
|     tib-stack-base-offset [] tib-temp tib-segment MOV
 | |
|     ! Save callstack limit in TIB
 | |
|     tib-temp ctx-reg context-callstack-seg-offset [+] MOV
 | |
|     tib-temp tib-temp segment-start-offset [+] MOV
 | |
|     tib-stack-limit-offset [] tib-temp tib-segment MOV ;
 |