| 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 162 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   173     return reg_code; |   173     return reg_code; | 
|   174   } |   174   } | 
|   175   int bit() const { |   175   int bit() const { | 
|   176     DCHECK(is_valid()); |   176     DCHECK(is_valid()); | 
|   177     return 1 << reg_code; |   177     return 1 << reg_code; | 
|   178   } |   178   } | 
|   179   static SwVfpRegister from_code(int code) { |   179   static SwVfpRegister from_code(int code) { | 
|   180     SwVfpRegister r = {code}; |   180     SwVfpRegister r = {code}; | 
|   181     return r; |   181     return r; | 
|   182   } |   182   } | 
|   183   void split_code(int* vm, int* m) const { |   183   static void split_code(int reg_code, int* vm, int* m) { | 
|   184     DCHECK(is_valid()); |   184     DCHECK(from_code(reg_code).is_valid()); | 
|   185     *m = reg_code & 0x1; |   185     *m = reg_code & 0x1; | 
|   186     *vm = reg_code >> 1; |   186     *vm = reg_code >> 1; | 
|   187   } |   187   } | 
 |   188   void split_code(int* vm, int* m) const { | 
 |   189     split_code(reg_code, vm, m); | 
 |   190   } | 
|   188  |   191  | 
|   189   int reg_code; |   192   int reg_code; | 
|   190 }; |   193 }; | 
|   191  |   194  | 
|   192 typedef SwVfpRegister FloatRegister; |   195 typedef SwVfpRegister FloatRegister; | 
|   193  |   196  | 
|   194 // Double word VFP register. |   197 // Double word VFP register. | 
|   195 struct DwVfpRegister { |   198 struct DwVfpRegister { | 
|   196   enum Code { |   199   enum Code { | 
|   197 #define REGISTER_CODE(R) kCode_##R, |   200 #define REGISTER_CODE(R) kCode_##R, | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
|   219   } |   222   } | 
|   220   int bit() const { |   223   int bit() const { | 
|   221     DCHECK(is_valid()); |   224     DCHECK(is_valid()); | 
|   222     return 1 << reg_code; |   225     return 1 << reg_code; | 
|   223   } |   226   } | 
|   224  |   227  | 
|   225   static DwVfpRegister from_code(int code) { |   228   static DwVfpRegister from_code(int code) { | 
|   226     DwVfpRegister r = {code}; |   229     DwVfpRegister r = {code}; | 
|   227     return r; |   230     return r; | 
|   228   } |   231   } | 
|   229   void split_code(int* vm, int* m) const { |   232   static void split_code(int reg_code, int* vm, int* m) { | 
|   230     DCHECK(is_valid()); |   233     DCHECK(from_code(reg_code).is_valid()); | 
|   231     *m = (reg_code & 0x10) >> 4; |   234     *m = (reg_code & 0x10) >> 4; | 
|   232     *vm = reg_code & 0x0F; |   235     *vm = reg_code & 0x0F; | 
|   233   } |   236   } | 
 |   237   void split_code(int* vm, int* m) const { | 
 |   238     split_code(reg_code, vm, m); | 
 |   239   } | 
|   234  |   240  | 
|   235   int reg_code; |   241   int reg_code; | 
|   236 }; |   242 }; | 
|   237  |   243  | 
|   238  |   244  | 
|   239 typedef DwVfpRegister DoubleRegister; |   245 typedef DwVfpRegister DoubleRegister; | 
|   240  |   246  | 
|   241  |   247  | 
|   242 // Double word VFP register d0-15. |   248 // Double word VFP register d0-15. | 
|   243 struct LowDwVfpRegister { |   249 struct LowDwVfpRegister { | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   289   } |   295   } | 
|   290  |   296  | 
|   291   bool is_valid() const { |   297   bool is_valid() const { | 
|   292     return (0 <= reg_code) && (reg_code < kMaxNumRegisters); |   298     return (0 <= reg_code) && (reg_code < kMaxNumRegisters); | 
|   293   } |   299   } | 
|   294   bool is(QwNeonRegister reg) const { return reg_code == reg.reg_code; } |   300   bool is(QwNeonRegister reg) const { return reg_code == reg.reg_code; } | 
|   295   int code() const { |   301   int code() const { | 
|   296     DCHECK(is_valid()); |   302     DCHECK(is_valid()); | 
|   297     return reg_code; |   303     return reg_code; | 
|   298   } |   304   } | 
|   299   void split_code(int* vm, int* m) const { |   305   static void split_code(int reg_code, int* vm, int* m) { | 
|   300     DCHECK(is_valid()); |   306     DCHECK(from_code(reg_code).is_valid()); | 
|   301     int encoded_code = reg_code << 1; |   307     int encoded_code = reg_code << 1; | 
|   302     *m = (encoded_code & 0x10) >> 4; |   308     *m = (encoded_code & 0x10) >> 4; | 
|   303     *vm = encoded_code & 0x0F; |   309     *vm = encoded_code & 0x0F; | 
|   304   } |   310   } | 
 |   311   void split_code(int* vm, int* m) const { | 
 |   312     split_code(reg_code, vm, m); | 
 |   313   } | 
|   305   DwVfpRegister low() const { |   314   DwVfpRegister low() const { | 
|   306     DwVfpRegister reg; |   315     DwVfpRegister reg; | 
|   307     reg.reg_code = reg_code * 2; |   316     reg.reg_code = reg_code * 2; | 
|   308  |   317  | 
|   309     DCHECK(reg.is_valid()); |   318     DCHECK(reg.is_valid()); | 
|   310     return reg; |   319     return reg; | 
|   311   } |   320   } | 
|   312   DwVfpRegister high() const { |   321   DwVfpRegister high() const { | 
|   313     DwVfpRegister reg; |   322     DwVfpRegister reg; | 
|   314     reg.reg_code = reg_code * 2 + 1; |   323     reg.reg_code = reg_code * 2 + 1; | 
| (...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1308             const NeonMemOperand& src); |  1317             const NeonMemOperand& src); | 
|  1309   void vst1(NeonSize size, |  1318   void vst1(NeonSize size, | 
|  1310             const NeonListOperand& src, |  1319             const NeonListOperand& src, | 
|  1311             const NeonMemOperand& dst); |  1320             const NeonMemOperand& dst); | 
|  1312   void vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src); |  1321   void vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src); | 
|  1313  |  1322  | 
|  1314   // Only unconditional core <-> scalar moves are currently supported. |  1323   // Only unconditional core <-> scalar moves are currently supported. | 
|  1315   void vmov(NeonDataType dt, DwVfpRegister dst, int index, Register src); |  1324   void vmov(NeonDataType dt, DwVfpRegister dst, int index, Register src); | 
|  1316   void vmov(NeonDataType dt, Register dst, DwVfpRegister src, int index); |  1325   void vmov(NeonDataType dt, Register dst, DwVfpRegister src, int index); | 
|  1317  |  1326  | 
|  1318   void vmov(const QwNeonRegister dst, const QwNeonRegister src); |  1327   void vmov(QwNeonRegister dst, QwNeonRegister src); | 
|  1319   void vmvn(const QwNeonRegister dst, const QwNeonRegister src); |  1328   void vdup(NeonSize size, QwNeonRegister dst, Register src); | 
 |  1329   void vdup(QwNeonRegister dst, SwVfpRegister src); | 
 |  1330  | 
 |  1331   void vcvt_f32_s32(QwNeonRegister dst, QwNeonRegister src); | 
 |  1332   void vcvt_f32_u32(QwNeonRegister dst, QwNeonRegister src); | 
 |  1333   void vcvt_s32_f32(QwNeonRegister dst, QwNeonRegister src); | 
 |  1334   void vcvt_u32_f32(QwNeonRegister dst, QwNeonRegister src); | 
 |  1335  | 
 |  1336   void vmvn(QwNeonRegister dst, QwNeonRegister src); | 
|  1320   void vswp(DwVfpRegister dst, DwVfpRegister src); |  1337   void vswp(DwVfpRegister dst, DwVfpRegister src); | 
|  1321   void vswp(QwNeonRegister dst, QwNeonRegister src); |  1338   void vswp(QwNeonRegister dst, QwNeonRegister src); | 
|  1322   // vdup conditional execution isn't supported. |  1339   void vabs(QwNeonRegister dst, QwNeonRegister src); | 
|  1323   void vdup(NeonSize size, const QwNeonRegister dst, const Register src); |  1340   void vabs(NeonSize size, QwNeonRegister dst, QwNeonRegister src); | 
|  1324   void vdup(const QwNeonRegister dst, const SwVfpRegister src); |  1341   void vneg(QwNeonRegister dst, QwNeonRegister src); | 
 |  1342   void vneg(NeonSize size, QwNeonRegister dst, QwNeonRegister src); | 
|  1325  |  1343  | 
|  1326   void vcvt_f32_s32(const QwNeonRegister dst, const QwNeonRegister src); |  1344   void vand(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1327   void vcvt_f32_u32(const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1328   void vcvt_s32_f32(const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1329   void vcvt_u32_f32(const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1330  |  | 
|  1331   void vabs(const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1332   void vabs(NeonSize size, const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1333   void vneg(const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1334   void vneg(NeonSize size, const QwNeonRegister dst, const QwNeonRegister src); |  | 
|  1335   void veor(DwVfpRegister dst, DwVfpRegister src1, DwVfpRegister src2); |  1345   void veor(DwVfpRegister dst, DwVfpRegister src1, DwVfpRegister src2); | 
|  1336   void vand(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1346   void veor(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1337   void vbsl(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1347   void vbsl(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1338   void veor(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  | 
|  1339   void vorr(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1348   void vorr(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1340   void vadd(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1349   void vadd(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1341   void vadd(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |  1350   void vadd(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, | 
|  1342             QwNeonRegister src2); |  1351             QwNeonRegister src2); | 
|  1343   void vqadd(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |  1352   void vqadd(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, | 
|  1344              QwNeonRegister src2); |  1353              QwNeonRegister src2); | 
|  1345   void vsub(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1354   void vsub(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1346   void vsub(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |  1355   void vsub(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, | 
|  1347             QwNeonRegister src2); |  1356             QwNeonRegister src2); | 
|  1348   void vqsub(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |  1357   void vqsub(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|  1367   void vrecpe(QwNeonRegister dst, QwNeonRegister src); |  1376   void vrecpe(QwNeonRegister dst, QwNeonRegister src); | 
|  1368   void vrsqrte(QwNeonRegister dst, QwNeonRegister src); |  1377   void vrsqrte(QwNeonRegister dst, QwNeonRegister src); | 
|  1369   void vrecps(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1378   void vrecps(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1370   void vrsqrts(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1379   void vrsqrts(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1371   void vtst(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |  1380   void vtst(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, | 
|  1372             QwNeonRegister src2); |  1381             QwNeonRegister src2); | 
|  1373   void vceq(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1382   void vceq(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1374   void vceq(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |  1383   void vceq(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, | 
|  1375             QwNeonRegister src2); |  1384             QwNeonRegister src2); | 
|  1376   void vcge(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1385   void vcge(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1377   void vcge(NeonDataType dt, QwNeonRegister dst, |  1386   void vcge(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, | 
|  1378             QwNeonRegister src1, QwNeonRegister src2); |  1387             QwNeonRegister src2); | 
|  1379   void vcgt(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); |  1388   void vcgt(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); | 
|  1380   void vcgt(NeonDataType dt, QwNeonRegister dst, |  1389   void vcgt(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, | 
|  1381             QwNeonRegister src1, QwNeonRegister src2); |  1390             QwNeonRegister src2); | 
|  1382   void vext(const QwNeonRegister dst, const QwNeonRegister src1, |  1391   void vext(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2, | 
|  1383             const QwNeonRegister src2, int bytes); |  1392             int bytes); | 
|  1384   void vzip(NeonSize size, const QwNeonRegister dst, const QwNeonRegister src); |  1393   void vzip(NeonSize size, QwNeonRegister src1, QwNeonRegister src2); | 
|  1385   void vrev16(NeonSize size, const QwNeonRegister dst, |  1394   void vuzp(NeonSize size, QwNeonRegister src1, QwNeonRegister src2); | 
|  1386             const QwNeonRegister src); |  1395   void vrev16(NeonSize size, QwNeonRegister dst, QwNeonRegister src); | 
|  1387   void vrev32(NeonSize size, const QwNeonRegister dst, |  1396   void vrev32(NeonSize size, QwNeonRegister dst, QwNeonRegister src); | 
|  1388             const QwNeonRegister src); |  1397   void vrev64(NeonSize size, QwNeonRegister dst, QwNeonRegister src); | 
|  1389   void vrev64(NeonSize size, const QwNeonRegister dst, |  1398   void vtrn(NeonSize size, QwNeonRegister src1, QwNeonRegister src2); | 
|  1390             const QwNeonRegister src); |  1399   void vtbl(DwVfpRegister dst, const NeonListOperand& list, | 
|  1391   void vtbl(const DwVfpRegister dst, const NeonListOperand& list, |  1400             DwVfpRegister index); | 
|  1392             const DwVfpRegister index); |  1401   void vtbx(DwVfpRegister dst, const NeonListOperand& list, | 
|  1393   void vtbx(const DwVfpRegister dst, const NeonListOperand& list, |  1402             DwVfpRegister index); | 
|  1394             const DwVfpRegister index); |  | 
|  1395  |  1403  | 
|  1396   // Pseudo instructions |  1404   // Pseudo instructions | 
|  1397  |  1405  | 
|  1398   // Different nop operations are used by the code generator to detect certain |  1406   // Different nop operations are used by the code generator to detect certain | 
|  1399   // states of the generated code. |  1407   // states of the generated code. | 
|  1400   enum NopMarkerTypes { |  1408   enum NopMarkerTypes { | 
|  1401     NON_MARKING_NOP = 0, |  1409     NON_MARKING_NOP = 0, | 
|  1402     DEBUG_BREAK_NOP, |  1410     DEBUG_BREAK_NOP, | 
|  1403     // IC markers. |  1411     // IC markers. | 
|  1404     PROPERTY_ACCESS_INLINED, |  1412     PROPERTY_ACCESS_INLINED, | 
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1789 class EnsureSpace BASE_EMBEDDED { |  1797 class EnsureSpace BASE_EMBEDDED { | 
|  1790  public: |  1798  public: | 
|  1791   INLINE(explicit EnsureSpace(Assembler* assembler)); |  1799   INLINE(explicit EnsureSpace(Assembler* assembler)); | 
|  1792 }; |  1800 }; | 
|  1793  |  1801  | 
|  1794  |  1802  | 
|  1795 }  // namespace internal |  1803 }  // namespace internal | 
|  1796 }  // namespace v8 |  1804 }  // namespace v8 | 
|  1797  |  1805  | 
|  1798 #endif  // V8_ARM_ASSEMBLER_ARM_H_ |  1806 #endif  // V8_ARM_ASSEMBLER_ARM_H_ | 
| OLD | NEW |