
Chapter 3 Assembly Language Programming
189
argcount
reserved
fp
Figure 3-7.
Interrupt Procedure Tag Words
0 0 0 0 0 0 0 0 0 M T
msize
31
23
15
7
0
local registers
temps.
normal one–word procedure tag
0 0 0 0 0 0 0 0 C
19
return registers
Q
I
F
interrupt tag
en will be very much dependant on the operating system in use. For example, some
operating systems may process interrupts in User mode with address translation in
use. Others may process interrupts in Supervisor mode with physical addressing.
The C bit is set if the procedure calls any other procedure (excluding transparent
routines). That is, the C bit is set if the procedure is not a child. When a another proce-
dure is called, it may be necessary to have the register stack repaired before the first
procedure is entered. The
local registers
bit–field indicates the number of registers
required from the register stack cache. However, other procedures called by the first
procedure may require additional local registers. Note that large leaf routines may
require local registers but of course the C bit will still not be set. When the C bit is set,
preparation code is unlikely to scan the other bit–fields as it is usually necessary to
assume that called functions may perform any 29K operation.
The F bit will be set if any floating–point operations are performed. Most 29K
family members do not directly support floating–point instructions but take a trap
when a floating–point instruction is encountered. Trap handlers can not be entered
from Freeze mode and execution of a floating–point operation could modify the state
of floating–point accumulators (Am29050) or coprocessor (Am29027) status regi-
setrs.
The I bit is set if any of the indirect pointer registers (IPA, IPB and IPC) are mo-
dified by the procedure. These registers would be effected by a call to a transparent
helper routine which issues a trap. The High C 29K compiler uses a transparent rou-
tine to perform integer multiply with most 29K family members. If the I bit is set then
interrupt preparation code would be required to preserve the indirect pointer registers
before entering the first procedure. The Q bit is set when the Q register (
sr131
) is mo-
dified. This registers is used during floating–point and integer multiply and divide
emulation routines.
The 29K calling convention states that a procedure return its results in global
registers
gr96–gr111
. An interrupt handler routines does not have any return value.
However, it may use registers in this range to hold temporary values during proce-