Changeset 10263


Ignore:
Timestamp:
Jul 31, 2008, 5:44:52 PM (11 years ago)
Author:
rme
Message:

If DF is set in the flags, treat EDX as an unboxed register.

Also don't forget to update tcr->next_method_context.

File:
1 edited

Legend:

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

    r10186 r10263  
    13231323  if (node_regs_mask & (1<<1)) mark_root(regs[REG_EBX]);
    13241324  if (node_regs_mask & (1<<2)) mark_root(regs[REG_ECX]);
    1325   if (node_regs_mask & (1<<3)) mark_root(regs[REG_EDX]);
     1325
     1326  if (regs[REG_EFL] & EFL_DF) {
     1327    /* DF set means EDX should be treated as an imm reg */
     1328    ;
     1329  } else
     1330    if (node_regs_mask & (1<<3)) mark_root(regs[REG_EDX]);
     1331
    13261332  if (node_regs_mask & (1<<4)) mark_root(regs[REG_ESP]);
    13271333  if (node_regs_mask & (1<<5)) mark_root(regs[REG_EBP]);
     
    16891695  if (node_regs_mask & (1<<1)) update_noderef(&regs[REG_EBX]);
    16901696  if (node_regs_mask & (1<<2)) update_noderef(&regs[REG_ECX]);
    1691   if (node_regs_mask & (1<<3)) update_noderef(&regs[REG_EDX]);
     1697
     1698  if (regs[REG_EFL] & EFL_DF) {
     1699    /* then EDX is an imm reg */
     1700    ;
     1701  } else
     1702    if (node_regs_mask & (1<<3)) update_noderef(&regs[REG_EDX]);
     1703
    16921704  if (node_regs_mask & (1<<4)) update_noderef(&regs[REG_ESP]);
    16931705  if (node_regs_mask & (1<<5)) update_noderef(&regs[REG_EBP]);
     
    17171729    update_noderef(&tcr->save2);
    17181730    update_noderef(&tcr->save3);
     1731    update_noderef(&tcr->next_method_context);
    17191732#endif
    17201733  }
Note: See TracChangeset for help on using the changeset viewer.