30 lines
		
	
	
		
			937 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			937 B
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2008 Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: accessors kernel namespaces make math sequences layouts
 | |
| alien.c-types alien.structs cpu.architecture ;
 | |
| IN: compiler.alien
 | |
| 
 | |
| : large-struct? ( ctype -- ? )
 | |
|     dup c-struct? [ return-struct-in-registers? not ] [ drop f ] if ;
 | |
| 
 | |
| : alien-parameters ( params -- seq )
 | |
|     dup parameters>>
 | |
|     swap return>> large-struct? [ "void*" prefix ] when ;
 | |
| 
 | |
| : alien-return ( params -- ctype )
 | |
|     return>> dup large-struct? [ drop "void" ] when ;
 | |
| 
 | |
| : c-type-stack-align ( type -- align )
 | |
|     dup c-type-stack-align? [ c-type-align ] [ drop cell ] if ;
 | |
| 
 | |
| : parameter-align ( n type -- n delta )
 | |
|     [ c-type-stack-align align dup ] [ drop ] 2bi - ;
 | |
| 
 | |
| : parameter-sizes ( types -- total offsets )
 | |
|     #! Compute stack frame locations.
 | |
|     [
 | |
|         0 [
 | |
|             [ parameter-align drop dup , ] keep stack-size +
 | |
|         ] reduce cell align
 | |
|     ] { } make ;
 |