Changeset 8608


Ignore:
Timestamp:
Feb 27, 2008, 5:20:56 PM (14 years ago)
Author:
andreas
Message:

Windows support for ffcall and ffcall_return_registers: care about
differences in C ABI, save TCR pointer. No exception handling yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/x86-spentry64.s

    r8607 r8608  
    39513951        __(push %save1)
    39523952        __(push %save2)
    3953         __(push %save3)         /* 10 registers pushed after %rbp */
     3953        __ifndef([WINDOWS])
     3954        __(push %save3)         /* 11 registers pushed after %rbp */
     3955        __endif
    39543956        __(movq %rsp,rcontext(tcr.save_vsp))
    39553957        __(movq %rbp,rcontext(tcr.save_rbp))
     
    39793981         __(movq %save2,%imm0)
    39803982        __endif
     3983        __ifdef([WINDOWS])
     3984        /* Preserve TCR pointer */
     3985        __(movq %rcontext_reg, %save0)
     3986        __endif
    39813987LocalLabelPrefix[]ffcall_setup:
    39823988        __(addq $2*node_size,%rsp)
    39833989        __(movq %imm1,%r11)
    3984         __(pop %rdi)
    3985         __(pop %rsi)
    3986         __(pop %rdx)
    3987         __(pop %rcx)
    3988         __(pop %r8)
    3989         __(pop %r9)
     3990        __(pop %carg0)
     3991        __(pop %carg1)
     3992        __(pop %carg2)
     3993        __(pop %carg3)
     3994        __ifdef([WINDOWS])
     3995        __(sub $20, %rsp) /* Make room for arg register spill */
     3996        __else
     3997        __(pop %carg4)
     3998        __(pop %carg5)
     3999        __endif
    39904000LocalLabelPrefix[]ffcall_setup_end:
    39914001LocalLabelPrefix[]ffcall_call:
     
    40024012         __(movq %save2,%rdx)
    40034013        __endif
    4004         __(movq %rsp,rcontext(tcr.foreign_sp))       
     4014        __ifdef([WINDOWS])
     4015        __(movq %save0, %rcontext_reg)
     4016        __endif
     4017        __(movq %rsp,rcontext(tcr.foreign_sp))
     4018        __ifndef([WINDOWS])
    40054019        __(clr %save3)
     4020        __endif
    40064021        __(clr %save2)
    40074022        __(clr %save1)
     
    40254040        __(movq rcontext(tcr.save_rbp),%rbp)
    40264041        __(movq $TCR_STATE_LISP,rcontext(tcr.valence))
     4042        __ifndef([WINDOWS])
    40274043        __(pop %save3)
     4044        __endif
    40284045        __(pop %save2)
    40294046        __(pop %save1)
     
    41474164        __(push %save1)
    41484165        __(push %save2)
     4166        __ifndef([WINDOWS])
    41494167        __(push %save3)
     4168        __endif
    41504169        __(movq macptr.address(%arg_y),%rbx)  /* %rbx non-volatile */
    41514170        __(push %fn)
     
    41774196         __(movq %save2,%imm1)
    41784197        __endif
     4198        __ifdef([WINDOWS])
     4199        /* Preserve TCR pointer */
     4200        __(movq %rcontext_reg, %save0)
     4201        __endif
    41794202        __(movq %imm1,%r11)
    41804203LocalLabelPrefix[]ffcall_return_registers_setup:
    41814204        __(addq $2*node_size,%rsp)
    4182         __(pop %rdi)
    4183         __(pop %rsi)
    4184         __(pop %rdx)
    4185         __(pop %rcx)
    4186         __(pop %r8)
    4187         __(pop %r9)
     4205        __(pop %carg0)
     4206        __(pop %carg1)
     4207        __(pop %carg2)
     4208        __(pop %carg3)
     4209        __ifdef([WINDOWS])
     4210        __(sub $20, %rsp) /* Make room for arg register spill */
     4211        __else
     4212        __(pop %carg4)
     4213        __(pop %carg5)
     4214        __endif
    41884215LocalLabelPrefix[]ffcall_return_registers_setup_end:
    41894216LocalLabelPrefix[]ffcall_return_registers_call:
     
    42044231         __(movsd 24(%save2),%xmm1)
    42054232        __endif
     4233        __ifdef([WINDOWS])
     4234        __(movq %save0, %rcontext_reg)
     4235        __endif
    42064236        __(movq %rsp,rcontext(tcr.foreign_sp))       
     4237        __ifndef([WINDOWS])
    42074238        __(clr %save3)
     4239        __endif
    42084240        __(clr %save2)
    42094241        __(clr %save1)
     
    42284260        __(movq $TCR_STATE_LISP,rcontext(tcr.valence))
    42294261        __(pop %fn)
     4262        __ifndef([WINDOWS])
    42304263        __(pop %save3)
     4264        __endif
    42314265        __(pop %save2)
    42324266        __(pop %save1)
Note: See TracChangeset for help on using the changeset viewer.