compiler.cfg.builder.alien: simpler caller-stack-frame word
							parent
							
								
									dbd716cc99
								
							
						
					
					
						commit
						7ab3ebfdd5
					
				| 
						 | 
				
			
			@ -66,6 +66,12 @@ cpu x86.64? [
 | 
			
		|||
    ] cfg-unit-test
 | 
			
		||||
] when
 | 
			
		||||
 | 
			
		||||
! caller-stack-cleanup
 | 
			
		||||
{ 0 } [
 | 
			
		||||
    alien-node-params new long >>return cdecl >>abi 25
 | 
			
		||||
    caller-stack-cleanup
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
! prepare-caller-return
 | 
			
		||||
${
 | 
			
		||||
    cpu x86.32? { { 1 int-rep EAX } } { { 1 int-rep RAX } } ?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,9 +54,8 @@ IN: compiler.cfg.builder.alien
 | 
			
		|||
: prepare-caller-return ( params -- reg-outputs )
 | 
			
		||||
    return>> [ { } ] [ base-type load-return ] if-void ;
 | 
			
		||||
 | 
			
		||||
: caller-stack-frame ( params -- cleanup stack-size )
 | 
			
		||||
    [ stack-params get ] dip [ return>> ] [ abi>> ] bi stack-cleanup
 | 
			
		||||
    stack-params get ;
 | 
			
		||||
: caller-stack-cleanup ( params stack-size -- cleanup )
 | 
			
		||||
    swap [ return>> ] [ abi>> ] bi stack-cleanup ;
 | 
			
		||||
 | 
			
		||||
: check-dlsym ( symbol library -- )
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +90,7 @@ IN: compiler.cfg.builder.alien
 | 
			
		|||
        [ varargs?>> ]
 | 
			
		||||
        [ caller-parameters ]
 | 
			
		||||
        [ prepare-caller-return { } ]
 | 
			
		||||
        [ caller-stack-frame ]
 | 
			
		||||
        [ stack-params get [ caller-stack-cleanup ] keep ]
 | 
			
		||||
    } cleave ;
 | 
			
		||||
 | 
			
		||||
M: #alien-invoke emit-node ( block node -- block' )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue