Memory 1.79 KB
Newer Older
Neil Turton's avatar
Neil Turton committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
; Copyright 1996 Acorn Computers Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
;     http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; > s.Memory

17 18 19 20
; Small veneer between AMBControl's memory block requirements and OS_Heap,
; using system heap. This is changed since Ursula - old code called OS_Module
; and claimed blocks from RMA, which is an anachronism since code is in
; the kernel.
Neil Turton's avatar
Neil Turton committed
21

22 23 24
; quantise sizes to reduce heap stress
;
AMBblockQ  * 64
Neil Turton's avatar
Neil Turton committed
25 26


27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
;in:  r3=size
;out: r2 -> block, r0 corrupted
;
AMB_BlockClaim ROUT
        Push    "r1,r3,lr"
        ADD     r3,r3,#AMBblockQ - 1
        BIC     r3,r3,#AMBblockQ - 1
        BL      ClaimSysHeapNode
        Pull    "r1,r3,pc"

;in:  r2 -> block
;out: r0 corrupted
;
AMB_BlockFree ROUT
        Push    "r1,lr"
        BL      FreeSysHeapNode
        Pull    "r1,pc"
Neil Turton's avatar
Neil Turton committed
44

45 46 47 48 49 50 51 52 53 54 55 56 57
;in:  r2 -> block, r3 = new size
;out: r2 -> new block, r0 corrupted
;
AMB_BlockResize ROUT
        Push    "r1,r3,lr"
        ADD     r3,r3,#AMBblockQ - 1
        BIC     r3,r3,#AMBblockQ - 1
        LDR     r1,[r2,#-4]                  ;pick up OS_Heap's size word (naughty!)
        SUB     r1,r1,#8                     ;heap size will be 8 more than quantised size
        SUBS    r3,r3,r1                     ;required size change
        MOVNE   r0, #HeapReason_ExtendBlock
        BLNE    DoSysHeapOpWithExtension
        Pull    "r1,r3,pc"
Neil Turton's avatar
Neil Turton committed
58 59 60


        END