<<>> <> <> <> <<>> DIRECTORY BreakWorldArchitecture, MIPSArchitecture, TargetArchitecture, MIPSBreakWorldUtilities; MIPSBreakWorldUtilitiesImpl: CEDAR PROGRAM IMPORTS BreakWorldArchitecture, MIPSArchitecture, TargetArchitecture EXPORTS MIPSBreakWorldUtilities ~ { MIPSInstructionFromBreakWorldAddress: PUBLIC PROCEDURE [ address: BreakWorldArchitecture.Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement] RETURNS [MIPSArchitecture.MIPSInstruction] ~ { IF address.IsNullAddress[] THEN { ERROR BreakWorldArchitecture.Cant[ code: $NullAddress, message: "MIPSInstructionFromBreakWorldAddress[nullAddress]"]; }; { instruction: MIPSArchitecture.MIPSInstruction ~ MIPSArchitecture.MIPSInstructionFromTargetInstruction[ instruction: BreakWorldArchitecture.PeekInstruction[ pc: address, displacement: displacement]]; RETURN [instruction]; }; }; MIPSAddressFromBreakWorldAddress: PUBLIC PROCEDURE [ address: BreakWorldArchitecture.Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement] RETURNS [MIPSArchitecture.MIPSAddress] ~ { IF address.IsNullAddress[] THEN { ERROR BreakWorldArchitecture.Cant[ code: $NullAddress, message: "MIPSInstructionFromBreakWorldAddress[nullAddress]"]; }; { targetAddress: TargetArchitecture.Address ~ TargetArchitecture.AddressFromDisplacement[ address: BreakWorldArchitecture.TargetAddressFromBreakWorldAddress[address: address], displacement: displacement]; mipsAddress: MIPSArchitecture.MIPSAddress ~ MIPSArchitecture.MIPSAddressFromTargetAddress[ address: targetAddress]; RETURN [mipsAddress]; }; }; }.