Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: src/arm/constants-arm.h

Issue 17858002: ARM: Implement memcpy using NEON. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove "unaligned accesses" from C++ code Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 15 matching lines...) Expand all
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #ifndef V8_ARM_CONSTANTS_ARM_H_ 28 #ifndef V8_ARM_CONSTANTS_ARM_H_
29 #define V8_ARM_CONSTANTS_ARM_H_ 29 #define V8_ARM_CONSTANTS_ARM_H_
30 30
31 // ARM EABI is required. 31 // ARM EABI is required.
32 #if defined(__arm__) && !defined(__ARM_EABI__) 32 #if defined(__arm__) && !defined(__ARM_EABI__)
33 #error ARM EABI support is required. 33 #error ARM EABI support is required.
34 #endif 34 #endif
35 35
36 #if defined(__ARM_ARCH_7A__) || \
37 defined(__ARM_ARCH_7R__) || \
38 defined(__ARM_ARCH_7__)
39 # define CAN_USE_ARMV7_INSTRUCTIONS 1
40 #ifndef CAN_USE_VFP3_INSTRUCTIONS
41 # define CAN_USE_VFP3_INSTRUCTIONS
42 #endif
43 #endif
44
45 // Simulator should support unaligned access by default.
46 #if !defined(__arm__)
47 # ifndef CAN_USE_UNALIGNED_ACCESSES
48 # define CAN_USE_UNALIGNED_ACCESSES 1
49 # endif
50 #endif
51
52 namespace v8 { 36 namespace v8 {
53 namespace internal { 37 namespace internal {
54 38
55 // Constant pool marker. 39 // Constant pool marker.
56 // Use UDF, the permanently undefined instruction. 40 // Use UDF, the permanently undefined instruction.
57 const int kConstantPoolMarkerMask = 0xfff000f0; 41 const int kConstantPoolMarkerMask = 0xfff000f0;
58 const int kConstantPoolMarker = 0xe7f000f0; 42 const int kConstantPoolMarker = 0xe7f000f0;
59 const int kConstantPoolLengthMaxMask = 0xffff; 43 const int kConstantPoolLengthMaxMask = 0xffff;
60 inline int EncodeConstantPoolLength(int length) { 44 inline int EncodeConstantPoolLength(int length) {
61 ASSERT((length & kConstantPoolLengthMaxMask) == length); 45 ASSERT((length & kConstantPoolLengthMaxMask) == length);
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 }; 308 };
325 309
326 310
327 // Coprocessor load/store operand size. 311 // Coprocessor load/store operand size.
328 enum LFlag { 312 enum LFlag {
329 Long = 1 << 22, // Long load/store coprocessor. 313 Long = 1 << 22, // Long load/store coprocessor.
330 Short = 0 << 22 // Short load/store coprocessor. 314 Short = 0 << 22 // Short load/store coprocessor.
331 }; 315 };
332 316
333 317
318 // NEON data type
319 enum NeonDataType {
320 NeonS8 = 0x1, // U = 0, imm3 = 0b001
321 NeonS16 = 0x2, // U = 0, imm3 = 0b010
322 NeonS32 = 0x4, // U = 0, imm3 = 0b100
323 NeonU8 = 1 << 24 | 0x1, // U = 1, imm3 = 0b001
324 NeonU16 = 1 << 24 | 0x2, // U = 1, imm3 = 0b010
325 NeonU32 = 1 << 24 | 0x4, // U = 1, imm3 = 0b100
326 NeonDataTypeSizeMask = 0x7,
327 NeonDataTypeUMask = 1 << 24
328 };
329
330 enum NeonListType {
331 nlt_1 = 0x7,
332 nlt_2 = 0xA,
333 nlt_3 = 0x6,
334 nlt_4 = 0x2
335 };
336
337 enum NeonSize {
338 Neon8 = 0x0,
339 Neon16 = 0x1,
340 Neon32 = 0x2,
341 Neon64 = 0x4
342 };
343
334 // ----------------------------------------------------------------------------- 344 // -----------------------------------------------------------------------------
335 // Supervisor Call (svc) specific support. 345 // Supervisor Call (svc) specific support.
336 346
337 // Special Software Interrupt codes when used in the presence of the ARM 347 // Special Software Interrupt codes when used in the presence of the ARM
338 // simulator. 348 // simulator.
339 // svc (formerly swi) provides a 24bit immediate value. Use bits 22:0 for 349 // svc (formerly swi) provides a 24bit immediate value. Use bits 22:0 for
340 // standard SoftwareInterrupCode. Bit 23 is reserved for the stop feature. 350 // standard SoftwareInterrupCode. Bit 23 is reserved for the stop feature.
341 enum SoftwareInterruptCodes { 351 enum SoftwareInterruptCodes {
342 // transition to C code 352 // transition to C code
343 kCallRtRedirected= 0x10, 353 kCallRtRedirected= 0x10,
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 inline Condition ConditionValue() const { 576 inline Condition ConditionValue() const {
567 return static_cast<Condition>(Bits(31, 28)); 577 return static_cast<Condition>(Bits(31, 28));
568 } 578 }
569 inline Condition ConditionField() const { 579 inline Condition ConditionField() const {
570 return static_cast<Condition>(BitField(31, 28)); 580 return static_cast<Condition>(BitField(31, 28));
571 } 581 }
572 DECLARE_STATIC_TYPED_ACCESSOR(Condition, ConditionValue); 582 DECLARE_STATIC_TYPED_ACCESSOR(Condition, ConditionValue);
573 DECLARE_STATIC_TYPED_ACCESSOR(Condition, ConditionField); 583 DECLARE_STATIC_TYPED_ACCESSOR(Condition, ConditionField);
574 584
575 inline int TypeValue() const { return Bits(27, 25); } 585 inline int TypeValue() const { return Bits(27, 25); }
586 inline int SpecialValue() const { return Bits(27, 23); }
576 587
577 inline int RnValue() const { return Bits(19, 16); } 588 inline int RnValue() const { return Bits(19, 16); }
578 DECLARE_STATIC_ACCESSOR(RnValue); 589 DECLARE_STATIC_ACCESSOR(RnValue);
579 inline int RdValue() const { return Bits(15, 12); } 590 inline int RdValue() const { return Bits(15, 12); }
580 DECLARE_STATIC_ACCESSOR(RdValue); 591 DECLARE_STATIC_ACCESSOR(RdValue);
581 592
582 inline int CoprocessorValue() const { return Bits(11, 8); } 593 inline int CoprocessorValue() const { return Bits(11, 8); }
583 // Support for VFP. 594 // Support for VFP.
584 // Vn(19-16) | Vd(15-12) | Vm(3-0) 595 // Vn(19-16) | Vd(15-12) | Vm(3-0)
585 inline int VnValue() const { return Bits(19, 16); } 596 inline int VnValue() const { return Bits(19, 16); }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 static int Number(const char* name, bool* is_double); 759 static int Number(const char* name, bool* is_double);
749 760
750 private: 761 private:
751 static const char* names_[kNumVFPRegisters]; 762 static const char* names_[kNumVFPRegisters];
752 }; 763 };
753 764
754 765
755 } } // namespace v8::internal 766 } } // namespace v8::internal
756 767
757 #endif // V8_ARM_CONSTANTS_ARM_H_ 768 #endif // V8_ARM_CONSTANTS_ARM_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698