Changeset 9625


Ignore:
Timestamp:
May 30, 2008, 5:13:51 AM (11 years ago)
Author:
rme
Message:

Implement SPtcallnfngen.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/lisp-kernel/x86-spentry32.s

    r9616 r9625  
    23212321/* '%err-disp in %imm0.) */
    23222322_spentry(ksignalerr)
    2323         __(int $3)
    23242323        __(mov $nrs.errdisp,%imm0)
    23252324        __(mov symbol.fcell(%imm0),%fn)
     
    25642563
    25652564_spentry(tcallnfngen)
    2566         __(int $3)
     2565        __(cmpl $nargregs*node_size,%nargs)
     2566        __(jbe 9f)
     2567        __(lea -nargregs*node_size(%esp,%nargs),%imm0)
     2568        __(movd %nargs,%mm0)    /* stash nargs aka temp1 */
     2569        __(xorl %temp1,%temp1)
     2570        __(movl %temp0,%rcontext:tcr.save0)
     2571        /* It's OK to use %ra0 (%temp0) as an temp here, since the */
     2572        /* real return address is on the stack. */
     25730:      __(movl -node_size(%imm0),%ra0)
     2574        __(movl %ra0,-node_size(%ebp,%temp1))
     2575        __(subl $node_size,%imm0)
     2576        __(subl $node_size,%temp1)
     2577        __(cmpl %imm0,%esp)
     2578        __(jne 0b)
     2579        __(movl %rcontext:tcr.save0,%fn)
     2580        __(movss %fpzero,%rcontext:tcr.save0)
     2581        __(lea (%ebp,%temp1),%esp)
     2582        __(movl lisp_frame.savera0(%ebp),%ra0)
     2583        __(movl lisp_frame.backlink(%ebp),%ebp)
     2584        __(push %ra0)
     2585        __(jmp *%fn)
     25869:      /* All args in regs; exactly the same as the tcallnfnvsp case */
     2587        __(movl %temp0,%fn)
     2588        __(leave)
     2589        __(jmp *%fn)
    25672590_endsubp(tcallnfngen)
    25682591
Note: See TracChangeset for help on using the changeset viewer.