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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |