// 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