variants:
SELECT
COMPUTED MangerVariant
FROM
Manger variants are ``computed'' by examining the ``tag'' field.
normal => [
no delay slot
sheep1: MIPSArchitecture.MIPSInstruction,
sheep2: MIPSArchitecture.MIPSInstruction,
normalContinue: MIPSArchitecture.MIPSInstruction,
normalNoop: MIPSArchitecture.MIPSInstruction,
tag: MIPSArchitecture.MIPSInstruction,
breakpointPC: MIPSArchitecture.MIPSContents],
branch => [
has simple delay slot
branchB: MIPSArchitecture.MIPSInstruction,
branchDelay: MIPSArchitecture.MIPSInstruction,
branchContinue: MIPSArchitecture.MIPSInstruction,
branchNoop: MIPSArchitecture.MIPSInstruction,
tag: MIPSArchitecture.MIPSInstruction,
breakpointPC: MIPSArchitecture.MIPSContents],
call => [
has delay slot, and have to get return address pointed to breakpoint address, since callee computes return point.
Use a call to get to the patch.
callJ: MIPSArchitecture.MIPSInstruction,
callNoop: MIPSArchitecture.MIPSInstruction,
dummy1: MIPSArchitecture.MIPSInstruction,
dummy2: MIPSArchitecture.MIPSInstruction,
tag: MIPSArchitecture.MIPSInstruction,
breakpointPC: MIPSArchitecture.MIPSContents],
jump => [
has delay slot, and is an unconditional branch.
jumpJ: MIPSArchitecture.MIPSInstruction,
jumpNoop: MIPSArchitecture.MIPSInstruction,
dummy1: MIPSArchitecture.MIPSInstruction,
dummy2: MIPSArchitecture.MIPSInstruction,
tag: MIPSArchitecture.MIPSInstruction,
breakpointPC: MIPSArchitecture.MIPSContents]
ENDCASE
MangerVariant:
TYPE ~ {
noneOfTheAbove, normal, branch, call, jump
};