Changeset 14652


Ignore:
Timestamp:
Feb 16, 2011, 7:55:15 PM (8 years ago)
Author:
rme
Message:

In SPffcall, don't use popfl to restore the state of DF. Instead,
test the DF bit in the saved flags directly, and set DF with the std
instruction if needed.

This appears to resolve the issue described in ticket:819. On the
other hand, I don't see how the TF bit is gettting set in the saved
flags, so this may simply be masking the symptoms of some underlying bug.

See ticket:819.

Location:
trunk/source/lisp-kernel
Files:
2 edited

Legend:

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

    r13952 r14652  
    148148TCR_FLAG_BIT_PENDING_SUSPEND = (fixnumshift+7)       
    149149TCR_FLAG_BIT_FOREIGN_FPE = (fixnumshift+8)       
     150
     151CF_BIT = 0
     152DF_BIT = 10
  • trunk/source/lisp-kernel/x86-spentry32.s

    r14619 r14652  
    42264226        __(fnclex)
    42274227        __endif
    4228 1:      __(pushl rcontext(tcr.unboxed0))
    4229         __(popfl)
     42281:      /* restore state of DF from saved flags */
     4229        __(bt $DF_BIT,rcontext(tcr.unboxed0))
     4230        __(jnc 2f)
     4231        __(std)
     42322:     
    42304233        __(movl rcontext(tcr.save_vsp),%esp)
    42314234        __(movl rcontext(tcr.save_ebp),%ebp)
Note: See TracChangeset for help on using the changeset viewer.