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

Side by Side Diff: src/arm/assembler-arm.cc

Issue 464016: Fix for bug 512 from Subrato De, CodeAurora. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years 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
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/codegen-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 CRegister cr9 = { 9 }; 107 CRegister cr9 = { 9 };
108 CRegister cr10 = { 10 }; 108 CRegister cr10 = { 10 };
109 CRegister cr11 = { 11 }; 109 CRegister cr11 = { 11 };
110 CRegister cr12 = { 12 }; 110 CRegister cr12 = { 12 };
111 CRegister cr13 = { 13 }; 111 CRegister cr13 = { 13 };
112 CRegister cr14 = { 14 }; 112 CRegister cr14 = { 14 };
113 CRegister cr15 = { 15 }; 113 CRegister cr15 = { 15 };
114 114
115 // Support for the VFP registers s0 to s31 (d0 to d15). 115 // Support for the VFP registers s0 to s31 (d0 to d15).
116 // Note that "sN:sM" is the same as "dN/2". 116 // Note that "sN:sM" is the same as "dN/2".
117 Register s0 = { 0 }; 117 SwVfpRegister s0 = { 0 };
118 Register s1 = { 1 }; 118 SwVfpRegister s1 = { 1 };
119 Register s2 = { 2 }; 119 SwVfpRegister s2 = { 2 };
120 Register s3 = { 3 }; 120 SwVfpRegister s3 = { 3 };
121 Register s4 = { 4 }; 121 SwVfpRegister s4 = { 4 };
122 Register s5 = { 5 }; 122 SwVfpRegister s5 = { 5 };
123 Register s6 = { 6 }; 123 SwVfpRegister s6 = { 6 };
124 Register s7 = { 7 }; 124 SwVfpRegister s7 = { 7 };
125 Register s8 = { 8 }; 125 SwVfpRegister s8 = { 8 };
126 Register s9 = { 9 }; 126 SwVfpRegister s9 = { 9 };
127 Register s10 = { 10 }; 127 SwVfpRegister s10 = { 10 };
128 Register s11 = { 11 }; 128 SwVfpRegister s11 = { 11 };
129 Register s12 = { 12 }; 129 SwVfpRegister s12 = { 12 };
130 Register s13 = { 13 }; 130 SwVfpRegister s13 = { 13 };
131 Register s14 = { 14 }; 131 SwVfpRegister s14 = { 14 };
132 Register s15 = { 15 }; 132 SwVfpRegister s15 = { 15 };
133 Register s16 = { 16 }; 133 SwVfpRegister s16 = { 16 };
134 Register s17 = { 17 }; 134 SwVfpRegister s17 = { 17 };
135 Register s18 = { 18 }; 135 SwVfpRegister s18 = { 18 };
136 Register s19 = { 19 }; 136 SwVfpRegister s19 = { 19 };
137 Register s20 = { 20 }; 137 SwVfpRegister s20 = { 20 };
138 Register s21 = { 21 }; 138 SwVfpRegister s21 = { 21 };
139 Register s22 = { 22 }; 139 SwVfpRegister s22 = { 22 };
140 Register s23 = { 23 }; 140 SwVfpRegister s23 = { 23 };
141 Register s24 = { 24 }; 141 SwVfpRegister s24 = { 24 };
142 Register s25 = { 25 }; 142 SwVfpRegister s25 = { 25 };
143 Register s26 = { 26 }; 143 SwVfpRegister s26 = { 26 };
144 Register s27 = { 27 }; 144 SwVfpRegister s27 = { 27 };
145 Register s28 = { 28 }; 145 SwVfpRegister s28 = { 28 };
146 Register s29 = { 29 }; 146 SwVfpRegister s29 = { 29 };
147 Register s30 = { 30 }; 147 SwVfpRegister s30 = { 30 };
148 Register s31 = { 31 }; 148 SwVfpRegister s31 = { 31 };
149 149
150 Register d0 = { 0 }; 150 DwVfpRegister d0 = { 0 };
151 Register d1 = { 1 }; 151 DwVfpRegister d1 = { 1 };
152 Register d2 = { 2 }; 152 DwVfpRegister d2 = { 2 };
153 Register d3 = { 3 }; 153 DwVfpRegister d3 = { 3 };
154 Register d4 = { 4 }; 154 DwVfpRegister d4 = { 4 };
155 Register d5 = { 5 }; 155 DwVfpRegister d5 = { 5 };
156 Register d6 = { 6 }; 156 DwVfpRegister d6 = { 6 };
157 Register d7 = { 7 }; 157 DwVfpRegister d7 = { 7 };
158 Register d8 = { 8 }; 158 DwVfpRegister d8 = { 8 };
159 Register d9 = { 9 }; 159 DwVfpRegister d9 = { 9 };
160 Register d10 = { 10 }; 160 DwVfpRegister d10 = { 10 };
161 Register d11 = { 11 }; 161 DwVfpRegister d11 = { 11 };
162 Register d12 = { 12 }; 162 DwVfpRegister d12 = { 12 };
163 Register d13 = { 13 }; 163 DwVfpRegister d13 = { 13 };
164 Register d14 = { 14 }; 164 DwVfpRegister d14 = { 14 };
165 Register d15 = { 15 }; 165 DwVfpRegister d15 = { 15 };
166 166
167 // ----------------------------------------------------------------------------- 167 // -----------------------------------------------------------------------------
168 // Implementation of RelocInfo 168 // Implementation of RelocInfo
169 169
170 const int RelocInfo::kApplyMask = 0; 170 const int RelocInfo::kApplyMask = 0;
171 171
172 172
173 void RelocInfo::PatchCode(byte* instructions, int instruction_count) { 173 void RelocInfo::PatchCode(byte* instructions, int instruction_count) {
174 // Patch the code at the current address with the supplied instructions. 174 // Patch the code at the current address with the supplied instructions.
175 Instr* pc = reinterpret_cast<Instr*>(pc_); 175 Instr* pc = reinterpret_cast<Instr*>(pc_);
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 void Assembler::stc2(Coprocessor coproc, 1364 void Assembler::stc2(Coprocessor coproc,
1365 CRegister crd, 1365 CRegister crd,
1366 Register rn, 1366 Register rn,
1367 int option, 1367 int option,
1368 LFlag l) { // v5 and above 1368 LFlag l) { // v5 and above
1369 stc(coproc, crd, rn, option, l, static_cast<Condition>(nv)); 1369 stc(coproc, crd, rn, option, l, static_cast<Condition>(nv));
1370 } 1370 }
1371 1371
1372 1372
1373 // Support for VFP. 1373 // Support for VFP.
1374 void Assembler::fmdrr(const Register dst, 1374 void Assembler::vmov(const DwVfpRegister dst,
1375 const Register src1, 1375 const Register src1,
1376 const Register src2, 1376 const Register src2,
1377 const SBit s, 1377 const Condition cond) {
1378 const Condition cond) {
1379 // Dm = <Rt,Rt2>. 1378 // Dm = <Rt,Rt2>.
1380 // Instruction details available in ARM DDI 0406A, A8-646. 1379 // Instruction details available in ARM DDI 0406A, A8-646.
1381 // cond(31-28) | 1100(27-24)| 010(23-21) | op=0(20) | Rt2(19-16) | 1380 // cond(31-28) | 1100(27-24)| 010(23-21) | op=0(20) | Rt2(19-16) |
1382 // Rt(15-12) | 1011(11-8) | 00(7-6) | M(5) | 1(4) | Vm 1381 // Rt(15-12) | 1011(11-8) | 00(7-6) | M(5) | 1(4) | Vm
1383 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1382 ASSERT(CpuFeatures::IsEnabled(VFP3));
1384 ASSERT(!src1.is(pc) && !src2.is(pc)); 1383 ASSERT(!src1.is(pc) && !src2.is(pc));
1385 emit(cond | 0xC*B24 | B22 | src2.code()*B16 | 1384 emit(cond | 0xC*B24 | B22 | src2.code()*B16 |
1386 src1.code()*B12 | 0xB*B8 | B4 | dst.code()); 1385 src1.code()*B12 | 0xB*B8 | B4 | dst.code());
1387 } 1386 }
1388 1387
1389 1388
1390 void Assembler::fmrrd(const Register dst1, 1389 void Assembler::vmov(const Register dst1,
1391 const Register dst2, 1390 const Register dst2,
1392 const Register src, 1391 const DwVfpRegister src,
1393 const SBit s, 1392 const Condition cond) {
1394 const Condition cond) {
1395 // <Rt,Rt2> = Dm. 1393 // <Rt,Rt2> = Dm.
1396 // Instruction details available in ARM DDI 0406A, A8-646. 1394 // Instruction details available in ARM DDI 0406A, A8-646.
1397 // cond(31-28) | 1100(27-24)| 010(23-21) | op=1(20) | Rt2(19-16) | 1395 // cond(31-28) | 1100(27-24)| 010(23-21) | op=1(20) | Rt2(19-16) |
1398 // Rt(15-12) | 1011(11-8) | 00(7-6) | M(5) | 1(4) | Vm 1396 // Rt(15-12) | 1011(11-8) | 00(7-6) | M(5) | 1(4) | Vm
1399 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1397 ASSERT(CpuFeatures::IsEnabled(VFP3));
1400 ASSERT(!dst1.is(pc) && !dst2.is(pc)); 1398 ASSERT(!dst1.is(pc) && !dst2.is(pc));
1401 emit(cond | 0xC*B24 | B22 | B20 | dst2.code()*B16 | 1399 emit(cond | 0xC*B24 | B22 | B20 | dst2.code()*B16 |
1402 dst1.code()*B12 | 0xB*B8 | B4 | src.code()); 1400 dst1.code()*B12 | 0xB*B8 | B4 | src.code());
1403 } 1401 }
1404 1402
1405 1403
1406 void Assembler::fmsr(const Register dst, 1404 void Assembler::vmov(const SwVfpRegister dst,
1407 const Register src, 1405 const Register src,
1408 const SBit s,
1409 const Condition cond) { 1406 const Condition cond) {
1410 // Sn = Rt. 1407 // Sn = Rt.
1411 // Instruction details available in ARM DDI 0406A, A8-642. 1408 // Instruction details available in ARM DDI 0406A, A8-642.
1412 // cond(31-28) | 1110(27-24)| 000(23-21) | op=0(20) | Vn(19-16) | 1409 // cond(31-28) | 1110(27-24)| 000(23-21) | op=0(20) | Vn(19-16) |
1413 // Rt(15-12) | 1010(11-8) | N(7)=0 | 00(6-5) | 1(4) | 0000(3-0) 1410 // Rt(15-12) | 1010(11-8) | N(7)=0 | 00(6-5) | 1(4) | 0000(3-0)
1414 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1411 ASSERT(CpuFeatures::IsEnabled(VFP3));
1415 ASSERT(!src.is(pc)); 1412 ASSERT(!src.is(pc));
1416 emit(cond | 0xE*B24 | (dst.code() >> 1)*B16 | 1413 emit(cond | 0xE*B24 | (dst.code() >> 1)*B16 |
1417 src.code()*B12 | 0xA*B8 | (0x1 & dst.code())*B7 | B4); 1414 src.code()*B12 | 0xA*B8 | (0x1 & dst.code())*B7 | B4);
1418 } 1415 }
1419 1416
1420 1417
1421 void Assembler::fmrs(const Register dst, 1418 void Assembler::vmov(const Register dst,
1422 const Register src, 1419 const SwVfpRegister src,
1423 const SBit s,
1424 const Condition cond) { 1420 const Condition cond) {
1425 // Rt = Sn. 1421 // Rt = Sn.
1426 // Instruction details available in ARM DDI 0406A, A8-642. 1422 // Instruction details available in ARM DDI 0406A, A8-642.
1427 // cond(31-28) | 1110(27-24)| 000(23-21) | op=1(20) | Vn(19-16) | 1423 // cond(31-28) | 1110(27-24)| 000(23-21) | op=1(20) | Vn(19-16) |
1428 // Rt(15-12) | 1010(11-8) | N(7)=0 | 00(6-5) | 1(4) | 0000(3-0) 1424 // Rt(15-12) | 1010(11-8) | N(7)=0 | 00(6-5) | 1(4) | 0000(3-0)
1429 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1425 ASSERT(CpuFeatures::IsEnabled(VFP3));
1430 ASSERT(!dst.is(pc)); 1426 ASSERT(!dst.is(pc));
1431 emit(cond | 0xE*B24 | B20 | (src.code() >> 1)*B16 | 1427 emit(cond | 0xE*B24 | B20 | (src.code() >> 1)*B16 |
1432 dst.code()*B12 | 0xA*B8 | (0x1 & src.code())*B7 | B4); 1428 dst.code()*B12 | 0xA*B8 | (0x1 & src.code())*B7 | B4);
1433 } 1429 }
1434 1430
1435 1431
1436 void Assembler::fsitod(const Register dst, 1432 void Assembler::vcvt(const DwVfpRegister dst,
1437 const Register src, 1433 const SwVfpRegister src,
1438 const SBit s, 1434 const Condition cond) {
1439 const Condition cond) {
1440 // Dd = Sm (integer in Sm converted to IEEE 64-bit doubles in Dd). 1435 // Dd = Sm (integer in Sm converted to IEEE 64-bit doubles in Dd).
1441 // Instruction details available in ARM DDI 0406A, A8-576. 1436 // Instruction details available in ARM DDI 0406A, A8-576.
1442 // cond(31-28) | 11101(27-23)| D=?(22) | 11(21-20) | 1(19) |opc2=000(18-16) | 1437 // cond(31-28) | 11101(27-23)| D=?(22) | 11(21-20) | 1(19) |opc2=000(18-16) |
1443 // Vd(15-12) | 101(11-9) | sz(8)=1 | op(7)=1 | 1(6) | M=?(5) | 0(4) | Vm(3-0) 1438 // Vd(15-12) | 101(11-9) | sz(8)=1 | op(7)=1 | 1(6) | M=?(5) | 0(4) | Vm(3-0)
1444 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1439 ASSERT(CpuFeatures::IsEnabled(VFP3));
1445 emit(cond | 0xE*B24 | B23 | 0x3*B20 | B19 | 1440 emit(cond | 0xE*B24 | B23 | 0x3*B20 | B19 |
1446 dst.code()*B12 | 0x5*B9 | B8 | B7 | B6 | 1441 dst.code()*B12 | 0x5*B9 | B8 | B7 | B6 |
1447 (0x1 & src.code())*B5 | (src.code() >> 1)); 1442 (0x1 & src.code())*B5 | (src.code() >> 1));
1448 } 1443 }
1449 1444
1450 1445
1451 void Assembler::ftosid(const Register dst, 1446 void Assembler::vcvt(const SwVfpRegister dst,
1452 const Register src, 1447 const DwVfpRegister src,
1453 const SBit s, 1448 const Condition cond) {
1454 const Condition cond) {
1455 // Sd = Dm (IEEE 64-bit doubles in Dm converted to 32 bit integer in Sd). 1449 // Sd = Dm (IEEE 64-bit doubles in Dm converted to 32 bit integer in Sd).
1456 // Instruction details available in ARM DDI 0406A, A8-576. 1450 // Instruction details available in ARM DDI 0406A, A8-576.
1457 // cond(31-28) | 11101(27-23)| D=?(22) | 11(21-20) | 1(19) | opc2=101(18-16)| 1451 // cond(31-28) | 11101(27-23)| D=?(22) | 11(21-20) | 1(19) | opc2=101(18-16)|
1458 // Vd(15-12) | 101(11-9) | sz(8)=1 | op(7)=? | 1(6) | M=?(5) | 0(4) | Vm(3-0) 1452 // Vd(15-12) | 101(11-9) | sz(8)=1 | op(7)=? | 1(6) | M=?(5) | 0(4) | Vm(3-0)
1459 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1453 ASSERT(CpuFeatures::IsEnabled(VFP3));
1460 emit(cond | 0xE*B24 | B23 |(0x1 & dst.code())*B22 | 1454 emit(cond | 0xE*B24 | B23 |(0x1 & dst.code())*B22 |
1461 0x3*B20 | B19 | 0x5*B16 | (dst.code() >> 1)*B12 | 1455 0x3*B20 | B19 | 0x5*B16 | (dst.code() >> 1)*B12 |
1462 0x5*B9 | B8 | B7 | B6 | src.code()); 1456 0x5*B9 | B8 | B7 | B6 | src.code());
1463 } 1457 }
1464 1458
1465 1459
1466 void Assembler::faddd(const Register dst, 1460 void Assembler::vadd(const DwVfpRegister dst,
1467 const Register src1, 1461 const DwVfpRegister src1,
1468 const Register src2, 1462 const DwVfpRegister src2,
1469 const SBit s, 1463 const Condition cond) {
1470 const Condition cond) { 1464 // Dd = vadd(Dn, Dm) double precision floating point addition.
1471 // Dd = faddd(Dn, Dm) double precision floating point addition.
1472 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm. 1465 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm.
1473 // Instruction details available in ARM DDI 0406A, A8-536. 1466 // Instruction details available in ARM DDI 0406A, A8-536.
1474 // cond(31-28) | 11100(27-23)| D=?(22) | 11(21-20) | Vn(19-16) | 1467 // cond(31-28) | 11100(27-23)| D=?(22) | 11(21-20) | Vn(19-16) |
1475 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 0(6) | M=?(5) | 0(4) | Vm(3-0) 1468 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 0(6) | M=?(5) | 0(4) | Vm(3-0)
1476 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1469 ASSERT(CpuFeatures::IsEnabled(VFP3));
1477 emit(cond | 0xE*B24 | 0x3*B20 | src1.code()*B16 | 1470 emit(cond | 0xE*B24 | 0x3*B20 | src1.code()*B16 |
1478 dst.code()*B12 | 0x5*B9 | B8 | src2.code()); 1471 dst.code()*B12 | 0x5*B9 | B8 | src2.code());
1479 } 1472 }
1480 1473
1481 1474
1482 void Assembler::fsubd(const Register dst, 1475 void Assembler::vsub(const DwVfpRegister dst,
1483 const Register src1, 1476 const DwVfpRegister src1,
1484 const Register src2, 1477 const DwVfpRegister src2,
1485 const SBit s, 1478 const Condition cond) {
1486 const Condition cond) { 1479 // Dd = vsub(Dn, Dm) double precision floating point subtraction.
1487 // Dd = fsubd(Dn, Dm) double precision floating point subtraction.
1488 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm. 1480 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm.
1489 // Instruction details available in ARM DDI 0406A, A8-784. 1481 // Instruction details available in ARM DDI 0406A, A8-784.
1490 // cond(31-28) | 11100(27-23)| D=?(22) | 11(21-20) | Vn(19-16) | 1482 // cond(31-28) | 11100(27-23)| D=?(22) | 11(21-20) | Vn(19-16) |
1491 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 1(6) | M=?(5) | 0(4) | Vm(3-0) 1483 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 1(6) | M=?(5) | 0(4) | Vm(3-0)
1492 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1484 ASSERT(CpuFeatures::IsEnabled(VFP3));
1493 emit(cond | 0xE*B24 | 0x3*B20 | src1.code()*B16 | 1485 emit(cond | 0xE*B24 | 0x3*B20 | src1.code()*B16 |
1494 dst.code()*B12 | 0x5*B9 | B8 | B6 | src2.code()); 1486 dst.code()*B12 | 0x5*B9 | B8 | B6 | src2.code());
1495 } 1487 }
1496 1488
1497 1489
1498 void Assembler::fmuld(const Register dst, 1490 void Assembler::vmul(const DwVfpRegister dst,
1499 const Register src1, 1491 const DwVfpRegister src1,
1500 const Register src2, 1492 const DwVfpRegister src2,
1501 const SBit s, 1493 const Condition cond) {
1502 const Condition cond) { 1494 // Dd = vmul(Dn, Dm) double precision floating point multiplication.
1503 // Dd = fmuld(Dn, Dm) double precision floating point multiplication.
1504 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm. 1495 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm.
1505 // Instruction details available in ARM DDI 0406A, A8-784. 1496 // Instruction details available in ARM DDI 0406A, A8-784.
1506 // cond(31-28) | 11100(27-23)| D=?(22) | 10(21-20) | Vn(19-16) | 1497 // cond(31-28) | 11100(27-23)| D=?(22) | 10(21-20) | Vn(19-16) |
1507 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 0(6) | M=?(5) | 0(4) | Vm(3-0) 1498 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 0(6) | M=?(5) | 0(4) | Vm(3-0)
1508 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1499 ASSERT(CpuFeatures::IsEnabled(VFP3));
1509 emit(cond | 0xE*B24 | 0x2*B20 | src1.code()*B16 | 1500 emit(cond | 0xE*B24 | 0x2*B20 | src1.code()*B16 |
1510 dst.code()*B12 | 0x5*B9 | B8 | src2.code()); 1501 dst.code()*B12 | 0x5*B9 | B8 | src2.code());
1511 } 1502 }
1512 1503
1513 1504
1514 void Assembler::fdivd(const Register dst, 1505 void Assembler::vdiv(const DwVfpRegister dst,
1515 const Register src1, 1506 const DwVfpRegister src1,
1516 const Register src2, 1507 const DwVfpRegister src2,
1517 const SBit s, 1508 const Condition cond) {
1518 const Condition cond) { 1509 // Dd = vdiv(Dn, Dm) double precision floating point division.
1519 // Dd = fdivd(Dn, Dm) double precision floating point division.
1520 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm. 1510 // Dd = D:Vd; Dm=M:Vm; Dn=N:Vm.
1521 // Instruction details available in ARM DDI 0406A, A8-584. 1511 // Instruction details available in ARM DDI 0406A, A8-584.
1522 // cond(31-28) | 11101(27-23)| D=?(22) | 00(21-20) | Vn(19-16) | 1512 // cond(31-28) | 11101(27-23)| D=?(22) | 00(21-20) | Vn(19-16) |
1523 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=? | 0(6) | M=?(5) | 0(4) | Vm(3-0) 1513 // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=? | 0(6) | M=?(5) | 0(4) | Vm(3-0)
1524 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1514 ASSERT(CpuFeatures::IsEnabled(VFP3));
1525 emit(cond | 0xE*B24 | B23 | src1.code()*B16 | 1515 emit(cond | 0xE*B24 | B23 | src1.code()*B16 |
1526 dst.code()*B12 | 0x5*B9 | B8 | src2.code()); 1516 dst.code()*B12 | 0x5*B9 | B8 | src2.code());
1527 } 1517 }
1528 1518
1529 1519
1530 void Assembler::fcmp(const Register src1, 1520 void Assembler::vcmp(const DwVfpRegister src1,
1531 const Register src2, 1521 const DwVfpRegister src2,
1532 const SBit s, 1522 const SBit s,
1533 const Condition cond) { 1523 const Condition cond) {
1534 // vcmp(Dd, Dm) double precision floating point comparison. 1524 // vcmp(Dd, Dm) double precision floating point comparison.
1535 // Instruction details available in ARM DDI 0406A, A8-570. 1525 // Instruction details available in ARM DDI 0406A, A8-570.
1536 // cond(31-28) | 11101 (27-23)| D=?(22) | 11 (21-20) | 0100 (19-16) | 1526 // cond(31-28) | 11101 (27-23)| D=?(22) | 11 (21-20) | 0100 (19-16) |
1537 // Vd(15-12) | 101(11-9) | sz(8)=1 | E(7)=? | 1(6) | M(5)=? | 0(4) | Vm(3-0) 1527 // Vd(15-12) | 101(11-9) | sz(8)=1 | E(7)=? | 1(6) | M(5)=? | 0(4) | Vm(3-0)
1538 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1528 ASSERT(CpuFeatures::IsEnabled(VFP3));
1539 emit(cond | 0xE*B24 |B23 | 0x3*B20 | B18 | 1529 emit(cond | 0xE*B24 |B23 | 0x3*B20 | B18 |
1540 src1.code()*B12 | 0x5*B9 | B8 | B6 | src2.code()); 1530 src1.code()*B12 | 0x5*B9 | B8 | B6 | src2.code());
1541 } 1531 }
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 bind(&after_pool); 1812 bind(&after_pool);
1823 } 1813 }
1824 1814
1825 // Since a constant pool was just emitted, move the check offset forward by 1815 // Since a constant pool was just emitted, move the check offset forward by
1826 // the standard interval. 1816 // the standard interval.
1827 next_buffer_check_ = pc_offset() + kCheckConstInterval; 1817 next_buffer_check_ = pc_offset() + kCheckConstInterval;
1828 } 1818 }
1829 1819
1830 1820
1831 } } // namespace v8::internal 1821 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/codegen-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698