Changeset 8209


Ignore:
Timestamp:
Jan 17, 2008, 9:55:05 PM (12 years ago)
Author:
rme
Message:

SPspecset, SPspecrefcheck

File:
1 edited

Legend:

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

    r8068 r8209  
    290290_endsubp(rplacd)
    291291
     292/* args (src, unscaled-idx, val) in temp0, arg_y, arg_z */
    292293_spentry(gvset)
    293294        .globl C(egc_gvset)
     
    636637        __(int $3)
    637638_endsubp(specref)
    638        
     639
     640/* arg_y = special symbol, arg_z = new value. */
    639641_spentry(specset)
    640         __(int $3)
     642        __(movl symbol.binding_index(%arg_y),%imm0)
     643        __(cmp %rcontext:tcr.tlb_limit,%imm0)
     644        __(movl %rcontext:tcr.tlb_pointer,%temp1)
     645        __(jae 1f)
     646        __(movl (%temp1,%imm0),%temp0)
     647        __(cmpb $no_thread_local_binding_marker,%temp0_b)
     648        __(je 1f)
     649        __(movl %arg_z,(%temp1,%imm0))
     650        __(ret)
     6511:      __(movl %arg_y,%temp0)
     652        __(movl $1<<fixnumshift,%arg_y)
     653        __(jmp _SPgvset)
    641654_endsubp(specset)
    642655       
    643656_spentry(specrefcheck)
    644         __(int $3)
     657        __(movl symbol.binding_index(%arg_z),%imm0)
     658        __(cmp %rcontext:tcr.tlb_limit,%imm0)
     659        __(movl %rcontext:tcr.tlb_pointer,%temp1)
     660        __(mov %arg_z,%arg_y)
     661        __(jae 7f)
     662        __(movl (%temp1,%imm0),%arg_z)
     663        __(cmpb $no_thread_local_binding_marker,%arg_z_b)
     664        __(jne 8f)
     6657:      __(movl symbol.vcell(%arg_y),%arg_z)
     6668:      __(cmpb $unbound_marker,%arg_z_b)
     667        __(jne,pt 9f)
     668        __(uuo_error_reg_unbound(Rarg_y))
     6699:      __(repret)             
    645670_endsubp(specrefcheck)
    646671
Note: See TracChangeset for help on using the changeset viewer.