Changeset 6351 for branches/x8664-call


Ignore:
Timestamp:
Apr 24, 2007, 8:42:28 AM (13 years ago)
Author:
gb
Message:

new unwind: call via lea/jmp, but do interrupt-level binding out-of-line.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/x8664-call/ccl/lisp-kernel/x86-spentry64.s

    r6346 r6351  
    11741174        .globl C(ret1valn)
    11751175__(tra(C(ret1valn)))
    1176         __(pop %ra0)
    1177         __(push %arg_z)
     1176        __(movq (%rsp),%ra0)
     1177        __(movq %arg_z,(%rsp))
    11781178        __(set_nargs(1))
    11791179        __(jmpq *%ra0)
     
    12441244_endsubp(mkunwind)
    12451245
     1246/* this takes a return address in %ra0; it's "new" in that it does the
     1247   double binding of *interrupt-level* out-of-line */
    12461248_spentry(nmkunwind)
     1249        __(movq %rcontext:tcr.tlb_pointer,%arg_x)
     1250        __(movq INTERRUPT_LEVEL_BINDING_INDEX(%arg_x),%arg_y)
     1251        __(push %arg_y)
     1252        __(push $INTERRUPT_LEVEL_BINDING_INDEX)
     1253        __(push %rcontext:tcr.db_link)
     1254        __(movq %rsp,%rcontext:tcr.db_link)
     1255        __(movq $-1<<fixnumshift,INTERRUPT_LEVEL_BINDING_INDEX(%arg_x))
    12471256        __(movq $undefined,%arg_z)
    1248         __(nMake_Catch(fixnumone))
    1249         __(ret)
     1257        __(Make_Catch(fixnumone))
     1258        __(movq %arg_y,%arg_z)
     1259        __(jmp _SPbind_interrupt_level)
    12501260_endsubp(nmkunwind)
    12511261       
Note: See TracChangeset for help on using the changeset viewer.