Changeset 14092 for branches


Ignore:
Timestamp:
Jul 30, 2010, 3:49:50 PM (9 years ago)
Author:
gb
Message:

_SPbuiltin_ash: right shift via asr, not lsr. Sheesh.
_SPsdiv32: call AEABI function directly; don't play with signs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/lisp-kernel/arm-spentry.s

    r14084 r14092  
    299299        __(movge imm2,#31)
    300300        __(mov arg_z,#-fixnumone)
    301         __(and arg_z,arg_z,arg_y,lsr imm2)
     301        __(and arg_z,arg_z,arg_y,asr imm2)
    302302        __(bx lr)
    303303        /* shift left */
     
    27582758
    27592759_spentry(sdiv32)
    2760         __(build_lisp_frame(imm2))
    2761 pushdef(`sign',`temp0')
    2762 pushdef(`d',`r0')
    2763 pushdef(`r',`r1')               
    2764         __(ands sign,d,#0x80000000)
    2765         __(rsbmi d,d,#0)
    2766         __(eors sign,sign,r,asr #32)
    2767         __(rsbcs r,r,#0)
    2768         __(bl _SPudiv32)
    2769         __(movs sign,sign,lsl #1)
    2770         __(rsbcs d,d,#0)
    2771         __(rsbmi r,r,#0)
    2772         __(return_lisp_frame(imm2))
    2773 popdef(`sign')
    2774 popdef(`d',)
    2775 popdef(`r',)               
     2760        __(cmp imm1,#0)
     2761        __(moveq arg_z,#XDIVZRO)
     2762        __(moveq nargs,#1<<fixnumshift)
     2763        __(beq _SPksignalerr)
     2764        __(stmdb vsp!,{arg_z,arg_y,arg_x,temp0,temp1,temp2})
     2765        __(str vsp,[rcontext,#tcr.save_vsp])
     2766        __(mov arg_z,rcontext)
     2767        __(ldr arg_y,[rcontext,#tcr.last_lisp_frame])
     2768        __(build_lisp_frame(r3))
     2769        __(str sp,[arg_z,#tcr.last_lisp_frame])
     2770        __(str allocptr,[arg_z,#tcr.save_allocptr])
     2771        __(mov r3,#TCR_STATE_FOREIGN)
     2772        __(str r3,[arg_z,#tcr.valence])
     2773        __(mov r3,#0)
     2774        __(bl C(__aeabi_idivmod))
     2775        __(mov rcontext,arg_z)
     2776        __(str arg_y,[rcontext,#tcr.last_lisp_frame])
     2777        __(mov allocptr,#VOID_ALLOCPTR)
     2778        __(mov fn,#0)
     2779        __(mov temp2,#0)
     2780        __(mov temp1,#0)
     2781        __(mov temp0,#0)
     2782        __(mov arg_x,#TCR_STATE_LISP)
     2783        __(str arg_x,[rcontext,#tcr.valence])
     2784        __(ldr allocptr,[rcontext,#tcr.save_allocptr])
     2785        __(ldm vsp!,{arg_z,arg_y,arg_x,temp0,temp1,temp2})
     2786        __(ldr fn,[sp,#lisp_frame.savefn])
     2787        __(ldr lr,[sp,#lisp_frame.savelr])
     2788        __(discard_lisp_frame())
     2789        __(bx lr)
    27762790       
    27772791
Note: See TracChangeset for help on using the changeset viewer.