Changeset 13925 for branches


Ignore:
Timestamp:
Jul 6, 2010, 1:32:56 AM (9 years ago)
Author:
gb
Message:

arm-asmutils.s: don't use magic Linux kernel function for store_condtional,
just use ldrex/strex.
arm-constants.s: byte order in definitions of bytes_consed_[high,low] slots
in TCR.
arm-exceptions.s: in normalize_tcr(), if other_tcr is in ff-call, need to
update the cs_area based on tcr->last_lisp_frame.
arm-gc.c: check for running off end of cstack in mark_cstack_area().

Location:
branches/arm/lisp-kernel
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/lisp-kernel/arm-asmutils.s

    r13737 r13925  
    6464
    6565_exportfn(C(store_conditional))
    66         __ifdef([LINUX])
    67         /* To deal with different ARM variants, Linux provides
    68            a magic kernel function that does the right thing in
    69            the absence of ldrex/strex/clrex and memory-barrier
    70            functions.  That function takes args in a different
    71            order (r0 = expected oldval, r1 = newval, r2 = addr.)
    72         */
    73         __(stmdb pc!,{r4,lr})
    74         __(eor r0,r0,r2)
    75         __(eor r2,r2,r0)
    76         __(eor r0,r0,r2)
    77 0:      __(ldr r3,[r2])
    78         __(cmp r3,r0)
    79         __(bne 1f)   
    80         __(mov lr,#0xffff0fff)
    81         __(add lr,lr,#(0xffff0fc0 - 0xffff0fff))
    82         __(blx lr)
    83         __(bcc 0b)
    84 1:      __(mov r0,r3)
    85         __(ldmia pc!,{r4,lr})
    86         __endif
     660:      __(ldrex r3,[r0])
     67        __(cmp r3,r1)
     68        __(bne 1f)
     69        __(strex ip,r2,[r0])
     70        __(cmp ip,#0)
     71        __(bne 0b)
     72        __(b 2f)
     731:      __(clrex)
     742:      __(mov r0,r3)
     75        __(bx lr)               
    8776_endfn
    8877
  • branches/arm/lisp-kernel/arm-constants.s

    r13810 r13925  
    597597         _node(last_lisp_frame) /* when in foreign code */
    598598         _node(cs_limit)        /* cstack overflow limit */
     599         _node(bytes_consed_low)
    599600         _node(bytes_consed_high)
    600          _node(bytes_consed_low)
    601601         _node(log2_allocation_quantum)
    602602         _node(interrupt_pending)
  • branches/arm/lisp-kernel/arm-gc.c

    r13897 r13925  
    991991      Bug(NULL, "Unknown stack word at 0x" LISP ":\n", current);
    992992    }
     993  }
     994  if (current != limit) {
     995    Bug(NULL, "Ran off the end of cstack area\n");
    993996  }
    994997}
Note: See TracChangeset for help on using the changeset viewer.