| // Copyright 2015 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #if V8_TARGET_ARCH_S390 |
| |
| #include "src/s390/constants-s390.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| Instruction::OpcodeFormatType Instruction::OpcodeFormatTable[] = { |
| // Based on Figure B-3 in z/Architecture Principles of |
| // Operation. |
| TWO_BYTE_OPCODE, // 0x00 |
| TWO_BYTE_OPCODE, // 0x01 |
| TWO_BYTE_DISJOINT_OPCODE, // 0x02 |
| TWO_BYTE_DISJOINT_OPCODE, // 0x03 |
| ONE_BYTE_OPCODE, // 0x04 |
| ONE_BYTE_OPCODE, // 0x05 |
| ONE_BYTE_OPCODE, // 0x06 |
| ONE_BYTE_OPCODE, // 0x07 |
| ONE_BYTE_OPCODE, // 0x08 |
| ONE_BYTE_OPCODE, // 0x09 |
| ONE_BYTE_OPCODE, // 0x0A |
| ONE_BYTE_OPCODE, // 0x0B |
| ONE_BYTE_OPCODE, // 0x0C |
| ONE_BYTE_OPCODE, // 0x0D |
| ONE_BYTE_OPCODE, // 0x0E |
| ONE_BYTE_OPCODE, // 0x0F |
| ONE_BYTE_OPCODE, // 0x10 |
| ONE_BYTE_OPCODE, // 0x11 |
| ONE_BYTE_OPCODE, // 0x12 |
| ONE_BYTE_OPCODE, // 0x13 |
| ONE_BYTE_OPCODE, // 0x14 |
| ONE_BYTE_OPCODE, // 0x15 |
| ONE_BYTE_OPCODE, // 0x16 |
| ONE_BYTE_OPCODE, // 0x17 |
| ONE_BYTE_OPCODE, // 0x18 |
| ONE_BYTE_OPCODE, // 0x19 |
| ONE_BYTE_OPCODE, // 0x1A |
| ONE_BYTE_OPCODE, // 0x1B |
| ONE_BYTE_OPCODE, // 0x1C |
| ONE_BYTE_OPCODE, // 0x1D |
| ONE_BYTE_OPCODE, // 0x1E |
| ONE_BYTE_OPCODE, // 0x1F |
| ONE_BYTE_OPCODE, // 0x20 |
| ONE_BYTE_OPCODE, // 0x21 |
| ONE_BYTE_OPCODE, // 0x22 |
| ONE_BYTE_OPCODE, // 0x23 |
| ONE_BYTE_OPCODE, // 0x24 |
| ONE_BYTE_OPCODE, // 0x25 |
| ONE_BYTE_OPCODE, // 0x26 |
| ONE_BYTE_OPCODE, // 0x27 |
| ONE_BYTE_OPCODE, // 0x28 |
| ONE_BYTE_OPCODE, // 0x29 |
| ONE_BYTE_OPCODE, // 0x2A |
| ONE_BYTE_OPCODE, // 0x2B |
| ONE_BYTE_OPCODE, // 0x2C |
| ONE_BYTE_OPCODE, // 0x2D |
| ONE_BYTE_OPCODE, // 0x2E |
| ONE_BYTE_OPCODE, // 0x2F |
| ONE_BYTE_OPCODE, // 0x30 |
| ONE_BYTE_OPCODE, // 0x31 |
| ONE_BYTE_OPCODE, // 0x32 |
| ONE_BYTE_OPCODE, // 0x33 |
| ONE_BYTE_OPCODE, // 0x34 |
| ONE_BYTE_OPCODE, // 0x35 |
| ONE_BYTE_OPCODE, // 0x36 |
| ONE_BYTE_OPCODE, // 0x37 |
| ONE_BYTE_OPCODE, // 0x38 |
| ONE_BYTE_OPCODE, // 0x39 |
| ONE_BYTE_OPCODE, // 0x3A |
| ONE_BYTE_OPCODE, // 0x3B |
| ONE_BYTE_OPCODE, // 0x3C |
| ONE_BYTE_OPCODE, // 0x3D |
| ONE_BYTE_OPCODE, // 0x3E |
| ONE_BYTE_OPCODE, // 0x3F |
| ONE_BYTE_OPCODE, // 0x40 |
| ONE_BYTE_OPCODE, // 0x41 |
| ONE_BYTE_OPCODE, // 0x42 |
| ONE_BYTE_OPCODE, // 0x43 |
| ONE_BYTE_OPCODE, // 0x44 |
| ONE_BYTE_OPCODE, // 0x45 |
| ONE_BYTE_OPCODE, // 0x46 |
| ONE_BYTE_OPCODE, // 0x47 |
| ONE_BYTE_OPCODE, // 0x48 |
| ONE_BYTE_OPCODE, // 0x49 |
| ONE_BYTE_OPCODE, // 0x4A |
| ONE_BYTE_OPCODE, // 0x4B |
| ONE_BYTE_OPCODE, // 0x4C |
| ONE_BYTE_OPCODE, // 0x4D |
| ONE_BYTE_OPCODE, // 0x4E |
| ONE_BYTE_OPCODE, // 0x4F |
| ONE_BYTE_OPCODE, // 0x50 |
| ONE_BYTE_OPCODE, // 0x51 |
| ONE_BYTE_OPCODE, // 0x52 |
| ONE_BYTE_OPCODE, // 0x53 |
| ONE_BYTE_OPCODE, // 0x54 |
| ONE_BYTE_OPCODE, // 0x55 |
| ONE_BYTE_OPCODE, // 0x56 |
| ONE_BYTE_OPCODE, // 0x57 |
| ONE_BYTE_OPCODE, // 0x58 |
| ONE_BYTE_OPCODE, // 0x59 |
| ONE_BYTE_OPCODE, // 0x5A |
| ONE_BYTE_OPCODE, // 0x5B |
| ONE_BYTE_OPCODE, // 0x5C |
| ONE_BYTE_OPCODE, // 0x5D |
| ONE_BYTE_OPCODE, // 0x5E |
| ONE_BYTE_OPCODE, // 0x5F |
| ONE_BYTE_OPCODE, // 0x60 |
| ONE_BYTE_OPCODE, // 0x61 |
| ONE_BYTE_OPCODE, // 0x62 |
| ONE_BYTE_OPCODE, // 0x63 |
| ONE_BYTE_OPCODE, // 0x64 |
| ONE_BYTE_OPCODE, // 0x65 |
| ONE_BYTE_OPCODE, // 0x66 |
| ONE_BYTE_OPCODE, // 0x67 |
| ONE_BYTE_OPCODE, // 0x68 |
| ONE_BYTE_OPCODE, // 0x69 |
| ONE_BYTE_OPCODE, // 0x6A |
| ONE_BYTE_OPCODE, // 0x6B |
| ONE_BYTE_OPCODE, // 0x6C |
| ONE_BYTE_OPCODE, // 0x6D |
| ONE_BYTE_OPCODE, // 0x6E |
| ONE_BYTE_OPCODE, // 0x6F |
| ONE_BYTE_OPCODE, // 0x70 |
| ONE_BYTE_OPCODE, // 0x71 |
| ONE_BYTE_OPCODE, // 0x72 |
| ONE_BYTE_OPCODE, // 0x73 |
| ONE_BYTE_OPCODE, // 0x74 |
| ONE_BYTE_OPCODE, // 0x75 |
| ONE_BYTE_OPCODE, // 0x76 |
| ONE_BYTE_OPCODE, // 0x77 |
| ONE_BYTE_OPCODE, // 0x78 |
| ONE_BYTE_OPCODE, // 0x79 |
| ONE_BYTE_OPCODE, // 0x7A |
| ONE_BYTE_OPCODE, // 0x7B |
| ONE_BYTE_OPCODE, // 0x7C |
| ONE_BYTE_OPCODE, // 0x7D |
| ONE_BYTE_OPCODE, // 0x7E |
| ONE_BYTE_OPCODE, // 0x7F |
| ONE_BYTE_OPCODE, // 0x80 |
| ONE_BYTE_OPCODE, // 0x81 |
| ONE_BYTE_OPCODE, // 0x82 |
| ONE_BYTE_OPCODE, // 0x83 |
| ONE_BYTE_OPCODE, // 0x84 |
| ONE_BYTE_OPCODE, // 0x85 |
| ONE_BYTE_OPCODE, // 0x86 |
| ONE_BYTE_OPCODE, // 0x87 |
| ONE_BYTE_OPCODE, // 0x88 |
| ONE_BYTE_OPCODE, // 0x89 |
| ONE_BYTE_OPCODE, // 0x8A |
| ONE_BYTE_OPCODE, // 0x8B |
| ONE_BYTE_OPCODE, // 0x8C |
| ONE_BYTE_OPCODE, // 0x8D |
| ONE_BYTE_OPCODE, // 0x8E |
| ONE_BYTE_OPCODE, // 0x8F |
| ONE_BYTE_OPCODE, // 0x90 |
| ONE_BYTE_OPCODE, // 0x91 |
| ONE_BYTE_OPCODE, // 0x92 |
| ONE_BYTE_OPCODE, // 0x93 |
| ONE_BYTE_OPCODE, // 0x94 |
| ONE_BYTE_OPCODE, // 0x95 |
| ONE_BYTE_OPCODE, // 0x96 |
| ONE_BYTE_OPCODE, // 0x97 |
| ONE_BYTE_OPCODE, // 0x98 |
| ONE_BYTE_OPCODE, // 0x99 |
| ONE_BYTE_OPCODE, // 0x9A |
| ONE_BYTE_OPCODE, // 0x9B |
| TWO_BYTE_DISJOINT_OPCODE, // 0x9C |
| TWO_BYTE_DISJOINT_OPCODE, // 0x9D |
| TWO_BYTE_DISJOINT_OPCODE, // 0x9E |
| TWO_BYTE_DISJOINT_OPCODE, // 0x9F |
| TWO_BYTE_DISJOINT_OPCODE, // 0xA0 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xA1 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xA2 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xA3 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xA4 |
| THREE_NIBBLE_OPCODE, // 0xA5 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xA6 |
| THREE_NIBBLE_OPCODE, // 0xA7 |
| ONE_BYTE_OPCODE, // 0xA8 |
| ONE_BYTE_OPCODE, // 0xA9 |
| ONE_BYTE_OPCODE, // 0xAA |
| ONE_BYTE_OPCODE, // 0xAB |
| ONE_BYTE_OPCODE, // 0xAC |
| ONE_BYTE_OPCODE, // 0xAD |
| ONE_BYTE_OPCODE, // 0xAE |
| ONE_BYTE_OPCODE, // 0xAF |
| ONE_BYTE_OPCODE, // 0xB0 |
| ONE_BYTE_OPCODE, // 0xB1 |
| TWO_BYTE_OPCODE, // 0xB2 |
| TWO_BYTE_OPCODE, // 0xB3 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xB4 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xB5 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xB6 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xB7 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xB8 |
| TWO_BYTE_OPCODE, // 0xB9 |
| ONE_BYTE_OPCODE, // 0xBA |
| ONE_BYTE_OPCODE, // 0xBB |
| ONE_BYTE_OPCODE, // 0xBC |
| ONE_BYTE_OPCODE, // 0xBD |
| ONE_BYTE_OPCODE, // 0xBE |
| ONE_BYTE_OPCODE, // 0xBF |
| THREE_NIBBLE_OPCODE, // 0xC0 |
| THREE_NIBBLE_OPCODE, // 0xC1 |
| THREE_NIBBLE_OPCODE, // 0xC2 |
| THREE_NIBBLE_OPCODE, // 0xC3 |
| THREE_NIBBLE_OPCODE, // 0xC4 |
| THREE_NIBBLE_OPCODE, // 0xC5 |
| THREE_NIBBLE_OPCODE, // 0xC6 |
| ONE_BYTE_OPCODE, // 0xC7 |
| THREE_NIBBLE_OPCODE, // 0xC8 |
| THREE_NIBBLE_OPCODE, // 0xC9 |
| THREE_NIBBLE_OPCODE, // 0xCA |
| THREE_NIBBLE_OPCODE, // 0xCB |
| THREE_NIBBLE_OPCODE, // 0xCC |
| TWO_BYTE_DISJOINT_OPCODE, // 0xCD |
| TWO_BYTE_DISJOINT_OPCODE, // 0xCE |
| TWO_BYTE_DISJOINT_OPCODE, // 0xCF |
| ONE_BYTE_OPCODE, // 0xD0 |
| ONE_BYTE_OPCODE, // 0xD1 |
| ONE_BYTE_OPCODE, // 0xD2 |
| ONE_BYTE_OPCODE, // 0xD3 |
| ONE_BYTE_OPCODE, // 0xD4 |
| ONE_BYTE_OPCODE, // 0xD5 |
| ONE_BYTE_OPCODE, // 0xD6 |
| ONE_BYTE_OPCODE, // 0xD7 |
| ONE_BYTE_OPCODE, // 0xD8 |
| ONE_BYTE_OPCODE, // 0xD9 |
| ONE_BYTE_OPCODE, // 0xDA |
| ONE_BYTE_OPCODE, // 0xDB |
| ONE_BYTE_OPCODE, // 0xDC |
| ONE_BYTE_OPCODE, // 0xDD |
| ONE_BYTE_OPCODE, // 0xDE |
| ONE_BYTE_OPCODE, // 0xDF |
| ONE_BYTE_OPCODE, // 0xE0 |
| ONE_BYTE_OPCODE, // 0xE1 |
| ONE_BYTE_OPCODE, // 0xE2 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xE3 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xE4 |
| TWO_BYTE_OPCODE, // 0xE5 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xE6 |
| TWO_BYTE_DISJOINT_OPCODE, // 0xE7 |
| ONE_BYTE_OPCODE, // 0xE8 |
| ONE_BYTE_OPCODE, // 0xE9 |
| ONE_BYTE_OPCODE, // 0xEA |
| TWO_BYTE_DISJOINT_OPCODE, // 0xEB |
| TWO_BYTE_DISJOINT_OPCODE, // 0xEC |
| TWO_BYTE_DISJOINT_OPCODE, // 0xED |
| ONE_BYTE_OPCODE, // 0xEE |
| ONE_BYTE_OPCODE, // 0xEF |
| ONE_BYTE_OPCODE, // 0xF0 |
| ONE_BYTE_OPCODE, // 0xF1 |
| ONE_BYTE_OPCODE, // 0xF2 |
| ONE_BYTE_OPCODE, // 0xF3 |
| ONE_BYTE_OPCODE, // 0xF4 |
| ONE_BYTE_OPCODE, // 0xF5 |
| ONE_BYTE_OPCODE, // 0xF6 |
| ONE_BYTE_OPCODE, // 0xF7 |
| ONE_BYTE_OPCODE, // 0xF8 |
| ONE_BYTE_OPCODE, // 0xF9 |
| ONE_BYTE_OPCODE, // 0xFA |
| ONE_BYTE_OPCODE, // 0xFB |
| ONE_BYTE_OPCODE, // 0xFC |
| ONE_BYTE_OPCODE, // 0xFD |
| TWO_BYTE_DISJOINT_OPCODE, // 0xFE |
| TWO_BYTE_DISJOINT_OPCODE, // 0xFF |
| }; |
| |
| // These register names are defined in a way to match the native disassembler |
| // formatting. See for example the command "objdump -d <binary file>". |
| const char* Registers::names_[kNumRegisters] = { |
| "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", |
| "r8", "r9", "r10", "fp", "ip", "r13", "r14", "sp"}; |
| |
| const char* DoubleRegisters::names_[kNumDoubleRegisters] = { |
| "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", |
| "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"}; |
| |
| int DoubleRegisters::Number(const char* name) { |
| for (int i = 0; i < kNumDoubleRegisters; i++) { |
| if (strcmp(names_[i], name) == 0) { |
| return i; |
| } |
| } |
| |
| // No register with the requested name found. |
| return kNoRegister; |
| } |
| |
| int Registers::Number(const char* name) { |
| // Look through the canonical names. |
| for (int i = 0; i < kNumRegisters; i++) { |
| if (strcmp(names_[i], name) == 0) { |
| return i; |
| } |
| } |
| |
| // No register with the requested name found. |
| return kNoRegister; |
| } |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_TARGET_ARCH_S390 |