Changeset 46598 in webkit for trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
- Timestamp:
- Jul 30, 2009, 1:57:44 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r44461 r46598 58 58 enum DoubleCondition { 59 59 DoubleEqual = X86Assembler::ConditionE, 60 DoubleNotEqual = X86Assembler::ConditionNE, 60 61 DoubleGreaterThan = X86Assembler::ConditionA, 61 62 DoubleGreaterThanOrEqual = X86Assembler::ConditionAE, … … 92 93 m_assembler.addl_mr(src.offset, src.base, dest); 93 94 } 95 96 void add32(RegisterID src, Address dest) 97 { 98 m_assembler.addl_rm(src, dest.offset, dest.base); 99 } 94 100 95 101 void and32(RegisterID src, RegisterID dest) … … 101 107 { 102 108 m_assembler.andl_ir(imm.m_value, dest); 109 } 110 111 void and32(RegisterID src, Address dest) 112 { 113 m_assembler.andl_rm(src, dest.offset, dest.base); 114 } 115 116 void and32(Address src, RegisterID dest) 117 { 118 m_assembler.andl_mr(src.offset, src.base, dest); 103 119 } 104 120 … … 139 155 m_assembler.imull_rr(src, dest); 140 156 } 157 158 void mul32(Address src, RegisterID dest) 159 { 160 m_assembler.imull_mr(src.offset, src.base, dest); 161 } 141 162 142 163 void mul32(Imm32 imm, RegisterID src, RegisterID dest) … … 144 165 m_assembler.imull_i32r(src, imm.m_value, dest); 145 166 } 146 167 168 void neg32(RegisterID srcDest) 169 { 170 m_assembler.negl_r(srcDest); 171 } 172 173 void neg32(Address srcDest) 174 { 175 m_assembler.negl_m(srcDest.offset, srcDest.base); 176 } 177 147 178 void not32(RegisterID srcDest) 148 179 { 149 180 m_assembler.notl_r(srcDest); 150 181 } 182 183 void not32(Address srcDest) 184 { 185 m_assembler.notl_m(srcDest.offset, srcDest.base); 186 } 151 187 152 188 void or32(RegisterID src, RegisterID dest) … … 158 194 { 159 195 m_assembler.orl_ir(imm.m_value, dest); 196 } 197 198 void or32(RegisterID src, Address dest) 199 { 200 m_assembler.orl_rm(src, dest.offset, dest.base); 201 } 202 203 void or32(Address src, RegisterID dest) 204 { 205 m_assembler.orl_mr(src.offset, src.base, dest); 160 206 } 161 207 … … 212 258 } 213 259 260 void sub32(RegisterID src, Address dest) 261 { 262 m_assembler.subl_rm(src, dest.offset, dest.base); 263 } 264 265 214 266 void xor32(RegisterID src, RegisterID dest) 215 267 { … … 217 269 } 218 270 219 void xor32(Imm32 imm, RegisterID srcDest) 220 { 221 m_assembler.xorl_ir(imm.m_value, srcDest); 271 void xor32(Imm32 imm, Address dest) 272 { 273 m_assembler.xorl_im(imm.m_value, dest.offset, dest.base); 274 } 275 276 void xor32(Imm32 imm, RegisterID dest) 277 { 278 m_assembler.xorl_ir(imm.m_value, dest); 279 } 280 281 void xor32(RegisterID src, Address dest) 282 { 283 m_assembler.xorl_rm(src, dest.offset, dest.base); 284 } 285 286 void xor32(Address src, RegisterID dest) 287 { 288 m_assembler.xorl_mr(src.offset, src.base, dest); 222 289 } 223 290 … … 301 368 } 302 369 370 void divDouble(FPRegisterID src, FPRegisterID dest) 371 { 372 ASSERT(isSSE2Present()); 373 m_assembler.divsd_rr(src, dest); 374 } 375 376 void divDouble(Address src, FPRegisterID dest) 377 { 378 ASSERT(isSSE2Present()); 379 m_assembler.divsd_mr(src.offset, src.base, dest); 380 } 381 303 382 void subDouble(FPRegisterID src, FPRegisterID dest) 304 383 { … … 331 410 } 332 411 412 void convertInt32ToDouble(Address src, FPRegisterID dest) 413 { 414 m_assembler.cvtsi2sd_mr(src.offset, src.base, dest); 415 } 416 333 417 Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right) 334 418 { 335 419 ASSERT(isSSE2Present()); 336 420 m_assembler.ucomisd_rr(right, left); 421 return Jump(m_assembler.jCC(x86Condition(cond))); 422 } 423 424 Jump branchDouble(DoubleCondition cond, FPRegisterID left, Address right) 425 { 426 m_assembler.ucomisd_mr(right.offset, right.base, left); 337 427 return Jump(m_assembler.jCC(x86Condition(cond))); 338 428 } … … 347 437 m_assembler.cvttsd2si_rr(src, dest); 348 438 return branch32(Equal, dest, Imm32(0x80000000)); 439 } 440 441 void zeroDouble(FPRegisterID srcDest) 442 { 443 ASSERT(isSSE2Present()); 444 m_assembler.xorpd_rr(srcDest, srcDest); 349 445 } 350 446 … … 398 494 // Note: on 64-bit this is is a full register move; perhaps it would be 399 495 // useful to have separate move32 & movePtr, with move32 zero extending? 400 m_assembler.movq_rr(src, dest); 496 if (src != dest) 497 m_assembler.movq_rr(src, dest); 401 498 } 402 499 … … 606 703 } 607 704 705 Jump branchAdd32(Condition cond, Imm32 src, Address dest) 706 { 707 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 708 add32(src, dest); 709 return Jump(m_assembler.jCC(x86Condition(cond))); 710 } 711 712 Jump branchAdd32(Condition cond, RegisterID src, Address dest) 713 { 714 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 715 add32(src, dest); 716 return Jump(m_assembler.jCC(x86Condition(cond))); 717 } 718 719 Jump branchAdd32(Condition cond, Address src, RegisterID dest) 720 { 721 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 722 add32(src, dest); 723 return Jump(m_assembler.jCC(x86Condition(cond))); 724 } 725 608 726 Jump branchMul32(Condition cond, RegisterID src, RegisterID dest) 609 727 { … … 612 730 return Jump(m_assembler.jCC(x86Condition(cond))); 613 731 } 732 733 Jump branchMul32(Condition cond, Address src, RegisterID dest) 734 { 735 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 736 mul32(src, dest); 737 return Jump(m_assembler.jCC(x86Condition(cond))); 738 } 614 739 615 740 Jump branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest) … … 633 758 return Jump(m_assembler.jCC(x86Condition(cond))); 634 759 } 635 760 761 Jump branchSub32(Condition cond, Imm32 imm, Address dest) 762 { 763 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 764 sub32(imm, dest); 765 return Jump(m_assembler.jCC(x86Condition(cond))); 766 } 767 768 Jump branchSub32(Condition cond, RegisterID src, Address dest) 769 { 770 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 771 sub32(src, dest); 772 return Jump(m_assembler.jCC(x86Condition(cond))); 773 } 774 775 Jump branchSub32(Condition cond, Address src, RegisterID dest) 776 { 777 ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); 778 sub32(src, dest); 779 return Jump(m_assembler.jCC(x86Condition(cond))); 780 } 781 782 Jump branchOr32(Condition cond, RegisterID src, RegisterID dest) 783 { 784 ASSERT((cond == Signed) || (cond == Zero) || (cond == NonZero)); 785 or32(src, dest); 786 return Jump(m_assembler.jCC(x86Condition(cond))); 787 } 788 636 789 637 790 // Miscellaneous operations: … … 660 813 { 661 814 m_assembler.ret(); 815 } 816 817 void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest) 818 { 819 m_assembler.cmpl_rr(right, left); 820 m_assembler.setCC_r(x86Condition(cond), dest); 821 } 822 823 void set8(Condition cond, Address left, RegisterID right, RegisterID dest) 824 { 825 m_assembler.cmpl_mr(left.offset, left.base, right); 826 m_assembler.setCC_r(x86Condition(cond), dest); 827 } 828 829 void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest) 830 { 831 if (((cond == Equal) || (cond == NotEqual)) && !right.m_value) 832 m_assembler.testl_rr(left, left); 833 else 834 m_assembler.cmpl_ir(right.m_value, left); 835 m_assembler.setCC_r(x86Condition(cond), dest); 662 836 } 663 837 … … 683 857 // dest-src, operations always have a dest? ... possibly not true, considering 684 858 // asm ops like test, or pseudo ops like pop(). 859 860 void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest) 861 { 862 if (mask.m_value == -1) 863 m_assembler.cmpl_im(0, address.offset, address.base); 864 else 865 m_assembler.testl_i32m(mask.m_value, address.offset, address.base); 866 m_assembler.setCC_r(x86Condition(cond), dest); 867 } 868 685 869 void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest) 686 870 {
Note:
See TracChangeset
for help on using the changeset viewer.