| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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_ARM_CONSTANTS_ARM_H_ | 5 #ifndef V8_ARM_CONSTANTS_ARM_H_ |
| 6 #define V8_ARM_CONSTANTS_ARM_H_ | 6 #define V8_ARM_CONSTANTS_ARM_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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 U = 1 << 23, // Positive (or negative) offset/index. | 183 U = 1 << 23, // Positive (or negative) offset/index. |
| 184 P = 1 << 24, // Offset/pre-indexed addressing (or post-indexed addressing). | 184 P = 1 << 24, // Offset/pre-indexed addressing (or post-indexed addressing). |
| 185 I = 1 << 25, // Immediate shifter operand (or not). | 185 I = 1 << 25, // Immediate shifter operand (or not). |
| 186 B0 = 1 << 0, | 186 B0 = 1 << 0, |
| 187 B4 = 1 << 4, | 187 B4 = 1 << 4, |
| 188 B5 = 1 << 5, | 188 B5 = 1 << 5, |
| 189 B6 = 1 << 6, | 189 B6 = 1 << 6, |
| 190 B7 = 1 << 7, | 190 B7 = 1 << 7, |
| 191 B8 = 1 << 8, | 191 B8 = 1 << 8, |
| 192 B9 = 1 << 9, | 192 B9 = 1 << 9, |
| 193 B10 = 1 << 10, |
| 193 B12 = 1 << 12, | 194 B12 = 1 << 12, |
| 194 B16 = 1 << 16, | 195 B16 = 1 << 16, |
| 195 B17 = 1 << 17, | 196 B17 = 1 << 17, |
| 196 B18 = 1 << 18, | 197 B18 = 1 << 18, |
| 197 B19 = 1 << 19, | 198 B19 = 1 << 19, |
| 198 B20 = 1 << 20, | 199 B20 = 1 << 20, |
| 199 B21 = 1 << 21, | 200 B21 = 1 << 21, |
| 200 B22 = 1 << 22, | 201 B22 = 1 << 22, |
| 201 B23 = 1 << 23, | 202 B23 = 1 << 23, |
| 202 B24 = 1 << 24, | 203 B24 = 1 << 24, |
| 203 B25 = 1 << 25, | 204 B25 = 1 << 25, |
| 204 B26 = 1 << 26, | 205 B26 = 1 << 26, |
| 205 B27 = 1 << 27, | 206 B27 = 1 << 27, |
| 206 B28 = 1 << 28, | 207 B28 = 1 << 28, |
| 207 | 208 |
| 208 // Instruction bit masks. | 209 // Instruction bit masks. |
| 209 kCondMask = 15 << 28, | 210 kCondMask = 15 << 28, |
| 210 kALUMask = 0x6f << 21, | 211 kALUMask = 0x6f << 21, |
| 211 kRdMask = 15 << 12, // In str instruction. | 212 kRdMask = 15 << 12, // In str instruction. |
| 212 kCoprocessorMask = 15 << 8, | 213 kCoprocessorMask = 15 << 8, |
| 213 kOpCodeMask = 15 << 21, // In data-processing instructions. | 214 kOpCodeMask = 15 << 21, // In data-processing instructions. |
| 214 kImm24Mask = (1 << 24) - 1, | 215 kImm24Mask = (1 << 24) - 1, |
| 215 kImm16Mask = (1 << 16) - 1, | 216 kImm16Mask = (1 << 16) - 1, |
| 216 kImm8Mask = (1 << 8) - 1, | 217 kImm8Mask = (1 << 8) - 1, |
| 217 kOff12Mask = (1 << 12) - 1, | 218 kOff12Mask = (1 << 12) - 1, |
| 218 kOff8Mask = (1 << 8) - 1 | 219 kOff8Mask = (1 << 8) - 1 |
| 219 }; | 220 }; |
| 220 | 221 |
| 221 | |
| 222 enum BarrierOption { | 222 enum BarrierOption { |
| 223 OSHLD = 0x1, | 223 OSHLD = 0x1, |
| 224 OSHST = 0x2, | 224 OSHST = 0x2, |
| 225 OSH = 0x3, | 225 OSH = 0x3, |
| 226 NSHLD = 0x5, | 226 NSHLD = 0x5, |
| 227 NSHST = 0x6, | 227 NSHST = 0x6, |
| 228 NSH = 0x7, | 228 NSH = 0x7, |
| 229 ISHLD = 0x9, | 229 ISHLD = 0x9, |
| 230 ISHST = 0xa, | 230 ISHST = 0xa, |
| 231 ISH = 0xb, | 231 ISH = 0xb, |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 | 320 |
| 321 // Coprocessor load/store operand size. | 321 // Coprocessor load/store operand size. |
| 322 enum LFlag { | 322 enum LFlag { |
| 323 Long = 1 << 22, // Long load/store coprocessor. | 323 Long = 1 << 22, // Long load/store coprocessor. |
| 324 Short = 0 << 22 // Short load/store coprocessor. | 324 Short = 0 << 22 // Short load/store coprocessor. |
| 325 }; | 325 }; |
| 326 | 326 |
| 327 | 327 |
| 328 // NEON data type | 328 // NEON data type |
| 329 enum NeonDataType { | 329 enum NeonDataType { |
| 330 NeonS8 = 0x1, // U = 0, imm3 = 0b001 | 330 NeonS8 = 0x1, // U = 0, imm3 = 0b001 |
| 331 NeonS16 = 0x2, // U = 0, imm3 = 0b010 | 331 NeonS16 = 0x2, // U = 0, imm3 = 0b010 |
| 332 NeonS32 = 0x4, // U = 0, imm3 = 0b100 | 332 NeonS32 = 0x4, // U = 0, imm3 = 0b100 |
| 333 NeonU8 = 1 << 24 | 0x1, // U = 1, imm3 = 0b001 | 333 NeonU8 = 1 << 24 | 0x1, // U = 1, imm3 = 0b001 |
| 334 NeonU16 = 1 << 24 | 0x2, // U = 1, imm3 = 0b010 | 334 NeonU16 = 1 << 24 | 0x2, // U = 1, imm3 = 0b010 |
| 335 NeonU32 = 1 << 24 | 0x4, // U = 1, imm3 = 0b100 | 335 NeonU32 = 1 << 24 | 0x4, // U = 1, imm3 = 0b100 |
| 336 NeonDataTypeSizeMask = 0x7, | 336 NeonDataTypeSizeMask = 0x7, |
| 337 NeonDataTypeUMask = 1 << 24 | 337 NeonDataTypeUMask = 1 << 24 |
| 338 }; | 338 }; |
| 339 | 339 |
| 340 enum NeonListType { | 340 enum NeonListType { |
| 341 nlt_1 = 0x7, | 341 nlt_1 = 0x7, |
| 342 nlt_2 = 0xA, | 342 nlt_2 = 0xA, |
| 343 nlt_3 = 0x6, | 343 nlt_3 = 0x6, |
| 344 nlt_4 = 0x2 | 344 nlt_4 = 0x2 |
| 345 }; | 345 }; |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 // Instructions are read of out a code stream. The only way to get a | 660 // Instructions are read of out a code stream. The only way to get a |
| 661 // reference to an instruction is to convert a pointer. There is no way | 661 // reference to an instruction is to convert a pointer. There is no way |
| 662 // to allocate or create instances of class Instruction. | 662 // to allocate or create instances of class Instruction. |
| 663 // Use the At(pc) function to create references to Instruction. | 663 // Use the At(pc) function to create references to Instruction. |
| 664 static Instruction* At(byte* pc) { | 664 static Instruction* At(byte* pc) { |
| 665 return reinterpret_cast<Instruction*>(pc); | 665 return reinterpret_cast<Instruction*>(pc); |
| 666 } | 666 } |
| 667 | 667 |
| 668 | 668 |
| 669 private: | 669 private: |
| 670 // Join split register codes, depending on single or double precision. | 670 // Join split register codes, depending on register precision. |
| 671 // four_bit is the position of the least-significant bit of the four | 671 // four_bit is the position of the least-significant bit of the four |
| 672 // bit specifier. one_bit is the position of the additional single bit | 672 // bit specifier. one_bit is the position of the additional single bit |
| 673 // specifier. | 673 // specifier. |
| 674 inline int VFPGlueRegValue(VFPRegPrecision pre, int four_bit, int one_bit) { | 674 inline int VFPGlueRegValue(VFPRegPrecision pre, int four_bit, int one_bit) { |
| 675 if (pre == kSinglePrecision) { | 675 if (pre == kSinglePrecision) { |
| 676 return (Bits(four_bit + 3, four_bit) << 1) | Bit(one_bit); | 676 return (Bits(four_bit + 3, four_bit) << 1) | Bit(one_bit); |
| 677 } else { | 677 } else { |
| 678 int reg_num = (Bit(one_bit) << 4) | Bits(four_bit + 3, four_bit); | 678 int reg_num = (Bit(one_bit) << 4) | Bits(four_bit + 3, four_bit); |
| 679 if (pre == kDoublePrecision) { | 679 if (pre == kDoublePrecision) { |
| 680 return reg_num; | 680 return reg_num; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 | 722 |
| 723 private: | 723 private: |
| 724 static const char* names_[kNumVFPRegisters]; | 724 static const char* names_[kNumVFPRegisters]; |
| 725 }; | 725 }; |
| 726 | 726 |
| 727 | 727 |
| 728 } // namespace internal | 728 } // namespace internal |
| 729 } // namespace v8 | 729 } // namespace v8 |
| 730 | 730 |
| 731 #endif // V8_ARM_CONSTANTS_ARM_H_ | 731 #endif // V8_ARM_CONSTANTS_ARM_H_ |
| OLD | NEW |