Changeset 15822


Ignore:
Timestamp:
May 25, 2013, 8:59:28 AM (8 years ago)
Author:
gb
Message:

Bother to maintain refidx in _SPstore_node_conditional.
Preserve temp2 in _SPstore_node_conditional, _SPset_hash_key conditional;
Use unboxed temp2 to determine ea in pc_luser_xp for those subprims.

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

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/arm-exceptions.c

    r15819 r15822  
    16441644        return;
    16451645      }
    1646       ea = (LispObj*)(xpGPR(xp,arg_x) + xpGPR(xp,imm0));
     1646      ea = (LispObj*)(xpGPR(xp,arg_x) + unbox_fixnum(xpGPR(xp,temp2)));
    16471647      xpGPR(xp,arg_z) = t_value;
    16481648    } else if (program_counter >= &egc_set_hash_key) {
     
    16521652      root = xpGPR(xp,arg_x);
    16531653      val = xpGPR(xp,arg_z);
    1654       ea = (LispObj *) (root+xpGPR(xp,arg_y)+misc_data_offset);
     1654      ea = (LispObj *) (root+unbox_fixnum(xpGPR(xp,temp2)));
    16551655      need_memoize_root = true;
    16561656    } else if (program_counter >= &egc_gvset) {
  • trunk/source/lisp-kernel/arm-spentry.s

    r15818 r15822  
    985985_spentry(store_node_conditional)
    986986C(egc_store_node_conditional):
    987         __(vpop1(temp0))
     987        __(vpop1(temp2))
    988988         
    989 1:      __(unbox_fixnum(imm2,temp0))
     9891:      __(unbox_fixnum(imm2,temp2))
    990990        __(add imm2,imm2,arg_x)
    991991        __(ldrex temp1,[imm2])
     
    10061006        __(cmp imm0,imm1)
    10071007        __(bhs 8f)
    1008         __(and imm1,imm0,#31)
    1009         __(mov arg_x,#0x80000000)
    1010         __(mov imm1,arg_x,lsr imm1)
     1008        __(and imm2,imm0,#31)
     1009        __(mov imm1,#0x80000000)
     1010        __(mov imm1,imm1,lsr imm2)
    10111011        __(ref_global(temp1,refbits))
    10121012        __(mov imm0,imm0,lsr #bitmap_shift)
     
    10201020        __(cmp imm0,#0)
    10211021        __(bne 2b)
     1022        __(add imm0,arg_x,temp2,asr #fixnumshift)
     1023        __(sub imm0,imm0,temp0)
     1024        __(mov imm0,imm0,lsr #dnode_shift+8)
     1025        __(mov imm1,#0x80000000)
     1026        __(and imm2,imm0,#31)
     1027        __(mov imm1,imm1,lsr imm2)
     1028        __(mov imm0,imm0,lsr #bitmap_shift)
     1029        __(ref_global(temp1,ephemeral_refidx))
     1030        __(add temp1,temp1,imm0,lsl #word_shift)
     10313:      __(ldrex imm2,[temp1])
     1032        __(orr imm2,imm2,imm1)
     1033        __(strex imm0,imm2,[temp1])
     1034        __(cmp imm0,#0)
     1035        __(bne 3b)
    10221036        __(b 8f)
    10231037 
     
    10291043        .globl C(egc_set_hash_key_conditional)
    10301044C(egc_set_hash_key_conditional):
    1031         __(vpop1(imm1))
    1032         __(unbox_fixnum(imm1,imm1))
     1045        __(vpop1(temp2))
     1046        __(unbox_fixnum(imm1,temp2))
    103310470:      __(add imm2,arg_x,imm1)
    10341048        __(ldrex temp1,[imm2])
     
    10621076        __(cmp imm0,#0)
    10631077        __(bne 1b)
    1064         __(add imm0,arg_y,#misc_data_offset)
    1065         __(add imm0,arg_x,imm0)
     1078        __(add imm0,arg_x,temp2,asr #fixnumshift)
    10661079        __(sub imm0,imm0,temp0)
    10671080        __(mov imm0,imm0,lsr #dnode_shift+8)
Note: See TracChangeset for help on using the changeset viewer.