Changeset 11794


Ignore:
Timestamp:
Feb 26, 2009, 4:37:13 AM (11 years ago)
Author:
gb
Message:

Need to be careful about pc-lusring in .SPstore-node-conditional too;
need a new label to restart reliably.

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

Legend:

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

    r11793 r11794  
    22622262  egc_set_hash_key_conditional, egc_set_hash_key_conditional_success_test,
    22632263  egc_set_hash_key_conditional_retry,
    2264   egc_store_node_conditional_success_end,
     2264  egc_store_node_conditional_success_end, egc_store_node_conditional_retry,
    22652265  egc_store_node_conditional_success_test,egc_store_node_conditional,
    22662266  egc_set_hash_key, egc_gvset, egc_rplacd;
     
    25702570      xpGPR(xp,Iarg_z) = t_value;
    25712571    } else if (program_counter >= &egc_store_node_conditional) {
     2572      if (program_counter <= &egc_store_node_conditional_retry) {
     2573        return;
     2574      }
    25722575      if ((program_counter < &egc_store_node_conditional_success_test) ||
    25732576          ((program_counter == &egc_store_node_conditional_success_test) &&
    25742577           !(eflags_register(xp) & (1 << X86_ZERO_FLAG_BIT)))) {
    25752578        /* Back up the PC, try again */
    2576         xpPC(xp) = (LispObj) &egc_store_node_conditional;
     2579        xpPC(xp) = (LispObj) &egc_store_node_conditional_retry;
    25772580        return;
    25782581      }
  • trunk/source/lisp-kernel/x86-spentry32.s

    r11792 r11794  
    17321732_endsubp(rplacd)
    17331733
    1734 /* Storing into a gvector can be handles the same way as storing into a CONS. */
     1734/* Storing into a gvector can be handled the same way as storing into a CONS. */
    17351735/* args (src, unscaled-idx, val) in temp0, arg_y, arg_z */
    17361736_spentry(gvset)
     
    17861786/* whether or not the STORE-CONDITIONAL (cmpxchgq) has won or not.    */
    17871787/* If we're interrupted   before the PC has reached the "success_test" label, */
    1788 /* repeat (luser the PC back to .SPstore_node_conditional.)  If we're at that */
     1788/* repeat (luser the PC back to store_node_conditional_retry.)  If
     1789        we're at that */
    17891790/* label with the Z flag set, we won and (may) need to memoize.  */
    17901791
     
    17951796        __(subl $misc_data_offset*fixnumone,%temp0) /* undo pre-added offset */
    17961797        __(sarl $fixnumshift,%temp0)    /* will be fixnum-tagged */
     1798        .globl C(egc_store_node_conditional_retry)
     1799C(egc_store_node_conditional_retry):     
    179718000:      __(cmpl %arg_y,misc_data_offset(%temp1,%temp0))
    17981801        __(movl misc_data_offset(%temp1,%temp0),%imm0)
  • trunk/source/lisp-kernel/x86-spentry64.s

    r11792 r11794  
    18541854/* whether or not the STORE-CONDITIONAL (cmpxchgq) has won or not.    */
    18551855/* If we're interrupted   before the PC has reached the "success_test" label,   */
    1856 /* repeat (luser the PC back to .SPstore_node_conditional.)  If we're at that  */
     1856/* repeat (luser the PC back to store_node_conditional_retry.)  If we're at that  */
    18571857/* label with the Z flag set, we won and (may) need to memoize.  */
    18581858
     
    18611861C(egc_store_node_conditional):
    18621862        __(unbox_fixnum(%temp0,%imm1))
     1863        .globl C(egc_store_node_conditional_retry)
     1864C(egc_store_node_conditional_retry):     
    186318650:      __(movq (%arg_x,%imm1),%temp1)
    18641866        __(cmpq %arg_y,%temp1)
Note: See TracChangeset for help on using the changeset viewer.