OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_PPC_CONSTANTS_PPC_H_ | 5 #ifndef V8_PPC_CONSTANTS_PPC_H_ |
6 #define V8_PPC_CONSTANTS_PPC_H_ | 6 #define V8_PPC_CONSTANTS_PPC_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "src/base/logging.h" | 10 #include "src/base/logging.h" |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 LFS = 48 << 26, // Load Floating-Point Single | 138 LFS = 48 << 26, // Load Floating-Point Single |
139 LFSU = 49 << 26, // Load Floating-Point Single with Update | 139 LFSU = 49 << 26, // Load Floating-Point Single with Update |
140 LFD = 50 << 26, // Load Floating-Point Double | 140 LFD = 50 << 26, // Load Floating-Point Double |
141 LFDU = 51 << 26, // Load Floating-Point Double with Update | 141 LFDU = 51 << 26, // Load Floating-Point Double with Update |
142 STFS = 52 << 26, // Store Floating-Point Single | 142 STFS = 52 << 26, // Store Floating-Point Single |
143 STFSU = 53 << 26, // Store Floating-Point Single with Update | 143 STFSU = 53 << 26, // Store Floating-Point Single with Update |
144 STFD = 54 << 26, // Store Floating-Point Double | 144 STFD = 54 << 26, // Store Floating-Point Double |
145 STFDU = 55 << 26, // Store Floating-Point Double with Update | 145 STFDU = 55 << 26, // Store Floating-Point Double with Update |
146 LD = 58 << 26, // Load Double Word | 146 LD = 58 << 26, // Load Double Word |
147 EXT3 = 59 << 26, // Extended code set 3 | 147 EXT3 = 59 << 26, // Extended code set 3 |
| 148 EXT6 = 60 << 26, // Extended code set 6 |
148 STD = 62 << 26, // Store Double Word (optionally with Update) | 149 STD = 62 << 26, // Store Double Word (optionally with Update) |
149 EXT4 = 63 << 26 // Extended code set 4 | 150 EXT4 = 63 << 26 // Extended code set 4 |
150 }; | 151 }; |
151 | 152 |
152 // Bits 10-1 | 153 // Bits 10-1 |
153 enum OpcodeExt1 { | 154 enum OpcodeExt1 { |
154 MCRF = 0 << 1, // Move Condition Register Field | 155 MCRF = 0 << 1, // Move Condition Register Field |
155 BCLRX = 16 << 1, // Branch Conditional Link Register | 156 BCLRX = 16 << 1, // Branch Conditional Link Register |
156 CRNOR = 33 << 1, // Condition Register NOR) | 157 CRNOR = 33 << 1, // Condition Register NOR) |
157 RFI = 50 << 1, // Return from Interrupt | 158 RFI = 50 << 1, // Return from Interrupt |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 // Bits 4-2 | 308 // Bits 4-2 |
308 RLDICL = 0 << 1, // Rotate Left Double Word Immediate then Clear Left | 309 RLDICL = 0 << 1, // Rotate Left Double Word Immediate then Clear Left |
309 RLDICR = 2 << 1, // Rotate Left Double Word Immediate then Clear Right | 310 RLDICR = 2 << 1, // Rotate Left Double Word Immediate then Clear Right |
310 RLDIC = 4 << 1, // Rotate Left Double Word Immediate then Clear | 311 RLDIC = 4 << 1, // Rotate Left Double Word Immediate then Clear |
311 RLDIMI = 6 << 1, // Rotate Left Double Word Immediate then Mask Insert | 312 RLDIMI = 6 << 1, // Rotate Left Double Word Immediate then Mask Insert |
312 // Bits 4-1 | 313 // Bits 4-1 |
313 RLDCL = 8 << 1, // Rotate Left Double Word then Clear Left | 314 RLDCL = 8 << 1, // Rotate Left Double Word then Clear Left |
314 RLDCR = 9 << 1 // Rotate Left Double Word then Clear Right | 315 RLDCR = 9 << 1 // Rotate Left Double Word then Clear Right |
315 }; | 316 }; |
316 | 317 |
| 318 // Bits 10-3 |
| 319 #define XX3_OPCODE_LIST(V) \ |
| 320 V(xsaddsp, XSADDSP, 0 << 3) /* VSX Scalar Add SP */ \ |
| 321 V(xssubsp, XSSUBSP, 8 << 3) /* VSX Scalar Subtract SP */ \ |
| 322 V(xsmulsp, XSMULSP, 16 << 3) /* VSX Scalar Multiply SP */ \ |
| 323 V(xsdivsp, XSDIVSP, 24 << 3) /* VSX Scalar Divide SP */ \ |
| 324 V(xsadddp, XSADDDP, 32 << 3) /* VSX Scalar Add DP */ \ |
| 325 V(xssubdp, XSSUBDP, 40 << 3) /* VSX Scalar Subtract DP */ \ |
| 326 V(xsmuldp, XSMULDP, 48 << 3) /* VSX Scalar Multiply DP */ \ |
| 327 V(xsdivdp, XSDIVDP, 56 << 3) /* VSX Scalar Divide DP */ \ |
| 328 V(xsmaxdp, XSMAXDP, 160 << 3) /* VSX Scalar Maximum DP */ \ |
| 329 V(xsmindp, XSMINDP, 168 << 3) /* VSX Scalar Minimum DP */ |
| 330 |
| 331 // Bits 10-2 |
| 332 #define XX2_OPCODE_LIST(V) \ |
| 333 V(XSCVDPSP, XSCVDPSP, 265 << 2) /* VSX Scalar Convert DP to SP */ \ |
| 334 V(XSCVSPDP, XSCVSPDP, 329 << 2) /* VSX Scalar Convert SP to DP */ |
| 335 |
| 336 enum OpcodeExt6 { |
| 337 #define DECLARE_OPCODES(name, opcode_name, opcode_value) \ |
| 338 opcode_name = opcode_value, |
| 339 XX3_OPCODE_LIST(DECLARE_OPCODES) XX2_OPCODE_LIST(DECLARE_OPCODES) |
| 340 #undef DECLARE_OPCODES |
| 341 }; |
| 342 |
317 // Instruction encoding bits and masks. | 343 // Instruction encoding bits and masks. |
318 enum { | 344 enum { |
319 // Instruction encoding bit | 345 // Instruction encoding bit |
320 B1 = 1 << 1, | 346 B1 = 1 << 1, |
| 347 B2 = 1 << 2, |
| 348 B3 = 1 << 3, |
321 B4 = 1 << 4, | 349 B4 = 1 << 4, |
322 B5 = 1 << 5, | 350 B5 = 1 << 5, |
323 B7 = 1 << 7, | 351 B7 = 1 << 7, |
324 B8 = 1 << 8, | 352 B8 = 1 << 8, |
325 B9 = 1 << 9, | 353 B9 = 1 << 9, |
326 B12 = 1 << 12, | 354 B12 = 1 << 12, |
327 B18 = 1 << 18, | 355 B18 = 1 << 18, |
328 B19 = 1 << 19, | 356 B19 = 1 << 19, |
329 B20 = 1 << 20, | 357 B20 = 1 << 20, |
330 B22 = 1 << 22, | 358 B22 = 1 << 22, |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 // Lookup the register number for the name provided. | 621 // Lookup the register number for the name provided. |
594 static int Number(const char* name); | 622 static int Number(const char* name); |
595 | 623 |
596 private: | 624 private: |
597 static const char* names_[kNumDoubleRegisters]; | 625 static const char* names_[kNumDoubleRegisters]; |
598 }; | 626 }; |
599 } // namespace internal | 627 } // namespace internal |
600 } // namespace v8 | 628 } // namespace v8 |
601 | 629 |
602 #endif // V8_PPC_CONSTANTS_PPC_H_ | 630 #endif // V8_PPC_CONSTANTS_PPC_H_ |
OLD | NEW |