Ben Murdoch | da12d29 | 2016-06-02 14:46:10 +0100 | [diff] [blame] | 1 | // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #if V8_TARGET_ARCH_S390 |
| 6 | |
| 7 | #include "src/s390/constants-s390.h" |
| 8 | |
| 9 | namespace v8 { |
| 10 | namespace internal { |
| 11 | |
Ben Murdoch | c561043 | 2016-08-08 18:44:38 +0100 | [diff] [blame] | 12 | Instruction::OpcodeFormatType Instruction::OpcodeFormatTable[] = { |
| 13 | // Based on Figure B-3 in z/Architecture Principles of |
| 14 | // Operation. |
| 15 | TWO_BYTE_OPCODE, // 0x00 |
| 16 | TWO_BYTE_OPCODE, // 0x01 |
| 17 | TWO_BYTE_DISJOINT_OPCODE, // 0x02 |
| 18 | TWO_BYTE_DISJOINT_OPCODE, // 0x03 |
| 19 | ONE_BYTE_OPCODE, // 0x04 |
| 20 | ONE_BYTE_OPCODE, // 0x05 |
| 21 | ONE_BYTE_OPCODE, // 0x06 |
| 22 | ONE_BYTE_OPCODE, // 0x07 |
| 23 | ONE_BYTE_OPCODE, // 0x08 |
| 24 | ONE_BYTE_OPCODE, // 0x09 |
| 25 | ONE_BYTE_OPCODE, // 0x0a |
| 26 | ONE_BYTE_OPCODE, // 0x0b |
| 27 | ONE_BYTE_OPCODE, // 0x0c |
| 28 | ONE_BYTE_OPCODE, // 0x0d |
| 29 | ONE_BYTE_OPCODE, // 0x0e |
| 30 | ONE_BYTE_OPCODE, // 0x0f |
| 31 | ONE_BYTE_OPCODE, // 0x10 |
| 32 | ONE_BYTE_OPCODE, // 0x11 |
| 33 | ONE_BYTE_OPCODE, // 0x12 |
| 34 | ONE_BYTE_OPCODE, // 0x13 |
| 35 | ONE_BYTE_OPCODE, // 0x14 |
| 36 | ONE_BYTE_OPCODE, // 0x15 |
| 37 | ONE_BYTE_OPCODE, // 0x16 |
| 38 | ONE_BYTE_OPCODE, // 0x17 |
| 39 | ONE_BYTE_OPCODE, // 0x18 |
| 40 | ONE_BYTE_OPCODE, // 0x19 |
| 41 | ONE_BYTE_OPCODE, // 0x1a |
| 42 | ONE_BYTE_OPCODE, // 0x1b |
| 43 | ONE_BYTE_OPCODE, // 0x1c |
| 44 | ONE_BYTE_OPCODE, // 0x1d |
| 45 | ONE_BYTE_OPCODE, // 0x1e |
| 46 | ONE_BYTE_OPCODE, // 0x1f |
| 47 | ONE_BYTE_OPCODE, // 0x20 |
| 48 | ONE_BYTE_OPCODE, // 0x21 |
| 49 | ONE_BYTE_OPCODE, // 0x22 |
| 50 | ONE_BYTE_OPCODE, // 0x23 |
| 51 | ONE_BYTE_OPCODE, // 0x24 |
| 52 | ONE_BYTE_OPCODE, // 0x25 |
| 53 | ONE_BYTE_OPCODE, // 0x26 |
| 54 | ONE_BYTE_OPCODE, // 0x27 |
| 55 | ONE_BYTE_OPCODE, // 0x28 |
| 56 | ONE_BYTE_OPCODE, // 0x29 |
| 57 | ONE_BYTE_OPCODE, // 0x2a |
| 58 | ONE_BYTE_OPCODE, // 0x2b |
| 59 | ONE_BYTE_OPCODE, // 0x2c |
| 60 | ONE_BYTE_OPCODE, // 0x2d |
| 61 | ONE_BYTE_OPCODE, // 0x2e |
| 62 | ONE_BYTE_OPCODE, // 0x2f |
| 63 | ONE_BYTE_OPCODE, // 0x30 |
| 64 | ONE_BYTE_OPCODE, // 0x31 |
| 65 | ONE_BYTE_OPCODE, // 0x32 |
| 66 | ONE_BYTE_OPCODE, // 0x33 |
| 67 | ONE_BYTE_OPCODE, // 0x34 |
| 68 | ONE_BYTE_OPCODE, // 0x35 |
| 69 | ONE_BYTE_OPCODE, // 0x36 |
| 70 | ONE_BYTE_OPCODE, // 0x37 |
| 71 | ONE_BYTE_OPCODE, // 0x38 |
| 72 | ONE_BYTE_OPCODE, // 0x39 |
| 73 | ONE_BYTE_OPCODE, // 0x3a |
| 74 | ONE_BYTE_OPCODE, // 0x3b |
| 75 | ONE_BYTE_OPCODE, // 0x3c |
| 76 | ONE_BYTE_OPCODE, // 0x3d |
| 77 | ONE_BYTE_OPCODE, // 0x3e |
| 78 | ONE_BYTE_OPCODE, // 0x3f |
| 79 | ONE_BYTE_OPCODE, // 0x40 |
| 80 | ONE_BYTE_OPCODE, // 0x41 |
| 81 | ONE_BYTE_OPCODE, // 0x42 |
| 82 | ONE_BYTE_OPCODE, // 0x43 |
| 83 | ONE_BYTE_OPCODE, // 0x44 |
| 84 | ONE_BYTE_OPCODE, // 0x45 |
| 85 | ONE_BYTE_OPCODE, // 0x46 |
| 86 | ONE_BYTE_OPCODE, // 0x47 |
| 87 | ONE_BYTE_OPCODE, // 0x48 |
| 88 | ONE_BYTE_OPCODE, // 0x49 |
| 89 | ONE_BYTE_OPCODE, // 0x4a |
| 90 | ONE_BYTE_OPCODE, // 0x4b |
| 91 | ONE_BYTE_OPCODE, // 0x4c |
| 92 | ONE_BYTE_OPCODE, // 0x4d |
| 93 | ONE_BYTE_OPCODE, // 0x4e |
| 94 | ONE_BYTE_OPCODE, // 0x4f |
| 95 | ONE_BYTE_OPCODE, // 0x50 |
| 96 | ONE_BYTE_OPCODE, // 0x51 |
| 97 | ONE_BYTE_OPCODE, // 0x52 |
| 98 | ONE_BYTE_OPCODE, // 0x53 |
| 99 | ONE_BYTE_OPCODE, // 0x54 |
| 100 | ONE_BYTE_OPCODE, // 0x55 |
| 101 | ONE_BYTE_OPCODE, // 0x56 |
| 102 | ONE_BYTE_OPCODE, // 0x57 |
| 103 | ONE_BYTE_OPCODE, // 0x58 |
| 104 | ONE_BYTE_OPCODE, // 0x59 |
| 105 | ONE_BYTE_OPCODE, // 0x5a |
| 106 | ONE_BYTE_OPCODE, // 0x5b |
| 107 | ONE_BYTE_OPCODE, // 0x5c |
| 108 | ONE_BYTE_OPCODE, // 0x5d |
| 109 | ONE_BYTE_OPCODE, // 0x5e |
| 110 | ONE_BYTE_OPCODE, // 0x5f |
| 111 | ONE_BYTE_OPCODE, // 0x60 |
| 112 | ONE_BYTE_OPCODE, // 0x61 |
| 113 | ONE_BYTE_OPCODE, // 0x62 |
| 114 | ONE_BYTE_OPCODE, // 0x63 |
| 115 | ONE_BYTE_OPCODE, // 0x64 |
| 116 | ONE_BYTE_OPCODE, // 0x65 |
| 117 | ONE_BYTE_OPCODE, // 0x66 |
| 118 | ONE_BYTE_OPCODE, // 0x67 |
| 119 | ONE_BYTE_OPCODE, // 0x68 |
| 120 | ONE_BYTE_OPCODE, // 0x69 |
| 121 | ONE_BYTE_OPCODE, // 0x6a |
| 122 | ONE_BYTE_OPCODE, // 0x6b |
| 123 | ONE_BYTE_OPCODE, // 0x6c |
| 124 | ONE_BYTE_OPCODE, // 0x6d |
| 125 | ONE_BYTE_OPCODE, // 0x6e |
| 126 | ONE_BYTE_OPCODE, // 0x6f |
| 127 | ONE_BYTE_OPCODE, // 0x70 |
| 128 | ONE_BYTE_OPCODE, // 0x71 |
| 129 | ONE_BYTE_OPCODE, // 0x72 |
| 130 | ONE_BYTE_OPCODE, // 0x73 |
| 131 | ONE_BYTE_OPCODE, // 0x74 |
| 132 | ONE_BYTE_OPCODE, // 0x75 |
| 133 | ONE_BYTE_OPCODE, // 0x76 |
| 134 | ONE_BYTE_OPCODE, // 0x77 |
| 135 | ONE_BYTE_OPCODE, // 0x78 |
| 136 | ONE_BYTE_OPCODE, // 0x79 |
| 137 | ONE_BYTE_OPCODE, // 0x7a |
| 138 | ONE_BYTE_OPCODE, // 0x7b |
| 139 | ONE_BYTE_OPCODE, // 0x7c |
| 140 | ONE_BYTE_OPCODE, // 0x7d |
| 141 | ONE_BYTE_OPCODE, // 0x7e |
| 142 | ONE_BYTE_OPCODE, // 0x7f |
| 143 | ONE_BYTE_OPCODE, // 0x80 |
| 144 | ONE_BYTE_OPCODE, // 0x81 |
| 145 | ONE_BYTE_OPCODE, // 0x82 |
| 146 | ONE_BYTE_OPCODE, // 0x83 |
| 147 | ONE_BYTE_OPCODE, // 0x84 |
| 148 | ONE_BYTE_OPCODE, // 0x85 |
| 149 | ONE_BYTE_OPCODE, // 0x86 |
| 150 | ONE_BYTE_OPCODE, // 0x87 |
| 151 | ONE_BYTE_OPCODE, // 0x88 |
| 152 | ONE_BYTE_OPCODE, // 0x89 |
| 153 | ONE_BYTE_OPCODE, // 0x8a |
| 154 | ONE_BYTE_OPCODE, // 0x8b |
| 155 | ONE_BYTE_OPCODE, // 0x8c |
| 156 | ONE_BYTE_OPCODE, // 0x8d |
| 157 | ONE_BYTE_OPCODE, // 0x8e |
| 158 | ONE_BYTE_OPCODE, // 0x8f |
| 159 | ONE_BYTE_OPCODE, // 0x90 |
| 160 | ONE_BYTE_OPCODE, // 0x91 |
| 161 | ONE_BYTE_OPCODE, // 0x92 |
| 162 | ONE_BYTE_OPCODE, // 0x93 |
| 163 | ONE_BYTE_OPCODE, // 0x94 |
| 164 | ONE_BYTE_OPCODE, // 0x95 |
| 165 | ONE_BYTE_OPCODE, // 0x96 |
| 166 | ONE_BYTE_OPCODE, // 0x97 |
| 167 | ONE_BYTE_OPCODE, // 0x98 |
| 168 | ONE_BYTE_OPCODE, // 0x99 |
| 169 | ONE_BYTE_OPCODE, // 0x9a |
| 170 | ONE_BYTE_OPCODE, // 0x9b |
| 171 | TWO_BYTE_DISJOINT_OPCODE, // 0x9c |
| 172 | TWO_BYTE_DISJOINT_OPCODE, // 0x9d |
| 173 | TWO_BYTE_DISJOINT_OPCODE, // 0x9e |
| 174 | TWO_BYTE_DISJOINT_OPCODE, // 0x9f |
| 175 | TWO_BYTE_DISJOINT_OPCODE, // 0xa0 |
| 176 | TWO_BYTE_DISJOINT_OPCODE, // 0xa1 |
| 177 | TWO_BYTE_DISJOINT_OPCODE, // 0xa2 |
| 178 | TWO_BYTE_DISJOINT_OPCODE, // 0xa3 |
| 179 | TWO_BYTE_DISJOINT_OPCODE, // 0xa4 |
| 180 | THREE_NIBBLE_OPCODE, // 0xa5 |
| 181 | TWO_BYTE_DISJOINT_OPCODE, // 0xa6 |
| 182 | THREE_NIBBLE_OPCODE, // 0xa7 |
| 183 | ONE_BYTE_OPCODE, // 0xa8 |
| 184 | ONE_BYTE_OPCODE, // 0xa9 |
| 185 | ONE_BYTE_OPCODE, // 0xaa |
| 186 | ONE_BYTE_OPCODE, // 0xab |
| 187 | ONE_BYTE_OPCODE, // 0xac |
| 188 | ONE_BYTE_OPCODE, // 0xad |
| 189 | ONE_BYTE_OPCODE, // 0xae |
| 190 | ONE_BYTE_OPCODE, // 0xaf |
| 191 | ONE_BYTE_OPCODE, // 0xb0 |
| 192 | ONE_BYTE_OPCODE, // 0xb1 |
| 193 | TWO_BYTE_OPCODE, // 0xb2 |
| 194 | TWO_BYTE_OPCODE, // 0xb3 |
| 195 | TWO_BYTE_DISJOINT_OPCODE, // 0xb4 |
| 196 | TWO_BYTE_DISJOINT_OPCODE, // 0xb5 |
| 197 | TWO_BYTE_DISJOINT_OPCODE, // 0xb6 |
| 198 | TWO_BYTE_DISJOINT_OPCODE, // 0xb7 |
| 199 | TWO_BYTE_DISJOINT_OPCODE, // 0xb8 |
| 200 | TWO_BYTE_OPCODE, // 0xb9 |
| 201 | ONE_BYTE_OPCODE, // 0xba |
| 202 | ONE_BYTE_OPCODE, // 0xbb |
| 203 | ONE_BYTE_OPCODE, // 0xbc |
| 204 | ONE_BYTE_OPCODE, // 0xbd |
| 205 | ONE_BYTE_OPCODE, // 0xbe |
| 206 | ONE_BYTE_OPCODE, // 0xbf |
| 207 | THREE_NIBBLE_OPCODE, // 0xc0 |
| 208 | THREE_NIBBLE_OPCODE, // 0xc1 |
| 209 | THREE_NIBBLE_OPCODE, // 0xc2 |
| 210 | THREE_NIBBLE_OPCODE, // 0xc3 |
| 211 | THREE_NIBBLE_OPCODE, // 0xc4 |
| 212 | THREE_NIBBLE_OPCODE, // 0xc5 |
| 213 | THREE_NIBBLE_OPCODE, // 0xc6 |
| 214 | ONE_BYTE_OPCODE, // 0xc7 |
| 215 | THREE_NIBBLE_OPCODE, // 0xc8 |
| 216 | THREE_NIBBLE_OPCODE, // 0xc9 |
| 217 | THREE_NIBBLE_OPCODE, // 0xca |
| 218 | THREE_NIBBLE_OPCODE, // 0xcb |
| 219 | THREE_NIBBLE_OPCODE, // 0xcc |
| 220 | TWO_BYTE_DISJOINT_OPCODE, // 0xcd |
| 221 | TWO_BYTE_DISJOINT_OPCODE, // 0xce |
| 222 | TWO_BYTE_DISJOINT_OPCODE, // 0xcf |
| 223 | ONE_BYTE_OPCODE, // 0xd0 |
| 224 | ONE_BYTE_OPCODE, // 0xd1 |
| 225 | ONE_BYTE_OPCODE, // 0xd2 |
| 226 | ONE_BYTE_OPCODE, // 0xd3 |
| 227 | ONE_BYTE_OPCODE, // 0xd4 |
| 228 | ONE_BYTE_OPCODE, // 0xd5 |
| 229 | ONE_BYTE_OPCODE, // 0xd6 |
| 230 | ONE_BYTE_OPCODE, // 0xd7 |
| 231 | ONE_BYTE_OPCODE, // 0xd8 |
| 232 | ONE_BYTE_OPCODE, // 0xd9 |
| 233 | ONE_BYTE_OPCODE, // 0xda |
| 234 | ONE_BYTE_OPCODE, // 0xdb |
| 235 | ONE_BYTE_OPCODE, // 0xdc |
| 236 | ONE_BYTE_OPCODE, // 0xdd |
| 237 | ONE_BYTE_OPCODE, // 0xde |
| 238 | ONE_BYTE_OPCODE, // 0xdf |
| 239 | ONE_BYTE_OPCODE, // 0xe0 |
| 240 | ONE_BYTE_OPCODE, // 0xe1 |
| 241 | ONE_BYTE_OPCODE, // 0xe2 |
| 242 | TWO_BYTE_DISJOINT_OPCODE, // 0xe3 |
| 243 | TWO_BYTE_DISJOINT_OPCODE, // 0xe4 |
| 244 | TWO_BYTE_OPCODE, // 0xe5 |
| 245 | TWO_BYTE_DISJOINT_OPCODE, // 0xe6 |
| 246 | TWO_BYTE_DISJOINT_OPCODE, // 0xe7 |
| 247 | ONE_BYTE_OPCODE, // 0xe8 |
| 248 | ONE_BYTE_OPCODE, // 0xe9 |
| 249 | ONE_BYTE_OPCODE, // 0xea |
| 250 | TWO_BYTE_DISJOINT_OPCODE, // 0xeb |
| 251 | TWO_BYTE_DISJOINT_OPCODE, // 0xec |
| 252 | TWO_BYTE_DISJOINT_OPCODE, // 0xed |
| 253 | ONE_BYTE_OPCODE, // 0xee |
| 254 | ONE_BYTE_OPCODE, // 0xef |
| 255 | ONE_BYTE_OPCODE, // 0xf0 |
| 256 | ONE_BYTE_OPCODE, // 0xf1 |
| 257 | ONE_BYTE_OPCODE, // 0xf2 |
| 258 | ONE_BYTE_OPCODE, // 0xf3 |
| 259 | ONE_BYTE_OPCODE, // 0xf4 |
| 260 | ONE_BYTE_OPCODE, // 0xf5 |
| 261 | ONE_BYTE_OPCODE, // 0xf6 |
| 262 | ONE_BYTE_OPCODE, // 0xf7 |
| 263 | ONE_BYTE_OPCODE, // 0xf8 |
| 264 | ONE_BYTE_OPCODE, // 0xf9 |
| 265 | ONE_BYTE_OPCODE, // 0xfa |
| 266 | ONE_BYTE_OPCODE, // 0xfb |
| 267 | ONE_BYTE_OPCODE, // 0xfc |
| 268 | ONE_BYTE_OPCODE, // 0xfd |
| 269 | TWO_BYTE_DISJOINT_OPCODE, // 0xfe |
| 270 | TWO_BYTE_DISJOINT_OPCODE, // 0xff |
| 271 | }; |
| 272 | |
Ben Murdoch | da12d29 | 2016-06-02 14:46:10 +0100 | [diff] [blame] | 273 | // These register names are defined in a way to match the native disassembler |
| 274 | // formatting. See for example the command "objdump -d <binary file>". |
| 275 | const char* Registers::names_[kNumRegisters] = { |
| 276 | "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", |
| 277 | "r8", "r9", "r10", "fp", "ip", "r13", "r14", "sp"}; |
| 278 | |
| 279 | const char* DoubleRegisters::names_[kNumDoubleRegisters] = { |
| 280 | "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", |
| 281 | "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"}; |
| 282 | |
| 283 | int DoubleRegisters::Number(const char* name) { |
| 284 | for (int i = 0; i < kNumDoubleRegisters; i++) { |
| 285 | if (strcmp(names_[i], name) == 0) { |
| 286 | return i; |
| 287 | } |
| 288 | } |
| 289 | |
| 290 | // No register with the requested name found. |
| 291 | return kNoRegister; |
| 292 | } |
| 293 | |
| 294 | int Registers::Number(const char* name) { |
| 295 | // Look through the canonical names. |
| 296 | for (int i = 0; i < kNumRegisters; i++) { |
| 297 | if (strcmp(names_[i], name) == 0) { |
| 298 | return i; |
| 299 | } |
| 300 | } |
| 301 | |
| 302 | // No register with the requested name found. |
| 303 | return kNoRegister; |
| 304 | } |
| 305 | |
| 306 | } // namespace internal |
| 307 | } // namespace v8 |
| 308 | |
| 309 | #endif // V8_TARGET_ARCH_S390 |