13b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 23b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 33b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// found in the LICENSE file. 43b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 53b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// A Disassembler object is used to disassemble a block of code instruction by 63b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// instruction. The default implementation of the NameConverter object can be 73b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// overriden to modify register names or to do symbol lookup on addresses. 83b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// 93b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// The example below will disassemble a block of code and print it to stdout. 103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// 113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// NameConverter converter; 123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Disassembler d(converter); 133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// for (byte* pc = begin; pc < end;) { 143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// v8::internal::EmbeddedVector<char, 256> buffer; 153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// byte* prev_pc = pc; 163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// pc += d.InstructionDecode(buffer, pc); 173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// printf("%p %08x %s\n", 183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer); 193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// } 203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// 213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// The Disassembler class also has a convenience method to disassemble a block 223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// of code into a FILE*, meaning that the above functionality could also be 233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// achieved by just calling Disassembler::Disassemble(stdout, begin, end); 243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include <assert.h> 263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include <stdarg.h> 273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include <stdio.h> 283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include <string.h> 293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#if V8_TARGET_ARCH_S390 313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/base/platform/platform.h" 333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/disasm.h" 343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/macro-assembler.h" 353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/s390/constants-s390.h" 363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochnamespace v8 { 383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochnamespace internal { 393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochconst auto GetRegConfig = RegisterConfiguration::Crankshaft; 4113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch 423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch//------------------------------------------------------------------------------ 433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Decoder decodes and disassembles instructions into an output buffer. 453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// It uses the converter to convert register names and call destinations into 463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// more informative description. 473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochclass Decoder { 483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch public: 493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Decoder(const disasm::NameConverter& converter, Vector<char> out_buffer) 503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch : converter_(converter), out_buffer_(out_buffer), out_buffer_pos_(0) { 513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_[out_buffer_pos_] = '\0'; 523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch ~Decoder() {} 553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Writes one disassembled instruction into 'buffer' (0-terminated). 573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Returns the length of the disassembled machine instruction in bytes. 583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int InstructionDecode(byte* instruction); 593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch private: 613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Bottleneck functions to print into the out_buffer. 623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void PrintChar(const char ch); 633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void Print(const char* str); 643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Printing of common values. 663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void PrintRegister(int reg); 673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void PrintDRegister(int reg); 683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void PrintSoftwareInterrupt(SoftwareInterruptCodes svc); 693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Handle formatting of instructions and their options. 713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int FormatRegister(Instruction* instr, const char* option); 723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int FormatFloatingRegister(Instruction* instr, const char* option); 733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int FormatMask(Instruction* instr, const char* option); 743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int FormatDisplacement(Instruction* instr, const char* option); 753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int FormatImmediate(Instruction* instr, const char* option); 763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int FormatOption(Instruction* instr, const char* option); 773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void Format(Instruction* instr, const char* format); 783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void Unknown(Instruction* instr); 793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch void UnknownFormat(Instruction* instr, const char* opcname); 803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch bool DecodeTwoByte(Instruction* instr); 823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch bool DecodeFourByte(Instruction* instr); 833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch bool DecodeSixByte(Instruction* instr); 843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch const disasm::NameConverter& converter_; 863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Vector<char> out_buffer_; 873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int out_buffer_pos_; 883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DISALLOW_COPY_AND_ASSIGN(Decoder); 903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}; 913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Support for assertions in the Decoder formatting functions. 933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#define STRING_STARTS_WITH(string, compare_string) \ 943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch (strncmp(string, compare_string, strlen(compare_string)) == 0) 953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Append the ch to the output buffer. 973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::PrintChar(const char ch) { out_buffer_[out_buffer_pos_++] = ch; } 983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Append the str to the output buffer. 1003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::Print(const char* str) { 1013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch char cur = *str++; 1023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch while (cur != '\0' && (out_buffer_pos_ < (out_buffer_.length() - 1))) { 1033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintChar(cur); 1043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch cur = *str++; 1053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 1063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_[out_buffer_pos_] = 0; 1073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 1083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Print the register name according to the active name converter. 1103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::PrintRegister(int reg) { 1113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print(converter_.NameOfCPURegister(reg)); 1123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 1133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Print the double FP register name according to the active name converter. 1153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::PrintDRegister(int reg) { 11613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch Print(GetRegConfig()->GetDoubleRegisterName(reg)); 1173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 1183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Print SoftwareInterrupt codes. Factoring this out reduces the complexity of 1203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// the FormatOption method. 1213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::PrintSoftwareInterrupt(SoftwareInterruptCodes svc) { 1223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch switch (svc) { 1233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case kCallRtRedirected: 1243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print("call rt redirected"); 1253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return; 1263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case kBreakpoint: 1273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print("breakpoint"); 1283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return; 1293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch default: 1303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (svc >= kStopCode) { 1313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d - 0x%x", 1323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch svc & kStopCodeMask, svc & kStopCodeMask); 1333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else { 1343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", svc); 1353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 1363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return; 1373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 1383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 1393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Handle all register based formatting in this function to reduce the 1413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// complexity of FormatOption. 1423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::FormatRegister(Instruction* instr, const char* format) { 1433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DCHECK(format[0] == 'r'); 1443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (format[1] == '1') { // 'r1: register resides in bit 8-11 1463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RRInstruction* rrinstr = reinterpret_cast<RRInstruction*>(instr); 1473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rrinstr->R1Value(); 1483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '2') { // 'r2: register resides in bit 12-15 1513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RRInstruction* rrinstr = reinterpret_cast<RRInstruction*>(instr); 1523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rrinstr->R2Value(); 1533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // indicating it is a r0 for displacement, in which case the offset 1543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // should be 0. 1553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (format[2] == 'd') { 1563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (reg == 0) return 4; 1573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 3; 1593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else { 1603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 1633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '3') { // 'r3: register resides in bit 16-19 1643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RSInstruction* rsinstr = reinterpret_cast<RSInstruction*>(instr); 1653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rsinstr->B2Value(); 1663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '4') { // 'r4: register resides in bit 20-23 1693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RSInstruction* rsinstr = reinterpret_cast<RSInstruction*>(instr); 1703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rsinstr->B2Value(); 1713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '5') { // 'r5: register resides in bit 24-28 1743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RREInstruction* rreinstr = reinterpret_cast<RREInstruction*>(instr); 1753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rreinstr->R1Value(); 1763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '6') { // 'r6: register resides in bit 29-32 1793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RREInstruction* rreinstr = reinterpret_cast<RREInstruction*>(instr); 1803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rreinstr->R2Value(); 1813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '7') { // 'r6: register resides in bit 32-35 1843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SSInstruction* ssinstr = reinterpret_cast<SSInstruction*>(instr); 1853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = ssinstr->B2Value(); 1863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintRegister(reg); 1873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 1883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 1893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); 1913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return -1; 1923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 1933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::FormatFloatingRegister(Instruction* instr, const char* format) { 1953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DCHECK(format[0] == 'f'); 1963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 1973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // reuse 1, 5 and 6 because it is coresponding 1983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (format[1] == '1') { // 'r1: register resides in bit 8-11 1993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RRInstruction* rrinstr = reinterpret_cast<RRInstruction*>(instr); 2003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rrinstr->R1Value(); 2013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintDRegister(reg); 2023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 2033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '2') { // 'f2: register resides in bit 12-15 2043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RRInstruction* rrinstr = reinterpret_cast<RRInstruction*>(instr); 2053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rrinstr->R2Value(); 2063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintDRegister(reg); 2073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 2083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '3') { // 'f3: register resides in bit 16-19 2093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RRDInstruction* rrdinstr = reinterpret_cast<RRDInstruction*>(instr); 2103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rrdinstr->R1Value(); 2113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintDRegister(reg); 2123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 2133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '5') { // 'f5: register resides in bit 24-28 2143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RREInstruction* rreinstr = reinterpret_cast<RREInstruction*>(instr); 2153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rreinstr->R1Value(); 2163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintDRegister(reg); 2173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 2183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '6') { // 'f6: register resides in bit 29-32 2193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RREInstruction* rreinstr = reinterpret_cast<RREInstruction*>(instr); 2203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int reg = rreinstr->R2Value(); 2213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch PrintDRegister(reg); 2223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 2233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); 2253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return -1; 2263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 2273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 2283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// FormatOption takes a formatting string and interprets it based on 2293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// the current instructions. The format string points to the first 2303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// character of the option string (the option escape has already been 2313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// consumed by the caller.) FormatOption returns the number of 2323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// characters that were consumed from the formatting string. 2333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::FormatOption(Instruction* instr, const char* format) { 2343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch switch (format[0]) { 2353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'o': { 2363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (instr->Bit(10) == 1) { 2373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print("o"); 2383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 1; 2403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case '.': { 2423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (instr->Bit(0) == 1) { 2433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print("."); 2443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else { 2453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print(" "); // ensure consistent spacing 2463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 1; 2483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'r': { 2503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return FormatRegister(instr, format); 2513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'f': { 2533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return FormatFloatingRegister(instr, format); 2543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'i': { // int16 2563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return FormatImmediate(instr, format); 2573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'u': { // uint16 2593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = instr->Bits(15, 0); 2603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 2613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 6; 2623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'l': { 2643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Link (LK) Bit 0 2653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (instr->Bit(0) == 1) { 2663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print("l"); 2673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 1; 2693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'a': { 2713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Absolute Address Bit 1 2723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (instr->Bit(1) == 1) { 2733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Print("a"); 2743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 1; 2763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 't': { // 'target: target of branch instructions 2783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // target26 or target16 2793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DCHECK(STRING_STARTS_WITH(format, "target")); 2803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if ((format[6] == '2') && (format[7] == '6')) { 2813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int off = ((instr->Bits(25, 2)) << 8) >> 6; 2823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF( 2833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_ + out_buffer_pos_, "%+d -> %s", off, 2843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + off)); 2853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 8; 2863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if ((format[6] == '1') && (format[7] == '6')) { 2873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int off = ((instr->Bits(15, 2)) << 18) >> 16; 2883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF( 2893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_ + out_buffer_pos_, "%+d -> %s", off, 2903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + off)); 2913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 8; 2923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'm': { 2943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return FormatMask(instr, format); 2953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 2973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case 'd': { // ds value for offset 2983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return FormatDisplacement(instr, format); 2993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 3003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch default: { 3013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); 3023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 3033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 3043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 3053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); 3073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return -1; 3083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 3093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::FormatMask(Instruction* instr, const char* format) { 3113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DCHECK(format[0] == 'm'); 3123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = 0; 3133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if ((format[1] == '1')) { // prints the mask format in bits 8-12 3143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch value = reinterpret_cast<RRInstruction*>(instr)->R1Value(); 3153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", value); 3163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '2') { // mask format in bits 16-19 3183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch value = reinterpret_cast<RXInstruction*>(instr)->B2Value(); 3193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", value); 3203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '3') { // mask format in bits 20-23 3223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch value = reinterpret_cast<RRFInstruction*>(instr)->M4Value(); 3233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", value); 3243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 3263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 3303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::FormatDisplacement(Instruction* instr, const char* format) { 3323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DCHECK(format[0] == 'd'); 3333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (format[1] == '1') { // displacement in 20-31 3353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RSInstruction* rsinstr = reinterpret_cast<RSInstruction*>(instr); 3363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint16_t value = rsinstr->D2Value(); 3373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '2') { // displacement in 20-39 3413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RXYInstruction* rxyinstr = reinterpret_cast<RXYInstruction*>(instr); 3423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = rxyinstr->D2Value(); 3433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '4') { // SS displacement 2 36-47 3463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SSInstruction* ssInstr = reinterpret_cast<SSInstruction*>(instr); 3473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint16_t value = ssInstr->D2Value(); 3483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '3') { // SS displacement 1 20 - 32 3513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SSInstruction* ssInstr = reinterpret_cast<SSInstruction*>(instr); 3523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint16_t value = ssInstr->D1Value(); 3533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else { // s390 specific 3563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = SIGN_EXT_IMM16(instr->Bits(15, 0) & ~3); 3573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 1; 3593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 3603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 3613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::FormatImmediate(Instruction* instr, const char* format) { 3633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DCHECK(format[0] == 'i'); 3643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (format[1] == '1') { // immediate in 16-31 3663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RIInstruction* riinstr = reinterpret_cast<RIInstruction*>(instr); 3673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int16_t value = riinstr->I2Value(); 3683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '2') { // immediate in 16-48 3713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RILInstruction* rilinstr = reinterpret_cast<RILInstruction*>(instr); 3723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = rilinstr->I2Value(); 3733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '3') { // immediate in I format 3763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch IInstruction* iinstr = reinterpret_cast<IInstruction*>(instr); 3773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int8_t value = iinstr->IValue(); 3783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 3793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '4') { // immediate in 16-31, but outputs as offset 3813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RIInstruction* riinstr = reinterpret_cast<RIInstruction*>(instr); 3823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int16_t value = riinstr->I2Value() * 2; 3833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (value >= 0) 3843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "*+"); 3853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch else 3863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "*"); 3873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 3883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF( 3893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_ + out_buffer_pos_, "%d -> %s", value, 3903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + value)); 3913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 3923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '5') { // immediate in 16-31, but outputs as offset 3933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RILInstruction* rilinstr = reinterpret_cast<RILInstruction*>(instr); 3943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = rilinstr->I2Value() * 2; 3953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (value >= 0) 3963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "*+"); 3973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch else 3983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "*"); 3993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF( 4013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_ + out_buffer_pos_, "%d -> %s", value, 4023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + value)); 4033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '6') { // unsigned immediate in 16-31 4053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RIInstruction* riinstr = reinterpret_cast<RIInstruction*>(instr); 4063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint16_t value = riinstr->I2UnsignedValue(); 4073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '7') { // unsigned immediate in 16-47 4103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RILInstruction* rilinstr = reinterpret_cast<RILInstruction*>(instr); 4113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint32_t value = rilinstr->I2UnsignedValue(); 4123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '8') { // unsigned immediate in 8-15 4153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SSInstruction* ssinstr = reinterpret_cast<SSInstruction*>(instr); 4163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint8_t value = ssinstr->Length(); 4173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == '9') { // unsigned immediate in 16-23 4203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RIEInstruction* rie_instr = reinterpret_cast<RIEInstruction*>(instr); 4213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint8_t value = rie_instr->I3Value(); 4223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == 'a') { // unsigned immediate in 24-31 4253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RIEInstruction* rie_instr = reinterpret_cast<RIEInstruction*>(instr); 4263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint8_t value = rie_instr->I4Value(); 4273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == 'b') { // unsigned immediate in 32-39 4303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RIEInstruction* rie_instr = reinterpret_cast<RIEInstruction*>(instr); 4313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch uint8_t value = rie_instr->I5Value(); 4323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == 'c') { // signed immediate in 8-15 4353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SSInstruction* ssinstr = reinterpret_cast<SSInstruction*>(instr); 4363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int8_t value = ssinstr->Length(); 4373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == 'd') { // signed immediate in 32-47 4403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SILInstruction* silinstr = reinterpret_cast<SILInstruction*>(instr); 4413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int16_t value = silinstr->I2Value(); 4423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", value); 4433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else if (format[1] == 'e') { // immediate in 16-47, but outputs as offset 4453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RILInstruction* rilinstr = reinterpret_cast<RILInstruction*>(instr); 4463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int32_t value = rilinstr->I2Value() * 2; 4473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (value >= 0) 4483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "*+"); 4493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch else 4503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "*"); 4513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF( 4533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_ + out_buffer_pos_, "%d -> %s", value, 4543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + value)); 4553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return 2; 4563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 4573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); 4593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return -1; 4603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 4613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Format takes a formatting string for a whole instruction and prints it into 4633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// the output buffer. All escaped options are handed to FormatOption to be 4643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// parsed further. 4653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::Format(Instruction* instr, const char* format) { 4663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch char cur = *format++; 4673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch while ((cur != 0) && (out_buffer_pos_ < (out_buffer_.length() - 1))) { 4683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (cur == '\'') { // Single quote is used as the formatting escape. 4693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch format += FormatOption(instr, format); 4703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } else { 4713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_[out_buffer_pos_++] = cur; 4723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 4733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch cur = *format++; 4743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 4753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_[out_buffer_pos_] = '\0'; 4763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 4773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// The disassembler may end up decoding data inlined in the code. We do not want 4793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// it to crash if the data does not ressemble any known instruction. 4803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#define VERIFY(condition) \ 4813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (!(condition)) { \ 4823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Unknown(instr); \ 4833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return; \ 4843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 4853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// For currently unimplemented decodings the disassembler calls Unknown(instr) 4873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// which will just print "unknown" of the instruction bits. 4883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::Unknown(Instruction* instr) { Format(instr, "unknown"); } 4893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// For currently unimplemented decodings the disassembler calls 4913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// UnknownFormat(instr) which will just print opcode name of the 4923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// instruction bits. 4933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Decoder::UnknownFormat(Instruction* instr, const char* name) { 4943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch char buffer[100]; 4953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch snprintf(buffer, sizeof(buffer), "%s (unknown-format)", name); 4963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, buffer); 4973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 4983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 4993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Disassembles Two Byte S390 Instructions 5003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// @return true if successfully decoded 5013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochbool Decoder::DecodeTwoByte(Instruction* instr) { 5023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Print the Instruction bits. 5033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%04x ", 5043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch instr->InstructionBits<TwoByteInstr>()); 5053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 5063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Opcode opcode = instr->S390OpcodeValue(); 5073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch switch (opcode) { 5083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AR: 5093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ar\t'r1,'r2"); 5103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SR: 5123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sr\t'r1,'r2"); 5133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MR: 5153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mr\t'r1,'r2"); 5163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DR: 5183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "dr\t'r1,'r2"); 5193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OR: 5213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "or\t'r1,'r2"); 5223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NR: 5243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "nr\t'r1,'r2"); 5253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XR: 5273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xr\t'r1,'r2"); 5283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LR: 5303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lr\t'r1,'r2"); 5313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CR: 5333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cr\t'r1,'r2"); 5343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLR: 5363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clr\t'r1,'r2"); 5373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BCR: 5393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "bcr\t'm1,'r2"); 5403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LTR: 5423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ltr\t'r1,'r2"); 5433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALR: 5453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "alr\t'r1,'r2"); 5463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLR: 5483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slr\t'r1,'r2"); 5493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LNR: 5513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lnr\t'r1,'r2"); 5523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LCR: 5543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lcr\t'r1,'r2"); 5553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BASR: 5573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "basr\t'r1,'r2"); 5583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LDR: 5603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ldr\t'f1,'f2"); 5613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BKPT: 5633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "bkpt"); 5643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 56562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case LPR: 56662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "lpr\t'r1, 'r2"); 56762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 5683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch default: 5693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return false; 5703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 5713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return true; 5723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 5733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 5743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Disassembles Four Byte S390 Instructions 5753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// @return true if successfully decoded 5763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochbool Decoder::DecodeFourByte(Instruction* instr) { 5773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Print the Instruction bits. 5783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%08x ", 5793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch instr->InstructionBits<FourByteInstr>()); 5803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 5813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Opcode opcode = instr->S390OpcodeValue(); 5823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch switch (opcode) { 5833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AHI: 5843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ahi\t'r1,'i1"); 5853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGHI: 5873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "aghi\t'r1,'i1"); 5883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LHI: 5903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lhi\t'r1,'i1"); 5913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGHI: 5933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lghi\t'r1,'i1"); 5943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MHI: 5963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mhi\t'r1,'i1"); 5973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 5983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MGHI: 5993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mghi\t'r1,'i1"); 6003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CHI: 6023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "chi\t'r1,'i1"); 6033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CGHI: 6053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cghi\t'r1,'i1"); 6063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BRAS: 6083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "bras\t'r1,'i1"); 6093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BRC: 6113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "brc\t'm1,'i4"); 6123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BRCT: 6143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "brct\t'r1,'i4"); 6153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BRCTG: 6173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "brctg\t'r1,'i4"); 6183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IIHH: 6203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "iihh\t'r1,'i1"); 6213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IIHL: 6233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "iihl\t'r1,'i1"); 6243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IILH: 6263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "iilh\t'r1,'i1"); 6273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IILL: 6293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "iill\t'r1,'i1"); 6303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OILL: 6323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "oill\t'r1,'i1"); 6333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case TMLL: 6353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "tmll\t'r1,'i1"); 6363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STM: 6383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stm\t'r1,'r2,'d1('r3)"); 6393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LM: 6413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lm\t'r1,'r2,'d1('r3)"); 6423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLL: 6443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sll\t'r1,'d1('r3)"); 6453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRL: 6473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srl\t'r1,'d1('r3)"); 6483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLA: 6503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sla\t'r1,'d1('r3)"); 6513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRA: 6533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sra\t'r1,'d1('r3)"); 6543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLDL: 6563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sldl\t'r1,'d1('r3)"); 6573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGR: 6593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "agr\t'r5,'r6"); 6603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGFR: 6623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "agfr\t'r5,'r6"); 6633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ARK: 6653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ark\t'r5,'r6,'r3"); 6663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGRK: 6683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "agrk\t'r5,'r6,'r3"); 6693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SGR: 6713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sgr\t'r5,'r6"); 6723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SGFR: 6743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sgfr\t'r5,'r6"); 6753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRK: 6773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srk\t'r5,'r6,'r3"); 6783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SGRK: 6803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sgrk\t'r5,'r6,'r3"); 6813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NGR: 6833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ngr\t'r5,'r6"); 6843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NRK: 6863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "nrk\t'r5,'r6,'r3"); 6873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NGRK: 6893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ngrk\t'r5,'r6,'r3"); 6903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NILL: 6923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "nill\t'r1,'i1"); 6933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NILH: 6953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "nilh\t'r1,'i1"); 6963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 6973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OGR: 6983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ogr\t'r5,'r6"); 6993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ORK: 7013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ork\t'r5,'r6,'r3"); 7023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OGRK: 7043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ogrk\t'r5,'r6,'r3"); 7053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XGR: 7073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xgr\t'r5,'r6"); 7083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XRK: 7103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xrk\t'r5,'r6,'r3"); 7113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XGRK: 7133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xgrk\t'r5,'r6,'r3"); 7143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 71562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CGFR: 71662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "cgfr\t'r5,'r6"); 71762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 7183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CGR: 7193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cgr\t'r5,'r6"); 7203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLGR: 7223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clgr\t'r5,'r6"); 7233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLGFR: 7253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llgfr\t'r5,'r6"); 7263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 72762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case POPCNT_Z: 72862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "popcnt\t'r5,'r6"); 72962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 73062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case LLGCR: 73162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "llgcr\t'r5,'r6"); 73262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 73362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case LLCR: 73462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "llcr\t'r5,'r6"); 73562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 7363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LBR: 7373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lbr\t'r5,'r6"); 7383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LEDBR: 7403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ledbr\t'f5,'f6"); 7413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LDEBR: 7433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ldebr\t'f5,'f6"); 7443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LTGR: 7463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ltgr\t'r5,'r6"); 7473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LTDBR: 7493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ltdbr\t'f5,'f6"); 7503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LTEBR: 7523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ltebr\t'f5,'f6"); 7533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 754f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LRVR: 755f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lrvr\t'r5,'r6"); 756f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 757f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LRVGR: 758f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lrvgr\t'r5,'r6"); 759f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 7603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGR: 7613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgr\t'r5,'r6"); 7623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGDR: 7643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgdr\t'r5,'f6"); 7653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGFR: 7673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgfr\t'r5,'r6"); 7683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LTGFR: 7703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ltgfr\t'r5,'r6"); 7713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LCGR: 7733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lcgr\t'r5,'r6"); 7743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MSR: 7763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "msr\t'r5,'r6"); 7773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 77862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case MSRKC: 77962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "msrkc\t'r5,'r6,'r3"); 78062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 7813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGBR: 7823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgbr\t'r5,'r6"); 7833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGHR: 7853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lghr\t'r5,'r6"); 7863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 7873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MSGR: 7883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "msgr\t'r5,'r6"); 7893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 79062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case MSGRKC: 79162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "msgrkc\t'r5,'r6,'r3"); 79262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 7933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DSGR: 7943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "dsgr\t'r5,'r6"); 7953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 79662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case DSGFR: 79762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "dsgfr\t'r5,'r6"); 79862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 79962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case MSGFR: 80062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "msgfr\t'r5,'r6"); 80162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 8023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LZDR: 8033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lzdr\t'f5"); 8043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MLR: 8063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mlr\t'r5,'r6"); 8073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MLGR: 8093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mlgr\t'r5,'r6"); 8103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALCR: 8123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "alcr\t'r5,'r6"); 8133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALGR: 8153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "algr\t'r5,'r6"); 8163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALRK: 8183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "alrk\t'r5,'r6,'r3"); 8193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALGRK: 8213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "algrk\t'r5,'r6,'r3"); 8223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLGR: 8243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slgr\t'r5,'r6"); 8253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLBR: 8273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slbr\t'r5,'r6"); 8283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DLR: 8303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "dlr\t'r5,'r6"); 8313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DLGR: 8333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "dlgr\t'r5,'r6"); 8343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLRK: 8363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slrk\t'r5,'r6,'r3"); 8373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLGRK: 8393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slgrk\t'r5,'r6,'r3"); 8403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LHR: 8423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lhr\t'r5,'r6"); 8433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLHR: 8453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llhr\t'r5,'r6"); 8463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLGHR: 8483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llghr\t'r5,'r6"); 8493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 850f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LOCR: 851f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "locr\t'm1,'r5,'r6"); 852f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 853f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LOCGR: 854f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "locgr\t'm1,'r5,'r6"); 855f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 8563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LNGR: 8573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lngr\t'r5,'r6"); 8583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case A: 8603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "a\t'r1,'d1('r2d,'r3)"); 8613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case S: 8633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "s\t'r1,'d1('r2d,'r3)"); 8643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case M: 8663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "m\t'r1,'d1('r2d,'r3)"); 8673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case D: 8693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "d\t'r1,'d1('r2d,'r3)"); 8703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case O: 8723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "o\t'r1,'d1('r2d,'r3)"); 8733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case N: 8753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "n\t'r1,'d1('r2d,'r3)"); 8763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case L: 8783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "l\t'r1,'d1('r2d,'r3)"); 8793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case C: 8813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "c\t'r1,'d1('r2d,'r3)"); 8823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AH: 8843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ah\t'r1,'d1('r2d,'r3)"); 8853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SH: 8873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sh\t'r1,'d1('r2d,'r3)"); 8883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MH: 8903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mh\t'r1,'d1('r2d,'r3)"); 8913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AL: 8933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "al\t'r1,'d1('r2d,'r3)"); 8943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SL: 8963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sl\t'r1,'d1('r2d,'r3)"); 8973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 8983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LA: 8993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "la\t'r1,'d1('r2d,'r3)"); 9003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CH: 9023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ch\t'r1,'d1('r2d,'r3)"); 9033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CL: 9053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cl\t'r1,'d1('r2d,'r3)"); 9063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLI: 9083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cli\t'd1('r3),'i8"); 9093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case TM: 9113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "tm\t'd1('r3),'i8"); 9123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BC: 9143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "bc\t'm1,'d1('r2d,'r3)"); 9153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BCT: 9173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "bct\t'r1,'d1('r2d,'r3)"); 9183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ST: 9203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "st\t'r1,'d1('r2d,'r3)"); 9213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STC: 9233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stc\t'r1,'d1('r2d,'r3)"); 9243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IC_z: 9263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ic\t'r1,'d1('r2d,'r3)"); 9273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LD: 9293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ld\t'f1,'d1('r2d,'r3)"); 9303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LE: 9323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "le\t'f1,'d1('r2d,'r3)"); 9333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LDGR: 9353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ldgr\t'f5,'r6"); 9363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 937f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case MS: 938f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "ms\t'r1,'d1('r2d,'r3)"); 939f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 9403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STE: 9413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ste\t'f1,'d1('r2d,'r3)"); 9423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STD: 9443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "std\t'f1,'d1('r2d,'r3)"); 9453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CFDBR: 9473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cfdbr\t'r5,'m2,'f6"); 9483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CDFBR: 9503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cdfbr\t'f5,'m2,'r6"); 9513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CFEBR: 9533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cfebr\t'r5,'m2,'f6"); 9543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CEFBR: 9563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cefbr\t'f5,'m2,'r6"); 9573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 958f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CELFBR: 959f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "celfbr\t'f5,'m2,'r6"); 960f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 9613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CGEBR: 9623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cgebr\t'r5,'m2,'f6"); 9633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CGDBR: 9653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cgdbr\t'r5,'m2,'f6"); 9663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CEGBR: 9683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cegbr\t'f5,'m2,'r6"); 9693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CDGBR: 9713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cdgbr\t'f5,'m2,'r6"); 9723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CDLFBR: 9743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cdlfbr\t'f5,'m2,'r6"); 9753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CDLGBR: 9773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cdlgbr\t'f5,'m2,'r6"); 9783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CELGBR: 9803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "celgbr\t'f5,'m2,'r6"); 9813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLFDBR: 9833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clfdbr\t'r5,'m2,'f6"); 9843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 985f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CLFEBR: 986f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "clfebr\t'r5,'m2,'f6"); 987f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 988f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CLGEBR: 989f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "clgebr\t'r5,'m2,'f6"); 990f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 9913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLGDBR: 9923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clgdbr\t'r5,'m2,'f6"); 9933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AEBR: 9953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "aebr\t'f5,'f6"); 9963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 9973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SEBR: 9983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sebr\t'f5,'f6"); 9993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MEEBR: 10013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "meebr\t'f5,'f6"); 10023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DEBR: 10043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "debr\t'f5,'f6"); 10053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ADBR: 10073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "adbr\t'f5,'f6"); 10083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SDBR: 10103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sdbr\t'f5,'f6"); 10113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MDBR: 10133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mdbr\t'f5,'f6"); 10143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DDBR: 10163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ddbr\t'f5,'f6"); 10173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CDBR: 10193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cdbr\t'f5,'f6"); 10203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CEBR: 10223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cebr\t'f5,'f6"); 10233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SQDBR: 10253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sqdbr\t'f5,'f6"); 10263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SQEBR: 10283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sqebr\t'f5,'f6"); 10293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LCDBR: 10313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lcdbr\t'f5,'f6"); 10323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 1033f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LCEBR: 1034f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lcebr\t'f5,'f6"); 1035f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 10363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STH: 10373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sth\t'r1,'d1('r2d,'r3)"); 10383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRDA: 10403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srda\t'r1,'d1('r3)"); 10413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRDL: 10433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srdl\t'r1,'d1('r3)"); 10443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MADBR: 10463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "madbr\t'f3,'f5,'f6"); 10473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MSDBR: 10493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "msdbr\t'f3,'f5,'f6"); 10503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case FLOGR: 10523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "flogr\t'r5,'r6"); 10533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case FIEBRA: 10553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "fiebra\t'f5,'m2,'f6,'m3"); 10563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case FIDBRA: 10583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "fidbra\t'f5,'m2,'f6,'m3"); 10593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // TRAP4 is used in calling to native function. it will not be generated 10613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // in native code. 10623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case TRAP4: { 10633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "trap4"); 10643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 10653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 106662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case LPGR: 106762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "lpgr\t'r1, 'r2"); 106862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 106962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case LPGFR: 107062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "lpgfr\t'r1,'r2"); 107162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 10723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch default: 10733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return false; 10743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 10753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return true; 10763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 10773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 10783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Disassembles Six Byte S390 Instructions 10793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// @return true if successfully decoded 10803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochbool Decoder::DecodeSixByte(Instruction* instr) { 10813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Print the Instruction bits. 10823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch out_buffer_pos_ += 10833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch SNPrintF(out_buffer_ + out_buffer_pos_, "%012" PRIx64 " ", 10843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch instr->InstructionBits<SixByteInstr>()); 10853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 10863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Opcode opcode = instr->S390OpcodeValue(); 10873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch switch (opcode) { 108862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case DUMY: 108962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "dumy\t'r1, 'd2 ( 'r2d, 'r3 )"); 109062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 109162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#define DECODE_VRR_C_INSTRUCTIONS(name, opcode_name, opcode_value) \ 109262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case opcode_name: \ 109362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, #name "\t'f1,'f2,'f3"); \ 109462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 109562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch S390_VRR_C_OPCODE_LIST(DECODE_VRR_C_INSTRUCTIONS) 109662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#undef DECODE_VRR_C_INSTRUCTIONS 10973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLILF: 10983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llilf\t'r1,'i7"); 10993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLIHF: 11013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llihf\t'r1,'i7"); 11023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AFI: 11043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "afi\t'r1,'i7"); 11053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 110662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case AIH: 110762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "aih\t'r1,'i7"); 110862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 11093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ASI: 11103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "asi\t'd2('r3),'ic"); 11113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGSI: 11133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "agsi\t'd2('r3),'ic"); 11143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALFI: 11163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "alfi\t'r1,'i7"); 11173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AHIK: 11193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ahik\t'r1,'r2,'i1"); 11203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGHIK: 11223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "aghik\t'r1,'r2,'i1"); 11233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLGFI: 11253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clgfi\t'r1,'i7"); 11263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLFI: 11283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clfi\t'r1,'i7"); 11293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 113062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CLIH: 113162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "clih\t'r1,'i7"); 113262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 113362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CIH: 113462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "cih\t'r1,'i2"); 113562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 11363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CFI: 11373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cfi\t'r1,'i2"); 11383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CGFI: 11403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cgfi\t'r1,'i2"); 11413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BRASL: 11433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "brasl\t'r1,'ie"); 11443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BRCL: 11463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "brcl\t'm1,'i5"); 11473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IIHF: 11493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "iihf\t'r1,'i7"); 11503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 1151f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LGFI: 1152f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lgfi\t'r1,'i7"); 1153f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 11543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case IILF: 11553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "iilf\t'r1,'i7"); 11563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XIHF: 11583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xihf\t'r1,'i7"); 11593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XILF: 11613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xilf\t'r1,'i7"); 11623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLLK: 11643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sllk\t'r1,'r2,'d2('r3)"); 11653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLLG: 11673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sllg\t'r1,'r2,'d2('r3)"); 11683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case RLL: 11703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "rll\t'r1,'r2,'d2('r3)"); 11713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case RLLG: 11733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "rllg\t'r1,'r2,'d2('r3)"); 11743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRLK: 11763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srlk\t'r1,'r2,'d2('r3)"); 11773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRLG: 11793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srlg\t'r1,'r2,'d2('r3)"); 11803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLAK: 11823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slak\t'r1,'r2,'d2('r3)"); 11833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLAG: 11853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slag\t'r1,'r2,'d2('r3)"); 11863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRAK: 11883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srak\t'r1,'r2,'d2('r3)"); 11893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SRAG: 11913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "srag\t'r1,'r2,'d2('r3)"); 11923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case RISBG: 11943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "risbg\t'r1,'r2,'i9,'ia,'ib"); 11953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 11963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case RISBGN: 11973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "risbgn\t'r1,'r2,'i9,'ia,'ib"); 11983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 1199f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LOCG: 1200f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "locg\t'm2,'r1,'d2('r3)"); 1201f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 1202f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LOC: 1203f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "loc\t'm2,'r1,'d2('r3)"); 1204f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 12053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LMY: 12063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lmy\t'r1,'r2,'d2('r3)"); 12073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LMG: 12093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lmg\t'r1,'r2,'d2('r3)"); 12103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STMY: 12123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stmy\t'r1,'r2,'d2('r3)"); 12133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STMG: 12153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stmg\t'r1,'r2,'d2('r3)"); 12163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LT: 12183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lt\t'r1,'d2('r2d,'r3)"); 12193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LTG: 12213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ltg\t'r1,'d2('r2d,'r3)"); 12223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ML: 12243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ml\t'r1,'d2('r2d,'r3)"); 12253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AY: 12273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ay\t'r1,'d2('r2d,'r3)"); 12283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SY: 12303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sy\t'r1,'d2('r2d,'r3)"); 12313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NY: 12333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ny\t'r1,'d2('r2d,'r3)"); 12343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OY: 12363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "oy\t'r1,'d2('r2d,'r3)"); 12373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XY: 12393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xy\t'r1,'d2('r2d,'r3)"); 12403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CY: 12423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cy\t'r1,'d2('r2d,'r3)"); 12433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AHY: 12453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ahy\t'r1,'d2('r2d,'r3)"); 12463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SHY: 12483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "shy\t'r1,'d2('r2d,'r3)"); 12493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGH: 12513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgh\t'r1,'d2('r2d,'r3)"); 12523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AG: 12543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ag\t'r1,'d2('r2d,'r3)"); 12553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case AGF: 12573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "agf\t'r1,'d2('r2d,'r3)"); 12583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SG: 12603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sg\t'r1,'d2('r2d,'r3)"); 12613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NG: 12633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ng\t'r1,'d2('r2d,'r3)"); 12643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OG: 12663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "og\t'r1,'d2('r2d,'r3)"); 12673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case XG: 12693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "xg\t'r1,'d2('r2d,'r3)"); 12703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CG: 12723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cg\t'r1,'d2('r2d,'r3)"); 12733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LB: 12753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lb\t'r1,'d2('r2d,'r3)"); 12763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 1277f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LRVH: 1278f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lrvh\t'r1,'d2('r2d,'r3)"); 1279f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 1280f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LRV: 1281f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lrv\t'r1,'d2('r2d,'r3)"); 1282f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 1283f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case LRVG: 1284f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "lrvg\t'r1,'d2('r2d,'r3)"); 1285f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 12863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LG: 12873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lg\t'r1,'d2('r2d,'r3)"); 12883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGF: 12903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgf\t'r1,'d2('r2d,'r3)"); 12913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLGF: 12933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llgf\t'r1,'d2('r2d,'r3)"); 12943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LY: 12963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ly\t'r1,'d2('r2d,'r3)"); 12973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 12983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALY: 12993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "aly\t'r1,'d2('r2d,'r3)"); 13003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALG: 13023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "alg\t'r1,'d2('r2d,'r3)"); 13033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLG: 13053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slg\t'r1,'d2('r2d,'r3)"); 13063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SGF: 13083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sgf\t'r1,'d2('r2d,'r3)"); 13093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLY: 13113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sly\t'r1,'d2('r2d,'r3)"); 13123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLH: 13143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llh\t'r1,'d2('r2d,'r3)"); 13153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLGH: 13173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llgh\t'r1,'d2('r2d,'r3)"); 13183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLC: 13203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llc\t'r1,'d2('r2d,'r3)"); 13213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LLGC: 13233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "llgc\t'r1,'d2('r2d,'r3)"); 13243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LDEB: 13263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ldeb\t'f1,'d2('r2d,'r3)"); 13273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LAY: 13293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lay\t'r1,'d2('r2d,'r3)"); 13303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LARL: 13323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "larl\t'r1,'i5"); 13333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LGB: 13353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "lgb\t'r1,'d2('r2d,'r3)"); 13363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CHY: 13383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "chy\t'r1,'d2('r2d,'r3)"); 13393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLY: 13413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cly\t'r1,'d2('r2d,'r3)"); 13423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLIY: 13443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "cliy\t'd2('r3),'i8"); 13453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case TMY: 13473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "tmy\t'd2('r3),'i8"); 13483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case CLG: 13503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "clg\t'r1,'d2('r2d,'r3)"); 13513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case BCTG: 13533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "bctg\t'r1,'d2('r2d,'r3)"); 13543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STY: 13563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sty\t'r1,'d2('r2d,'r3)"); 13573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 1358f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case STRVH: 1359f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "strvh\t'r1,'d2('r2d,'r3)"); 1360f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 1361f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case STRV: 1362f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "strv\t'r1,'d2('r2d,'r3)"); 1363f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 1364f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case STRVG: 1365f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "strvg\t'r1,'d2('r2d,'r3)"); 1366f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 13673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STG: 13683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stg\t'r1,'d2('r2d,'r3)"); 13693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ICY: 13713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "icy\t'r1,'d2('r2d,'r3)"); 13723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MVC: 13743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mvc\t'd3('i8,'r3),'d4('r7)"); 13753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MVHI: 13773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mvhi\t'd3('r3),'id"); 13783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MVGHI: 13803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mvghi\t'd3('r3),'id"); 13813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ALGFI: 13833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "algfi\t'r1,'i7"); 13843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLGFI: 13863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slgfi\t'r1,'i7"); 13873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SLFI: 13893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "slfi\t'r1,'i7"); 13903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NIHF: 13923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "nihf\t'r1,'i7"); 13933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case NILF: 13953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "nilf\t'r1,'i7"); 13963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 13973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OIHF: 13983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "oihf\t'r1,'i7"); 13993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case OILF: 14013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "oilf\t'r1,'i7"); 14023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MSFI: 14043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "msfi\t'r1,'i7"); 14053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MSGFI: 14073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "msgfi\t'r1,'i7"); 14083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LDY: 14103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ldy\t'f1,'d2('r2d,'r3)"); 14113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case LEY: 14133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ley\t'f1,'d2('r2d,'r3)"); 14143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 1415f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case MSG: 1416f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "msg\t'r1,'d2('r2d,'r3)"); 1417f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 141862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case DSG: 141962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "dsg\t'r1,'d2('r2d,'r3)"); 142062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 142162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case DSGF: 142262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "dsgf\t'r1,'d2('r2d,'r3)"); 142362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 142462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case MSGF: 142562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "msgf\t'r1,'d2('r2d,'r3)"); 142662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 1427f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case MSY: 1428f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Format(instr, "msy\t'r1,'d2('r2d,'r3)"); 1429f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch break; 14303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STEY: 14313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stey\t'f1,'d2('r2d,'r3)"); 14323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case STDY: 14343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "stdy\t'f1,'d2('r2d,'r3)"); 14353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case ADB: 143762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "adb\t'f1,'d1('r2d, 'r3)"); 143862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 143962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CDB: 144062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "cdb\t'f1,'d1('r2d, 'r3)"); 144162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 144262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CEB: 144362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "ceb\t'f1,'d1('r2d, 'r3)"); 14443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SDB: 14463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sdb\t'r1,'d1('r2d, 'r3)"); 14473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case MDB: 14493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "mdb\t'r1,'d1('r2d, 'r3)"); 14503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case DDB: 14523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "ddb\t'r1,'d1('r2d, 'r3)"); 14533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 14543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch case SQDB: 14553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Format(instr, "sqdb\t'r1,'d1('r2d, 'r3)"); 14563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch break; 145762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case PFD: 145862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Format(instr, "pfd\t'm1,'d2('r2d,'r3)"); 145962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch break; 14603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch default: 14613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return false; 14623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 14633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return true; 14643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 14653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#undef VERIFIY 14673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Disassemble the instruction at *instr_ptr into the output buffer. 14693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Decoder::InstructionDecode(byte* instr_ptr) { 14703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Instruction* instr = Instruction::At(instr_ptr); 14713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch int instrLength = instr->InstructionLength(); 14723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch if (2 == instrLength) 14743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DecodeTwoByte(instr); 14753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch else if (4 == instrLength) 14763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DecodeFourByte(instr); 14773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch else 14783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch DecodeSixByte(instr); 14793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return instrLength; 14813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 14823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} // namespace internal 14843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} // namespace v8 14853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch//------------------------------------------------------------------------------ 14873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochnamespace disasm { 14893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst char* NameConverter::NameOfAddress(byte* addr) const { 149113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch v8::internal::SNPrintF(tmp_buffer_, "%p", static_cast<void*>(addr)); 14923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return tmp_buffer_.start(); 14933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 14943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst char* NameConverter::NameOfConstant(byte* addr) const { 14963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return NameOfAddress(addr); 14973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 14983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 14993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst char* NameConverter::NameOfCPURegister(int reg) const { 150013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch return v8::internal::GetRegConfig()->GetGeneralRegisterName(reg); 15013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 15023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst char* NameConverter::NameOfByteCPURegister(int reg) const { 15043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); // S390 does not have the concept of a byte register 15053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return "nobytereg"; 15063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 15073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst char* NameConverter::NameOfXMMRegister(int reg) const { 15093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // S390 does not have XMM register 15103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // TODO(joransiu): Consider update this for Vector Regs 15113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch UNREACHABLE(); 15123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return "noxmmreg"; 15133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 15143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst char* NameConverter::NameInCode(byte* addr) const { 15163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // The default name converter is called for unknown code. So we will not try 15173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // to access any memory. 15183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return ""; 15193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 15203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch//------------------------------------------------------------------------------ 15223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben MurdochDisassembler::Disassembler(const NameConverter& converter) 15243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch : converter_(converter) {} 15253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben MurdochDisassembler::~Disassembler() {} 15273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Disassembler::InstructionDecode(v8::internal::Vector<char> buffer, 15293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch byte* instruction) { 15303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch v8::internal::Decoder d(converter_, buffer); 15313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return d.InstructionDecode(instruction); 15323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 15333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// The S390 assembler does not currently use constant pools. 15353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochint Disassembler::ConstantPoolSizeAt(byte* instruction) { return -1; } 15363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid Disassembler::Disassemble(FILE* f, byte* begin, byte* end) { 15383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch NameConverter converter; 15393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Disassembler d(converter); 15403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch for (byte* pc = begin; pc < end;) { 15413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch v8::internal::EmbeddedVector<char, 128> buffer; 15423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch buffer[0] = '\0'; 15433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch byte* prev_pc = pc; 15443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch pc += d.InstructionDecode(buffer, pc); 154513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch v8::internal::PrintF(f, "%p %08x %s\n", static_cast<void*>(prev_pc), 15463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); 15473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch } 15483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} 15493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch} // namespace disasm 15513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch 15523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#endif // V8_TARGET_ARCH_S390 1553