Changeset 15835


Ignore:
Timestamp:
Jun 7, 2013, 2:52:42 PM (7 years ago)
Author:
gb
Message:

Very close ...
Todo: double-check write-barriers to ensure that pc-lusering can determine ea.
Handle extension of refidx for lowering heap (static-conses.)
Handle heap shrinkage/heap_dirty_mark.

Location:
branches/gb-egc/lisp-kernel
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/gb-egc/lisp-kernel/ppc-exceptions.c

    r15833 r15835  
    19211921      }
    19221922      root = xpGPR(xp,arg_x);
    1923       ea = (LispObj *) (root+xpGPR(xp,arg_y)+misc_data_offset);
     1923      ea = (LispObj*)(root + unbox_fixnum(xpGPR(xp,temp0)));
    19241924      need_memoize_root = true;
    19251925    } else if (program_counter >= &egc_store_node_conditional) {
     
    19311931        return;
    19321932      }
    1933       ea = (LispObj*)(xpGPR(xp,arg_x) + xpGPR(xp,imm4));
     1933      ea = (LispObj*)(xpGPR(xp,arg_x) + unbox_fixnum(xpGPR(xp,temp0)));
    19341934      xpGPR(xp,arg_z) = t_value;
    19351935    } else if (program_counter >= &egc_set_hash_key) {
  • branches/gb-egc/lisp-kernel/ppc-gc.c

    r15834 r15835  
    841841  while (start < end) {
    842842    x1 = *start;
    843     prev = start;
    844843    tag = fulltag_of(x1);
    845     intergen_ref = false;
    846844    if (immheader_tag_p(tag)) {
     845      prev = start;
    847846      start = skip_over_ivector(ptr_to_lispobj(start), x1);
    848847    } else {
    849       if (header_subtag(x1) == subtag_weak)
    850         lenient_next_dnode == true;
    851       if ((tag == fulltag_misc) || (tag == fulltag_cons)) {       
     848      if (nodeheader_tag_p(tag)) {
     849        prev = start;
     850      }
     851      intergen_ref = false;
     852      if (header_subtag(x1) == subtag_weak) {       
     853        lenient_next_dnode = true;
     854      }
     855      if (is_node_fulltag(tag)) {       
    852856        node_dnode = gc_area_dnode(x1);
    853857        if (node_dnode < GCndnodes_in_area) {
     
    861865          x1 = start[1];
    862866          tag = fulltag_of(x1);
    863           if ((tag == fulltag_misc) || (tag == fulltag_cons)) {
     867          if (is_node_fulltag(tag)) {
    864868            node_dnode = gc_area_dnode(x1);
    865869            if (node_dnode < GCndnodes_in_area) {
  • branches/gb-egc/lisp-kernel/ppc-spentry.s

    r15817 r15835  
    719719        __(srri(imm0,imm0,bitmap_shift))       
    720720        __(srr(imm3,imm3,imm4))
    721         __(ref_global(temp0,refbits))
     721        __(ref_global(temp1,refbits))
    722722        __(bge 8f)
    723723        __(slri(imm0,imm0,word_shift))
    724 2:      __(lrarx(imm1,temp0,imm0))
     7242:      __(lrarx(imm1,temp1,imm0))
    725725        __(or imm1,imm1,imm3)
    726         __(strcx(imm1,temp0,imm0))
     726        __(strcx(imm1,temp1,imm0))
    727727        __(bne- 2b)
    728728        __(isync)
     
    730730        __(extract_bit_shift_count(imm4,imm2))
    731731        __(srri(imm2,imm2,bitmap_shift))
    732         __(ref_global(temp0,ephemeral_refidx))
     732        __(ref_global(temp1,ephemeral_refidx))
    733733        __(srr(imm3,imm3,imm4))
    734734        __(slri(imm2,imm2,word_shift))
    735 3:      __(lrarx(imm1,temp0,imm2))
     7353:      __(lrarx(imm1,temp1,imm2))
    736736        __(or imm1,imm1,imm3)
    737         __(strcx(imm1,temp0,imm2))
     737        __(strcx(imm1,temp1,imm2))
    738738        __(bne 3b)
    739739        __(isync)       
     
    748748C(egc_set_hash_key_conditional):
    749749        __(cmplr(cr2,arg_z,arg_x))
    750         __(vpop(imm4))
    751         __(unbox_fixnum(imm4,imm4))
     750        __(vpop(temp0))
     751        __(unbox_fixnum(imm4,temp0))
    7527521:      __(lrarx(temp1,arg_x,imm4))
    753753        __(cmpr(cr1,temp1,arg_y))
     
    769769        __(srri(imm0,imm0,bitmap_shift))       
    770770        __(srr(imm3,imm3,imm4))
    771         __(ref_global(temp0,refbits))
     771        __(ref_global(temp2,refbits))
    772772        __(ref_global(temp1,ephemeral_refidx))
    773773        __(bge 8f)
    774774        __(slri(imm0,imm0,word_shift))
    775 2:      __(lrarx(imm1,temp0,imm0))
     7752:      __(lrarx(imm1,temp2,imm0))
    776776        __(or imm1,imm1,imm3)
    777         __(strcx(imm1,temp0,imm0))
     777        __(strcx(imm1,temp2,imm0))
    778778        __(bne- 2b)
    779779        __(isync)
     
    789789        __(isync)       
    790790       
    791         /* Memoize hash table header */         
     791        /* Memoize hash table header */
     792        __(ref_global(temp1,refbits))   
    792793        __(ref_global(imm1,ref_base))
    793794        __(sub imm0,arg_x,imm1)
     
    799800        __(srr(imm3,imm3,imm4))
    800801        __(slri(imm0,imm0,word_shift))
    801         __(ldrx(imm1,temp0,imm0))
     802        __(ldrx(imm1,temp1,imm0))
    802803        __(and. imm1,imm1,imm3)
    803804        __(bne 8f)
    804 4:      __(lrarx(imm1,temp0,imm0))
     8054:      __(lrarx(imm1,temp1,imm0))
    805806        __(or imm1,imm1,imm3)
    806         __(strcx(imm1,temp0,imm0))
     807        __(strcx(imm1,temp1,imm0))
    807808        __(bne- 4b)
    808809        __(isync)
     810        __(ref_global(temp1,ephemeral_refidx))
    809811        __(load_highbit(imm3))
    810812        __(extract_bit_shift_count(imm4,imm2))
Note: See TracChangeset for help on using the changeset viewer.