Artifact a136a39a644c69ca771ea8276c2a3b8efef60f94e135bfd26337fb42b307a885:
- Executable file
r36/cslbase/imularm.s
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 2702) [annotate] [blame] [check-ins using] [more...]
; "asmarm.s" Copyright (C) Codemist Ltd, 1992 ; ; r0 RN 0 ; r0-r3 are used as workspace here r1 RN 1 r2 RN 2 r3 RN 3 r12 RN 12 ; points at profile_record sp RN 13 ; stack provided by the operating system for me lr RN 14 ; return address pc RN 15 AREA |C$$code|, CODE, READONLY IMPORT |__main| B |__main| EXPORT |__RO_Base| EXPORT |__RO_Limit| IMPORT |Image$$RO$$Base| IMPORT |Image$$RO$$Limit| |__RO_Base| & |Image$$RO$$Base| |__RO_Limit| & |Image$$RO$$Limit| EXPORT wimp_tick IMPORT C_nil IMPORT tick_pending IMPORT polltick_pending IMPORT already_in_gc IMPORT tick_on_gc_exit IMPORT saveheaplimit IMPORT savevheaplimit IMPORT savecodelimit IMPORT savestacklimit IMPORT stackbase tick_count & 0 wimp_tick LDR r2, tick_count SUBS r2, r2, #1 ; decrement tick_count MOVMI r2, #20 ; set back to 1/5 second delay on wrap STR r2, tick_count MOVPLS pc, lr ; not ready yet LDR r2, =polltick_pending STR r2, [r2, #0] ; set polltick_pending LDR r2, =tick_pending LDR r0, [r2, #0] CMPS r0, #0 MOVNES pc, lr ; tick already signalled LDR r0, =already_in_gc LDR r1, [r0, #0] CMPS r1, #0 BEQ not_in_gc LDR r2, =tick_on_gc_exit STR r1, [r2, #0] ; special case if garbage collecting MOVS pc, lr not_in_gc LDR r0, =C_nil ; use NIL as base-register LDR r0, [r0, #0] BIC r0, r0, #&80000000 ; clean up potential mark bit MOV r1, r0 MOV r3, #1 STR r3, [r2, #0] LDR r3, [r1, #76] LDR r2, =saveheaplimit STR r3, [r2, #0] LDR r2, [r1, #72] STR r2, [r1, #76] LDR r1, [r0, #80] LDR r2, =savevheaplimit STR r1, [r2, #0] LDR r1, [r0, #84] STR r1, [r0, #80] LDR r2, [r0, #56] LDR r1, =savecodelimit STR r2, [r1, #0] LDR r1, [r0, #52] STR r1, [r0, #56] LDR r2, [r0, #60] LDR r1, =savestacklimit STR r2, [r1, #0] LDR r1, =stackbase LDR r1, [r1, #0] STR r1, [r0, #60] MOVS pc, lr END