Changeset 8962


Ignore:
Timestamp:
Mar 30, 2008, 8:16:31 AM (11 years ago)
Author:
gb
Message:

When saving/restoring registers around ff-call, save save3 (if it's
used as an NVR) first and restore it last.
Windows callback fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/win64/lisp-kernel/x86-spentry64.s

    r8810 r8962  
    39483948        __(push %arg_z)
    39493949        __(push %fn)
    3950         __(push %save0)
     3950        __ifndef([WINDOWS])
     3951        __(push %save3) 
     3952        __endif
     3953        __(push %save2)
    39513954        __(push %save1)
    3952         __(push %save2)
    3953         __ifndef([WINDOWS])
    3954         __(push %save3)         /* 11 registers pushed after %rbp */
    3955         __endif
     3955        __(push %save0)       /* 10 or 11 registers pushed after %rbp */
    39563956        __(movq %rsp,rcontext(tcr.save_vsp))
    39573957        __(movq %rbp,rcontext(tcr.save_rbp))
     
    40434043        __(movq rcontext(tcr.save_rbp),%rbp)
    40444044        __(movq $TCR_STATE_LISP,rcontext(tcr.valence))
     4045        __(pop %save0)
     4046        __(pop %save1)
     4047        __(pop %save2)
    40454048        __ifndef([WINDOWS])
    40464049        __(pop %save3)
    40474050        __endif
    4048         __(pop %save2)
    4049         __(pop %save1)
    4050         __(pop %save0)
    40514051        __(pop %fn)
    40524052        __(pop %arg_z)
     
    41644164        __(push %arg_y)
    41654165        __(push %arg_z)
    4166         __(push %save0)
    4167         __(push %save1)
    4168         __(push %save2)
    41694166        __ifndef([WINDOWS])
    41704167        __(push %save3)
    41714168        __endif
     4169        __(push %save2)
     4170        __(push %save1)
     4171        __(push %save0)
    41724172        __(movq macptr.address(%arg_y),%csave0)  /* %rbx non-volatile */
    41734173        __(push %fn)
     
    42664266        __(movq $TCR_STATE_LISP,rcontext(tcr.valence))
    42674267        __(pop %fn)
     4268        __(pop %save0)
     4269        __(pop %save1)
     4270        __(pop %save2)
    42684271        __ifndef([WINDOWS])
    42694272        __(pop %save3)
    42704273        __endif
    4271         __(pop %save2)
    4272         __(pop %save1)
    4273         __(pop %save0)
    42744274        __(pop %arg_z)
    42754275        __(pop %arg_y)
     
    43784378        __(push %arg_y)
    43794379        __(push %arg_z)
    4380         __(push %save0)
    4381         __(push %save1)
    4382         __(push %save2)
    43834380        __ifndef([WINDOWS])
    43844381         __(push %save3)
    43854382        __endif
     4383        __(push %save2)
     4384        __(push %save1)
     4385        __(push %save0)
    43864386        __(push %fn)
    43874387        __(movq %rsp,rcontext(tcr.save_vsp))
     
    44404440        __(movq $TCR_STATE_LISP,rcontext(tcr.valence))
    44414441        __(pop %fn)
     4442        __(pop %save0)
     4443        __(pop %save1)
     4444        __(pop %save2)
    44424445        __ifndef([WINDOWS])
    44434446         __(pop %save3)
    44444447        __endif
    4445         __(pop %save2)
    4446         __(pop %save1)
    4447         __(pop %save0)
    44484448        __(pop %arg_z)
    44494449        __(pop %arg_y)
     
    45454545        __ifdef([WINDOWS])
    45464546        __(subq $4*8,%rsp)
     4547        __(movq %xmm0,3*8(%rsp))        /* -40(%rbp) */
     4548        __(movq %xmm1,2*8(%rsp))
     4549        __(movq %xmm2,1*8(%rsp))
     4550        __(movq %xmm3,0*8(%rsp))
    45474551        __else
    45484552        __(subq $8*8,%rsp)
    4549         __endif
    4550         __(movq %xmm0,7*8(%rsp))        /* -56(%rbp), -72(%rbp) on Windows   */
     4553        __(movq %xmm0,7*8(%rsp))        /* -56(%rbp) */
    45514554        __(movq %xmm1,6*8(%rsp))
    45524555        __(movq %xmm2,5*8(%rsp))
    45534556        __(movq %xmm3,4*8(%rsp))
    4554         __ifndef([WINDOWS])
    45554557        __(movq %xmm4,3*8(%rsp))
    45564558        __(movq %xmm5,2*8(%rsp))
    45574559        __(movq %xmm6,1*8(%rsp))
    45584560        __(movq %xmm7,0*8(%rsp))
     4561        __endif
     4562        __ifndef([WINDOWS])
    45594563        __endif
    45604564        /* C NVRs   */
     
    46184622        __(movq rcontext(tcr.save_rbp),%rbp)
    46194623        __(movq $TCR_STATE_LISP,rcontext(tcr.valence))
    4620         __(movq (%rsp),%save3)
    4621         __(movq 8(%rsp),%save2)
    4622         __(movq 16(%rsp),%save1)
    4623         __(movq 24(%rsp),%save0)
     4624        __(movq (%rsp),%save0)
     4625        __(movq 8(%rsp),%save1)
     4626        __(movq 16(%rsp),%save2)
     4627        __ifndef([WINDOWS])
     4628         __(movq 24(%rsp),%save3)
     4629        __endif
    46244630        __(stmxcsr rcontext(tcr.foreign_mxcsr))
    46254631        __(andb $~mxcsr_all_exceptions,rcontext(tcr.foreign_mxcsr))
Note: See TracChangeset for help on using the changeset viewer.