blob: 81036c285bf6aea4677de5d41bbd71d216ba9df9 [file] [log] [blame]
// 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/codegen/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