Changeset 65303 in webkit for trunk/JavaScriptCore/assembler/ARMAssembler.h
- Timestamp:
- Aug 12, 2010, 11:49:16 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/ARMAssembler.h
r59038 r65303 41 41 r1, 42 42 r2, 43 r3, 44 S0 = r3, 43 r3, S0 = r3, 45 44 r4, 46 45 r5, 47 46 r6, 48 47 r7, 49 r8, 50 S1 = r8, 48 r8, S1 = r8, 51 49 r9, 52 50 r10, 53 51 r11, 54 52 r12, 55 r13, 56 sp = r13, 57 r14, 58 lr = r14, 59 r15, 60 pc = r15 53 r13, sp = r13, 54 r14, lr = r14, 55 r15, pc = r15 61 56 } RegisterID; 62 57 … … 65 60 d1, 66 61 d2, 67 d3, 68 SD0 = d3 62 d3, SD0 = d3, 63 d4, 64 d5, 65 d6, 66 d7, 67 d8, 68 d9, 69 d10, 70 d11, 71 d12, 72 d13, 73 d14, 74 d15, 75 d16, 76 d17, 77 d18, 78 d19, 79 d20, 80 d21, 81 d22, 82 d23, 83 d24, 84 d25, 85 d26, 86 d27, 87 d28, 88 d29, 89 d30, 90 d31 69 91 } FPRegisterID; 70 92 … … 119 141 MUL = 0x00000090, 120 142 MULL = 0x00c00090, 121 FADDD= 0x0e300b00,122 FDIVD= 0x0e800b00,123 FSUBD= 0x0e300b40,124 FMULD= 0x0e200b00,125 FCMPD= 0x0eb40b40,126 FSQRTD= 0x0eb10bc0,143 VADD_F64 = 0x0e300b00, 144 VDIV_F64 = 0x0e800b00, 145 VSUB_F64 = 0x0e300b40, 146 VMUL_F64 = 0x0e200b00, 147 VCMP_F64 = 0x0eb40b40, 148 VSQRT_F64 = 0x0eb10bc0, 127 149 DTR = 0x05000000, 128 150 LDRH = 0x00100090, … … 136 158 BX = 0x012fff10, 137 159 #endif 138 FMSR= 0x0e000a10,139 FMRS= 0x0e100a10,140 FSITOD= 0x0eb80bc0,141 FTOSID= 0x0ebd0b40,142 FMSTAT= 0x0ef1fa10,160 VMOV_VFP = 0x0e000a10, 161 VMOV_ARM = 0x0e100a10, 162 VCVT_F64_S32 = 0x0eb80bc0, 163 VCVT_S32_F64 = 0x0ebd0b40, 164 VMRS_APSR = 0x0ef1fa10, 143 165 #if WTF_ARM_ARCH_AT_LEAST(5) 144 166 CLZ = 0x016f0f10, … … 235 257 void emitInst(ARMWord op, int rd, int rn, ARMWord op2) 236 258 { 237 ASSERT ( ((op2 & ~OP2_IMM) <= 0xfff) || (((op2 & ~OP2_IMMh) <= 0xfff)));259 ASSERT(((op2 & ~OP2_IMM) <= 0xfff) || (((op2 & ~OP2_IMMh) <= 0xfff))); 238 260 m_buffer.putInt(op | RN(rn) | RD(rd) | op2); 261 } 262 263 void emitDoublePrecisionInst(ARMWord op, int dd, int dn, int dm) 264 { 265 ASSERT((dd >= 0 && dd <= 31) && (dn >= 0 && dn <= 31) && (dm >= 0 && dm <= 31)); 266 m_buffer.putInt(op | ((dd & 0xf) << 12) | ((dd & 0x10) << (22 - 4)) 267 | ((dn & 0xf) << 16) | ((dn & 0x10) << (7 - 4)) 268 | (dm & 0xf) | ((dm & 0x10) << (5 - 4))); 269 } 270 271 void emitSinglePrecisionInst(ARMWord op, int sd, int sn, int sm) 272 { 273 ASSERT((sd >= 0 && sd <= 31) && (sn >= 0 && sn <= 31) && (sm >= 0 && sm <= 31)); 274 m_buffer.putInt(op | ((sd >> 1) << 12) | ((sd & 0x1) << 22) 275 | ((sn >> 1) << 16) | ((sn & 0x1) << 7) 276 | (sm >> 1) | ((sm & 0x1) << 5)); 239 277 } 240 278 … … 403 441 } 404 442 405 void faddd_r(int dd, int dn, int dm, Condition cc = AL)406 { 407 emit Inst(static_cast<ARMWord>(cc) | FADDD, dd, dn, dm);408 } 409 410 void fdivd_r(int dd, int dn, int dm, Condition cc = AL)411 { 412 emit Inst(static_cast<ARMWord>(cc) | FDIVD, dd, dn, dm);413 } 414 415 void fsubd_r(int dd, int dn, int dm, Condition cc = AL)416 { 417 emit Inst(static_cast<ARMWord>(cc) | FSUBD, dd, dn, dm);418 } 419 420 void fmuld_r(int dd, int dn, int dm, Condition cc = AL)421 { 422 emit Inst(static_cast<ARMWord>(cc) | FMULD, dd, dn, dm);423 } 424 425 void fcmpd_r(int dd, int dm, Condition cc = AL)426 { 427 emit Inst(static_cast<ARMWord>(cc) | FCMPD, dd, 0, dm);428 } 429 430 void fsqrtd_r(int dd, int dm, Condition cc = AL)431 { 432 emit Inst(static_cast<ARMWord>(cc) | FSQRTD, dd, 0, dm);443 void vadd_f64_r(int dd, int dn, int dm, Condition cc = AL) 444 { 445 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VADD_F64, dd, dn, dm); 446 } 447 448 void vdiv_f64_r(int dd, int dn, int dm, Condition cc = AL) 449 { 450 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VDIV_F64, dd, dn, dm); 451 } 452 453 void vsub_f64_r(int dd, int dn, int dm, Condition cc = AL) 454 { 455 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VSUB_F64, dd, dn, dm); 456 } 457 458 void vmul_f64_r(int dd, int dn, int dm, Condition cc = AL) 459 { 460 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VMUL_F64, dd, dn, dm); 461 } 462 463 void vcmp_f64_r(int dd, int dm, Condition cc = AL) 464 { 465 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VCMP_F64, dd, 0, dm); 466 } 467 468 void vsqrt_f64_r(int dd, int dm, Condition cc = AL) 469 { 470 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VSQRT_F64, dd, 0, dm); 433 471 } 434 472 … … 517 555 } 518 556 519 void fmsr_r(int dd, int rn, Condition cc = AL) 520 { 521 emitInst(static_cast<ARMWord>(cc) | FMSR, rn, dd, 0); 522 } 523 524 void fmrs_r(int rd, int dn, Condition cc = AL) 525 { 526 emitInst(static_cast<ARMWord>(cc) | FMRS, rd, dn, 0); 527 } 528 529 void fsitod_r(int dd, int dm, Condition cc = AL) 530 { 531 emitInst(static_cast<ARMWord>(cc) | FSITOD, dd, 0, dm); 532 } 533 534 void ftosid_r(int fd, int dm, Condition cc = AL) 535 { 536 emitInst(static_cast<ARMWord>(cc) | FTOSID, fd, 0, dm); 537 } 538 539 void fmstat(Condition cc = AL) 540 { 541 m_buffer.putInt(static_cast<ARMWord>(cc) | FMSTAT); 557 void vmov_vfp_r(int sn, int rt, Condition cc = AL) 558 { 559 ASSERT(rt <= 15); 560 emitSinglePrecisionInst(static_cast<ARMWord>(cc) | VMOV_VFP, rt << 1, sn, 0); 561 } 562 563 void vmov_arm_r(int rt, int sn, Condition cc = AL) 564 { 565 ASSERT(rt <= 15); 566 emitSinglePrecisionInst(static_cast<ARMWord>(cc) | VMOV_ARM, rt << 1, sn, 0); 567 } 568 569 void vcvt_f64_s32_r(int dd, int sm, Condition cc = AL) 570 { 571 ASSERT(!(sm & 0x1)); // sm must be divisible by 2 572 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VCVT_F64_S32, dd, 0, (sm >> 1)); 573 } 574 575 void vcvt_s32_f64_r(int sd, int dm, Condition cc = AL) 576 { 577 ASSERT(!(sd & 0x1)); // sd must be divisible by 2 578 emitDoublePrecisionInst(static_cast<ARMWord>(cc) | VCVT_S32_F64, (sd >> 1), 0, dm); 579 } 580 581 void vmrs_apsr(Condition cc = AL) 582 { 583 m_buffer.putInt(static_cast<ARMWord>(cc) | VMRS_APSR); 542 584 } 543 585
Note:
See TracChangeset
for help on using the changeset viewer.