/// <summary> /// Register: Register address, Immediate address, and Base-Offset addressing formats of the SB/SH instructions. /// </summary> private static void RegisterMemoryStoreInstructions([NotNull] InstructionRegistry registry) { const Int32 MEMORY_STORE_OPCODE = 8; Tuple <string, Int32>[] memory_store_instructions = { /* (Mnemonic, Function) */ new Tuple <string, Int32>("sb", 7), new Tuple <string, Int32>("sh", 6), }; // Add Register, Immediate, and BaseOffset formats for each instruction. foreach (var pair in memory_store_instructions) { registry.Register(InstructionDefinitionFactory.CreateRRInstruction( pair.Item1, MEMORY_STORE_OPCODE, pair.Item2)); // SH $t0, $t1 :=: *($t1) = $t0 registry.Register(InstructionDefinitionFactory.CreateRISourceRegisterUnusedInstruction( pair.Item1, MEMORY_STORE_OPCODE, pair.Item2)); // SH $t0, 0xFF :=: *(0xFF) = $t0 registry.Register(InstructionDefinitionFactory.CreateBaseOffsetInstruction( pair.Item1, MEMORY_STORE_OPCODE, pair.Item2)); // SH $t0, 0xFF($t1) :=: *($t1 + 0xFF) = $t0 } }
/// <summary> /// Register: Register address, Immediate address, and Base-Offset addressing formats of the LB/LBU/LH instructions. /// </summary> private static void RegisterMemoryLoadInstructions([NotNull] InstructionRegistry registry) { const Int32 MEMORY_LOAD_OPCODE = 7; Tuple <string, Int32>[] memory_load_instructions = { /* (Mnemonic, Function) */ new Tuple <string, Int32>("lb", 3), new Tuple <string, Int32>("lbu", 4), new Tuple <string, Int32>("lh", 1), }; // Add Register, Immediate, and BaseOffset formats for each instruction. foreach (var pair in memory_load_instructions) { registry.Register(InstructionDefinitionFactory.CreateRRInstruction( pair.Item1, MEMORY_LOAD_OPCODE, pair.Item2)); // LH $t0, $t1 :=: $t0 = *($t1) registry.Register(InstructionDefinitionFactory.CreateRISourceRegisterUnusedInstruction( pair.Item1, MEMORY_LOAD_OPCODE, pair.Item2)); // LH $t0, 0xFF :=: $t0 = *(0xFF) registry.Register(InstructionDefinitionFactory.CreateBaseOffsetInstruction( pair.Item1, MEMORY_LOAD_OPCODE, pair.Item2)); // LH $t0, 0xFF($t1) :=: $t0 = *($t1 + 0xFF) } }