| OLD | NEW | 
|     1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |     1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 
|     2 // All Rights Reserved. |     2 // All Rights Reserved. | 
|     3 // |     3 // | 
|     4 // Redistribution and use in source and binary forms, with or without |     4 // Redistribution and use in source and binary forms, with or without | 
|     5 // modification, are permitted provided that the following conditions |     5 // modification, are permitted provided that the following conditions | 
|     6 // are met: |     6 // are met: | 
|     7 // |     7 // | 
|     8 // - Redistributions of source code must retain the above copyright notice, |     8 // - Redistributions of source code must retain the above copyright notice, | 
|     9 // this list of conditions and the following disclaimer. |     9 // this list of conditions and the following disclaimer. | 
|    10 // |    10 // | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    44  |    44  | 
|    45 // Safe default is no features. |    45 // Safe default is no features. | 
|    46 unsigned CpuFeatures::supported_ = 0; |    46 unsigned CpuFeatures::supported_ = 0; | 
|    47 unsigned CpuFeatures::enabled_ = 0; |    47 unsigned CpuFeatures::enabled_ = 0; | 
|    48 unsigned CpuFeatures::found_by_runtime_probing_ = 0; |    48 unsigned CpuFeatures::found_by_runtime_probing_ = 0; | 
|    49  |    49  | 
|    50 void CpuFeatures::Probe() { |    50 void CpuFeatures::Probe() { | 
|    51   // If the compiler is allowed to use vfp then we can use vfp too in our |    51   // If the compiler is allowed to use vfp then we can use vfp too in our | 
|    52   // code generation. |    52   // code generation. | 
|    53 #if !defined(__arm__) |    53 #if !defined(__arm__) | 
|    54   // For the simulator=arm build, always use VFP since the arm simulator has |    54   // For the simulator=arm build, use VFP when FLAG_enable_vfp3 is enabled. | 
|    55   // VFP support. |    55   if (FLAG_enable_vfp3) { | 
|    56   supported_ |= 1u << VFP3; |    56       supported_ |= 1u << VFP3; | 
 |    57   } | 
 |    58   // For the simulator=arm build, use ARMv7 when FLAG_enable_armv7 is enabled | 
 |    59   if (FLAG_enable_armv7) { | 
 |    60       supported_ |= 1u << ARMv7; | 
 |    61   } | 
|    57 #else |    62 #else | 
|    58   if (Serializer::enabled()) { |    63   if (Serializer::enabled()) { | 
|    59     supported_ |= OS::CpuFeaturesImpliedByPlatform(); |    64     supported_ |= OS::CpuFeaturesImpliedByPlatform(); | 
|    60     return;  // No features if we might serialize. |    65     return;  // No features if we might serialize. | 
|    61   } |    66   } | 
|    62  |    67  | 
|    63   if (OS::ArmCpuHasFeature(VFP3)) { |    68   if (OS::ArmCpuHasFeature(VFP3)) { | 
|    64     // This implementation also sets the VFP flags if |    69     // This implementation also sets the VFP flags if | 
|    65     // runtime detection of VFP returns true. |    70     // runtime detection of VFP returns true. | 
|    66     supported_ |= 1u << VFP3; |    71     supported_ |= 1u << VFP3; | 
|    67     found_by_runtime_probing_ |= 1u << VFP3; |    72     found_by_runtime_probing_ |= 1u << VFP3; | 
|    68   } |    73   } | 
 |    74  | 
 |    75   if (OS::ArmCpuHasFeature(ARMv7)) { | 
 |    76     supported_ |= 1u << ARMv7; | 
 |    77     found_by_runtime_probing_ |= 1u << ARMv7; | 
 |    78   } | 
|    69 #endif |    79 #endif | 
|    70 } |    80 } | 
|    71  |    81  | 
|    72  |    82  | 
|    73 // ----------------------------------------------------------------------------- |    83 // ----------------------------------------------------------------------------- | 
|    74 // Implementation of Register and CRegister |    84 // Implementation of Register and CRegister | 
|    75  |    85  | 
|    76 Register no_reg = { -1 }; |    86 Register no_reg = { -1 }; | 
|    77  |    87  | 
|    78 Register r0  = {  0 }; |    88 Register r0  = {  0 }; | 
| (...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   843  |   853  | 
|   844  |   854  | 
|   845 void Assembler::bx(Register target, Condition cond) {  // v5 and above, plus v4t |   855 void Assembler::bx(Register target, Condition cond) {  // v5 and above, plus v4t | 
|   846   WriteRecordedPositions(); |   856   WriteRecordedPositions(); | 
|   847   ASSERT(!target.is(pc));  // use of pc is actually allowed, but discouraged |   857   ASSERT(!target.is(pc));  // use of pc is actually allowed, but discouraged | 
|   848   emit(cond | B24 | B21 | 15*B16 | 15*B12 | 15*B8 | B4 | target.code()); |   858   emit(cond | B24 | B21 | 15*B16 | 15*B12 | 15*B8 | B4 | target.code()); | 
|   849 } |   859 } | 
|   850  |   860  | 
|   851  |   861  | 
|   852 // Data-processing instructions |   862 // Data-processing instructions | 
 |   863  | 
 |   864 // UBFX <Rd>,<Rn>,#<lsb>,#<width - 1> | 
 |   865 // Instruction details available in ARM DDI 0406A, A8-464. | 
 |   866 // cond(31-28) | 01111(27-23)| 1(22) | 1(21) | widthm1(20-16) | | 
 |   867 //  Rd(15-12) | lsb(11-7) | 101(6-4) | Rn(3-0) | 
 |   868 void Assembler::ubfx(Register dst, Register src1, const Operand& src2, | 
 |   869                      const Operand& src3, Condition cond) { | 
 |   870   ASSERT(!src2.rm_.is_valid() && !src3.rm_.is_valid()); | 
 |   871   ASSERT(static_cast<uint32_t>(src2.imm32_) <= 0x1f); | 
 |   872   ASSERT(static_cast<uint32_t>(src3.imm32_) <= 0x1f); | 
 |   873   emit(cond | 0x3F*B21 | src3.imm32_*B16 | | 
 |   874        dst.code()*B12 | src2.imm32_*B7 | 0x5*B4 | src1.code()); | 
 |   875 } | 
 |   876  | 
 |   877  | 
|   853 void Assembler::and_(Register dst, Register src1, const Operand& src2, |   878 void Assembler::and_(Register dst, Register src1, const Operand& src2, | 
|   854                      SBit s, Condition cond) { |   879                      SBit s, Condition cond) { | 
|   855   addrmod1(cond | 0*B21 | s, src1, dst, src2); |   880   addrmod1(cond | 0*B21 | s, src1, dst, src2); | 
|   856 } |   881 } | 
|   857  |   882  | 
|   858  |   883  | 
|   859 void Assembler::eor(Register dst, Register src1, const Operand& src2, |   884 void Assembler::eor(Register dst, Register src1, const Operand& src2, | 
|   860                     SBit s, Condition cond) { |   885                     SBit s, Condition cond) { | 
|   861   addrmod1(cond | 1*B21 | s, src1, dst, src2); |   886   addrmod1(cond | 1*B21 | s, src1, dst, src2); | 
|   862 } |   887 } | 
| (...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1842     bind(&after_pool); |  1867     bind(&after_pool); | 
|  1843   } |  1868   } | 
|  1844  |  1869  | 
|  1845   // Since a constant pool was just emitted, move the check offset forward by |  1870   // Since a constant pool was just emitted, move the check offset forward by | 
|  1846   // the standard interval. |  1871   // the standard interval. | 
|  1847   next_buffer_check_ = pc_offset() + kCheckConstInterval; |  1872   next_buffer_check_ = pc_offset() + kCheckConstInterval; | 
|  1848 } |  1873 } | 
|  1849  |  1874  | 
|  1850  |  1875  | 
|  1851 } }  // namespace v8::internal |  1876 } }  // namespace v8::internal | 
| OLD | NEW |