| 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 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1352 void Assembler::ldrsh(Register dst, const MemOperand& src, Condition cond) { | 1352 void Assembler::ldrsh(Register dst, const MemOperand& src, Condition cond) { |
| 1353 addrmod3(cond | L | B7 | S6 | H | B4, dst, src); | 1353 addrmod3(cond | L | B7 | S6 | H | B4, dst, src); |
| 1354 } | 1354 } |
| 1355 | 1355 |
| 1356 | 1356 |
| 1357 void Assembler::ldrd(Register dst, const MemOperand& src, Condition cond) { | 1357 void Assembler::ldrd(Register dst, const MemOperand& src, Condition cond) { |
| 1358 ASSERT(src.rm().is(no_reg)); | 1358 ASSERT(src.rm().is(no_reg)); |
| 1359 #ifdef CAN_USE_ARMV7_INSTRUCTIONS | 1359 #ifdef CAN_USE_ARMV7_INSTRUCTIONS |
| 1360 addrmod3(cond | B7 | B6 | B4, dst, src); | 1360 addrmod3(cond | B7 | B6 | B4, dst, src); |
| 1361 #else | 1361 #else |
| 1362 ldr(dst, src, cond); | 1362 // Generate two ldr instructions if ldrd is not available. |
| 1363 MemOperand src1(src); | 1363 MemOperand src1(src); |
| 1364 src1.set_offset(src1.offset() + 4); | 1364 src1.set_offset(src1.offset() + 4); |
| 1365 Register dst1(dst); | 1365 Register dst1(dst); |
| 1366 dst1.code_ = dst1.code_ + 1; | 1366 dst1.set_code(dst1.code() + 1); |
| 1367 ldr(dst1, src1, cond); | 1367 if (dst.is(src.rn())) { |
| 1368 ldr(dst1, src1, cond); |
| 1369 ldr(dst, src, cond); |
| 1370 } else { |
| 1371 ldr(dst, src, cond); |
| 1372 ldr(dst1, src1, cond); |
| 1373 } |
| 1368 #endif | 1374 #endif |
| 1369 } | 1375 } |
| 1370 | 1376 |
| 1371 | 1377 |
| 1372 void Assembler::strd(Register src, const MemOperand& dst, Condition cond) { | 1378 void Assembler::strd(Register src, const MemOperand& dst, Condition cond) { |
| 1373 ASSERT(dst.rm().is(no_reg)); | 1379 ASSERT(dst.rm().is(no_reg)); |
| 1374 #ifdef CAN_USE_ARMV7_INSTRUCTIONS | 1380 #ifdef CAN_USE_ARMV7_INSTRUCTIONS |
| 1375 addrmod3(cond | B7 | B6 | B5 | B4, src, dst); | 1381 addrmod3(cond | B7 | B6 | B5 | B4, src, dst); |
| 1376 #else | 1382 #else |
| 1377 str(src, dst, cond); | 1383 // Generate two str instructions if strd is not available. |
| 1378 MemOperand dst1(dst); | 1384 MemOperand dst1(dst); |
| 1379 dst1.set_offset(dst1.offset() + 4); | 1385 dst1.set_offset(dst1.offset() + 4); |
| 1380 Register src1(src); | 1386 Register src1(src); |
| 1381 src1.code_ = src1.code_ + 1; | 1387 src1.set_code(src1.code() + 1); |
| 1388 str(src, dst, cond); |
| 1382 str(src1, dst1, cond); | 1389 str(src1, dst1, cond); |
| 1383 #endif | 1390 #endif |
| 1384 } | 1391 } |
| 1385 | 1392 |
| 1386 // Load/Store multiple instructions. | 1393 // Load/Store multiple instructions. |
| 1387 void Assembler::ldm(BlockAddrMode am, | 1394 void Assembler::ldm(BlockAddrMode am, |
| 1388 Register base, | 1395 Register base, |
| 1389 RegList dst, | 1396 RegList dst, |
| 1390 Condition cond) { | 1397 Condition cond) { |
| 1391 // ABI stack constraint: ldmxx base, {..sp..} base != sp is not restartable. | 1398 // ABI stack constraint: ldmxx base, {..sp..} base != sp is not restartable. |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2254 | 2261 |
| 2255 // Since a constant pool was just emitted, move the check offset forward by | 2262 // Since a constant pool was just emitted, move the check offset forward by |
| 2256 // the standard interval. | 2263 // the standard interval. |
| 2257 next_buffer_check_ = pc_offset() + kCheckConstInterval; | 2264 next_buffer_check_ = pc_offset() + kCheckConstInterval; |
| 2258 } | 2265 } |
| 2259 | 2266 |
| 2260 | 2267 |
| 2261 } } // namespace v8::internal | 2268 } } // namespace v8::internal |
| 2262 | 2269 |
| 2263 #endif // V8_TARGET_ARCH_ARM && V8_ARM_VARIANT_ARM | 2270 #endif // V8_TARGET_ARCH_ARM && V8_ARM_VARIANT_ARM |
| OLD | NEW |