cpu.x86.32: fix %binary-float-function
							parent
							
								
									e7191998f8
								
							
						
					
					
						commit
						5e13318988
					
				| 
						 | 
				
			
			@ -97,18 +97,22 @@ M: x86.32 %prepare-jump
 | 
			
		|||
    pic-tail-reg 0 MOV xt-tail-pic-offset rc-absolute-cell rel-here ;
 | 
			
		||||
 | 
			
		||||
M: x86.32 %load-stack-param ( dst rep n -- )
 | 
			
		||||
    next-stack@ swap {
 | 
			
		||||
        { int-rep [ [ EAX ] dip MOV ?spill-slot EAX MOV ] }
 | 
			
		||||
        { float-rep [ FLDS ?spill-slot FSTPS ] }
 | 
			
		||||
        { double-rep [ FLDL ?spill-slot FSTPL ] }
 | 
			
		||||
    } case ;
 | 
			
		||||
    next-stack@ swap pick register? [ %copy ] [
 | 
			
		||||
        {
 | 
			
		||||
            { int-rep [ [ EAX ] dip MOV ?spill-slot EAX MOV ] }
 | 
			
		||||
            { float-rep [ FLDS ?spill-slot FSTPS ] }
 | 
			
		||||
            { double-rep [ FLDL ?spill-slot FSTPL ] }
 | 
			
		||||
        } case
 | 
			
		||||
    ] if ;
 | 
			
		||||
 | 
			
		||||
M: x86.32 %store-stack-param ( src rep n -- )
 | 
			
		||||
    reserved-stack-space + stack@ swap {
 | 
			
		||||
        { int-rep [ [ [ EAX ] dip ?spill-slot MOV ] [ EAX MOV ] bi* ] }
 | 
			
		||||
        { float-rep [ [ ?spill-slot FLDS ] [ FSTPS ] bi* ] }
 | 
			
		||||
        { double-rep [ [ ?spill-slot FLDL ] [ FSTPL ] bi* ] }
 | 
			
		||||
    } case ;
 | 
			
		||||
    stack@ swap pick register? [ [ swap ] dip %copy ] [
 | 
			
		||||
        {
 | 
			
		||||
            { int-rep [ [ [ EAX ] dip ?spill-slot MOV ] [ EAX MOV ] bi* ] }
 | 
			
		||||
            { float-rep [ [ ?spill-slot FLDS ] [ FSTPS ] bi* ] }
 | 
			
		||||
            { double-rep [ [ ?spill-slot FLDL ] [ FSTPL ] bi* ] }
 | 
			
		||||
        } case
 | 
			
		||||
    ] if ;
 | 
			
		||||
 | 
			
		||||
:: load-float-return ( dst x87-insn rep -- )
 | 
			
		||||
    dst register? [
 | 
			
		||||
| 
						 | 
				
			
			@ -200,25 +204,14 @@ M: x86.32 %end-callback ( -- )
 | 
			
		|||
    0 save-vm-ptr
 | 
			
		||||
    "end_callback" f f %c-invoke ;
 | 
			
		||||
 | 
			
		||||
GENERIC: float-function-param ( n dst src -- )
 | 
			
		||||
 | 
			
		||||
M:: spill-slot float-function-param ( n dst src -- )
 | 
			
		||||
    ! We can clobber dst here since its going to contain the
 | 
			
		||||
    ! final result
 | 
			
		||||
    dst src double-rep %copy
 | 
			
		||||
    dst double-rep n %store-stack-param ;
 | 
			
		||||
 | 
			
		||||
M:: register float-function-param ( n dst src -- )
 | 
			
		||||
    src double-rep n %store-stack-param ;
 | 
			
		||||
 | 
			
		||||
M:: x86.32 %unary-float-function ( dst src func -- )
 | 
			
		||||
    0 dst src float-function-param
 | 
			
		||||
    src double-rep 0 %store-stack-param
 | 
			
		||||
    func "libm" load-library f %c-invoke
 | 
			
		||||
    dst double-rep %load-return ;
 | 
			
		||||
 | 
			
		||||
M:: x86.32 %binary-float-function ( dst src1 src2 func -- )
 | 
			
		||||
    0 dst src1 float-function-param
 | 
			
		||||
    8 dst src2 float-function-param
 | 
			
		||||
    src1 double-rep 0 %store-stack-param
 | 
			
		||||
    src2 double-rep 8 %store-stack-param
 | 
			
		||||
    func "libm" load-library f %c-invoke
 | 
			
		||||
    dst double-rep %load-return ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue