.data .align 2 request_w: .long 0 .globl _ML_X86Frame _ML_X86Frame: .long 0 .text .align 2 .globl _sigh_return_a ; .align 2 ; _sigh_return_a: movl $(((0)*2)+1),72(%esp) movl $(((0)*2)+1),76(%esp) movl $(((0)*2)+1),16(%esp) movl $11,request_w jmp _set_request .globl _sigh_resume ; _sigh_resume: movl $12,request_w jmp _set_request .globl _pollh_return_a ; .align 2 ; _pollh_return_a: movl $13,request_w movl $(((0)*2)+1),72(%esp) movl $(((0)*2)+1),76(%esp) movl $(((0)*2)+1),16(%esp) jmp _set_request .globl _pollh_resume ; _pollh_resume: movl $14,request_w jmp _set_request .globl _handle_a ; .align 2 ; _handle_a: movl $2,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _return_a ; .align 2 ; _return_a: movl $1,request_w movl $(((0)*2)+1),72(%esp) movl $(((0)*2)+1),76(%esp) movl $(((0)*2)+1),16(%esp) jmp _set_request .globl _request_fault ; _request_fault: call _FPEEnable movl $3,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _bind_cfun_a ; .align 2 ; _bind_cfun_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: movl $4,request_w jmp _set_request .globl _build_literals_a ; .align 2 ; _build_literals_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: movl $15,request_w jmp _set_request .globl _callc_a ; .align 2 ; _callc_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: movl $5,request_w jmp _set_request .globl _saveregs ; _saveregs: popl 16(%esp) movl $0,request_w .globl _set_request ; _set_request: movl 176(%esp),%eax movl %edi,AllocPtrOffMSP(%eax) movl %ebp,StdArgOffMSP(%eax) movl %esi,StdContOffMSP(%eax) movl VProcOffMSP(%eax),%edi movl $0,InMLOffVSP(%edi) movl %ebx,Misc0OffMSP(%eax) movl %ecx,Misc1OffMSP(%eax) movl %edx,Misc2OffMSP(%eax) movl 12(%esp),%edi; movl %edi,LimitPtrOffMSP(%eax) movl 8(%esp),%edi; movl %edi,ExnPtrOffMSP(%eax) movl 76(%esp),%edi; movl %edi,StdClosOffMSP(%eax) movl 72(%esp),%edi; movl %edi,LinkRegOffMSP(%eax) movl 16(%esp),%edi; movl %edi,PCOffMSP(%eax) movl 24(%esp),%edi; movl %edi,StorePtrOffMSP(%eax) movl 28(%esp),%edi; movl %edi,VarPtrOffMSP(%eax) movl request_w,%eax leal (8192)+12(%esp),%esp popl %edi; popl %esi; popl %ebx; popl %ebp ret .text .align 2 .globl _restoreregs ; _restoreregs: movl 4(%esp),%eax pushl %ebp; pushl %ebx; pushl %esi; pushl %edi subl $(8192)+12,%esp movl ExnPtrOffMSP(%eax),%ebx; movl %ebx,8(%esp) movl LimitPtrOffMSP(%eax),%ebx; movl %ebx,12(%esp) movl StorePtrOffMSP(%eax),%ebx; movl %ebx,24(%esp) movl VarPtrOffMSP(%eax),%ebx; movl %ebx,28(%esp) leal _saveregs,%ebx movl %ebx,32(%esp) movl %eax,176(%esp) movl LinkRegOffMSP(%eax),%ebx; movl %ebx,72(%esp) movl StdClosOffMSP(%eax),%ebx; movl %ebx,76(%esp) movl PCOffMSP(%eax),%ebx; movl %ebx,16(%esp) movl AllocPtrOffMSP(%eax),%edi movl StdContOffMSP(%eax),%esi movl StdArgOffMSP(%eax),%ebp movl Misc0OffMSP(%eax),%ebx movl Misc1OffMSP(%eax),%ecx movl Misc2OffMSP(%eax),%edx movl %esp,_ML_X86Frame pushl %edx pushl %eax movl VProcOffMSP(%eax),%eax movl $1,InMLOffVSP(%eax) movl SigsRecvOffVSP(%eax),%edx cmpl SigsHandledOffVSP(%eax),%edx jne pending restore_and_jmp_ml: popl %eax popl %edx jmp_ml: cmpl 12(%esp),%edi jmp *PCOffMSP(%eax) pending: cmpl $0,InSigHandlerOffVSP(%eax) jne restore_and_jmp_ml movl $1,HandlerPendingOffVSP(%eax) popl %eax popl %edx movl %edi,12(%esp) jmp jmp_ml .globl _array_a ; .align 2 ; _array_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: movl (%ebp),%eax sarl $1,%eax cmpl $512,%eax jge 3f pushl %ebx pushl %ecx movl %eax,%ebx sall $(2 +5),%ebx orl $(((0x3)*4) + 0x2),%ebx movl %ebx,(%edi) addl $4,%edi movl %edi,%ebx movl 4(%ebp),%ecx 2: movl %ecx,(%edi) addl $4,%edi subl $1,%eax jne 2b movl $(((0x0)*128) + (((0x2)*4) + 0x2)),(%edi) addl $4,%edi movl (%ebp),%eax movl %edi,%ebp movl %ebx,(%edi) movl %eax,4(%edi) addl $8,%edi popl %ecx popl %ebx jmp *%esi 3: movl $9,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _create_r_a ; .align 2 ; _create_r_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: pushl %ebx movl %ebp,%eax sarl $1,%eax shll $1,%eax cmpl $512,%eax jge 2f orl $4,%edi movl %eax,%ebx shll $(2 +5),%ebx orl $(((0x5)*4) + 0x2),%ebx movl %ebx,(%edi) addl $4,%edi movl %edi,%ebx shll $2,%eax addl %eax,%edi movl $(((0x6)*128) + (((0x2)*4) + 0x2)),(%edi) addl $4,%edi movl %ebx,(%edi) movl %ebp,4(%edi) movl %edi,%ebp addl $8,%edi popl %ebx jmp *%esi 2: popl %ebx movl $8,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _create_b_a ; .align 2 ; _create_b_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: movl %ebp,%eax sarl $1,%eax addl $3,%eax sarl $2,%eax cmpl $512,%eax jmp 2f jge 2f pushl %ebx movl %eax,%ebx shll $(2 +5),%ebx orl $(((0x4)*4) + 0x2),%ebx movl %ebx,(%edi) addl $4,%edi movl %edi,%ebx shll $2,%eax addl %eax,%edi movl $(((0x1)*128) + (((0x2)*4) + 0x2)),(%edi) addl $4,%edi movl %ebx,(%edi) movl %ebp,4(%edi) movl %edi,%ebp addl $8,%edi popl %ebx jmp *%esi 2: movl $7,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _create_s_a ; .align 2 ; _create_s_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: movl %ebp,%eax sarl $1,%eax addl $4,%eax sarl $2,%eax cmpl $512,%eax jge 2f pushl %ebx movl %eax,%ebx shll $(2 +5),%ebx orl $(((0x4)*4) + 0x2),%ebx movl %ebx,(%edi) addl $4,%edi movl %edi,%ebx shll $2,%eax addl %eax,%edi movl $0,-4(%edi) movl $(((0x1)*128) + (((0x1)*4) + 0x2)),%eax movl %eax,(%edi) addl $4,%edi movl %ebx,(%edi) movl %ebp,4(%edi) movl %edi,%ebp addl $8,%edi popl %ebx jmp *%esi 2: movl $6,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _create_v_a ; .align 2 ; _create_v_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: pushl %ebx pushl %ecx movl (%ebp),%eax movl %eax,%ebx sarl $1,%ebx cmpl $512,%ebx jge 3f shll $(2 +5),%ebx orl $(((0x0)*4) + 0x2),%ebx movl %ebx,(%edi) addl $4,%edi movl 4(%ebp),%ebx movl %edi,%ebp 2: movl (%ebx),%ecx movl %ecx,(%edi) addl $4,%edi movl 4(%ebx),%ebx cmpl $(((0)*2)+1),%ebx jne 2b movl $(((0x0)*128) + (((0x1)*4) + 0x2)),%ebx movl %ebx,(%edi) addl $4,%edi movl %ebp,(%edi) movl %eax,4(%edi) movl %edi,%ebp addl $8,%edi popl %ecx popl %ebx jmp *%esi 3: popl %ecx popl %ebx movl $10,request_w movl 72(%esp),%eax; movl %eax,16(%esp) jmp _set_request .globl _try_lock_a ; .align 2 ; _try_lock_a: movl (%ebp),%eax movl $1,(%ebp) movl %eax,%ebp jmp *%esi .globl _unlock_a ; .align 2 ; _unlock_a: movl $3,(%ebp) movl $1,%ebp jmp *%esi .data .align 2 old_controlwd: .word 0 new_controlwd: .word 0 .text .align 2 .globl _FPEEnable ; _FPEEnable: wait; fninit subl $4,%esp wait; fnstcw (%esp) andw $0xf0c0,(%esp) orw $0x023f,(%esp) fldcw (%esp) addl $4,%esp ret .globl _floor_a ; .align 2 ; _floor_a: wait; fnstcw old_controlwd movw old_controlwd,%ax andw $0xf3ff,%ax orw $0x0400,%ax movw %ax,new_controlwd fldcw new_controlwd fldl (%ebp) subl $4,%esp fistpl (%esp) popl %ebp sall $1,%ebp incl %ebp fldcw old_controlwd jmp *%esi .globl _logb_a ; .align 2 ; _logb_a: movl 4(%ebp),%eax sarl $20,%eax andl $0x7ff,%eax subl $1023,%eax sall $1,%eax addl $1,%eax movl %eax,%ebp jmp *%esi .globl _scalb_a ; .align 2 ; _scalb_a: 1:; movl 72(%esp),%eax; movl %eax,16(%esp) ; cmpl 12(%esp),%edi; jb 9f; call _saveregs; jmp 1b; 9: pushl 4(%ebp) sarl $1,(%esp) fildl (%esp) movl (%ebp),%eax fldl (%eax) fscale movl $(((2)*128) + (((0x5)*4) + 0x2)),(%edi) fstpl 4(%edi) addl $4,%edi movl %edi,%ebp addl $8,%edi fstpl (%esp) addl $4,%esp jmp *%esi