h_stubs 2.8 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 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
; 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.
;
; Copyright (C) Acorn Computers Ltd., 1988
; Note that the module header only needs to know that the
; size of the block has to be stored in its 1st word, with the
; 2 relocation offsets following immediately after.

                ^       0               ; Offsets in global workspace
blocksize       #       4
libRelocation   #       4
clientRelocation #      4
fixedwssize     #       0

        GBLS    VBar
VBar    SETS    "|"

        MACRO
        Entry   $sym, $import, $sym2, $direct, $varargs, $directlocal
        LCLS    temps
temps   SETS    "$VBar":CC:"$sym":CC:"$VBar"
        EXPORT  $temps
$temps  MOV     pc, #0
        MEND

        MACRO
        Entry2  $sym, $import, $sym2, $direct, $varargs, $directlocal, $alias
        LCLS    temps
        LCLS    temps1
temps   SETS    "$VBar":CC:"$sym":CC:"$VBar"
temps1  SETS    "$VBar":CC:"$alias":CC:"$VBar"
        EXPORT  $temps
        EXPORT  $temps1
$temps1
$temps  MOV     pc, #0
        MEND



        MACRO
$Label  Variable $Size
        LCLA    Tempa
        LCLS    Temps
 [ "$Size"=""
Tempa   SETA    1
 |
Tempa   SETA    $Size
 ]
Temps   SETS    VBar:CC:"_stub_$Label":CC:VBar
        KEEP    $Temps
        ALIGN
$Temps  %       &$Tempa*4
        MEND

        MACRO
$Label  Alias $VariableName, $WordOffset
        LCLS    Temps
Temps   SETS    VBar:CC:"$Label":CC:VBar
        EXPORT  $Temps
$Temps   *      $VariableName + 4*$WordOffset
        MEND

        MACRO
$Label  ExportedVariable $Size
        LCLA    Tempa
        LCLS    Temps
 [ "$Size"=""
Tempa   SETA    1
 |
Tempa   SETA    $Size
 ]
Temps   SETS    VBar:CC:"$Label":CC:VBar
        EXPORT  $Temps
        ALIGN
$Temps  %       &$Tempa*4
        MEND

        MACRO
$Label  ExportedWord $Value
        LCLS    Temps
Temps   SETS    VBar:CC:"$Label":CC:VBar
        EXPORT  $Temps
        ALIGN
$Temps  %       4
        MEND

        MACRO
$Label  VariableByte $Size
        LCLA    Tempa
        LCLS    Temps
 [ "$Size"=""
Tempa   SETA    1
 |
Tempa   SETA    $Size
 ]
Temps   SETS    VBar:CC:"_stub_$Label":CC:VBar
        KEEP    $Temps
$Temps  %       &$Tempa
        MEND

        MACRO
$Label  InitByte $Value
$Label  VariableByte 1
        MEND

        MACRO
$Label  InitWord $Value
$Label  %      4
        MEND

        END