Changeset 84796 in webkit
- Timestamp:
- Apr 25, 2011 1:19:11 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r84795 r84796 1 2011-04-25 Thouraya ANDOLSI <thouraya.andolsi@st.com> 2 3 Reviewed by Gavin Barraclough. 4 5 Rationalize MacroAssembler branch methods 6 https://bugs.webkit.org/show_bug.cgi?id=58950 7 8 split out the 'Condition' enum into 'RelationalCondition' and 'ResultCondition' 9 and apply related changes (only for SH4 platforms). 10 11 * assembler/MacroAssemblerSH4.cpp: 12 * assembler/MacroAssemblerSH4.h: 13 (JSC::MacroAssemblerSH4::compare32): 14 (JSC::MacroAssemblerSH4::branch32WithUnalignedHalfWords): 15 (JSC::MacroAssemblerSH4::branchDouble): 16 (JSC::MacroAssemblerSH4::branch32): 17 (JSC::MacroAssemblerSH4::branchTest8): 18 (JSC::MacroAssemblerSH4::branch8): 19 (JSC::MacroAssemblerSH4::branchTruncateDoubleToInt32): 20 (JSC::MacroAssemblerSH4::test8): 21 (JSC::MacroAssemblerSH4::branch16): 22 (JSC::MacroAssemblerSH4::branchTest32): 23 (JSC::MacroAssemblerSH4::branchAdd32): 24 (JSC::MacroAssemblerSH4::branchMul32): 25 (JSC::MacroAssemblerSH4::branchSub32): 26 (JSC::MacroAssemblerSH4::branchOr32): 27 (JSC::MacroAssemblerSH4::branchConvertDoubleToInt32): 28 (JSC::MacroAssemblerSH4::branchPtrWithPatch): 29 (JSC::MacroAssemblerSH4::SH4Condition): 30 * assembler/SH4Assembler.h: 31 (JSC::SH4Assembler::cmpEqImmR0): 32 1 33 2011-04-25 Adam Barth <abarth@webkit.org> 2 34 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.cpp
r82617 r84796 32 32 33 33 namespace JSC { 34 const Condition MacroAssemblerSH4::Equal = SH4Assembler::EQ;35 const Condition MacroAssemblerSH4::NotEqual = SH4Assembler::NE;36 const Condition MacroAssemblerSH4::GreaterThan = SH4Assembler::GT;37 const Condition MacroAssemblerSH4::GreaterThanOrEqual = SH4Assembler::GE;38 const Condition MacroAssemblerSH4::LessThan = SH4Assembler::LT;39 const Condition MacroAssemblerSH4::LessThanOrEqual = SH4Assembler::LE;40 const Condition MacroAssemblerSH4::UGreaterThan = SH4Assembler::HI;41 const Condition MacroAssemblerSH4::UGreaterThanOrEqual = SH4Assembler::HS;42 const Condition MacroAssemblerSH4::ULessThan = SH4Assembler::LI;43 const Condition MacroAssemblerSH4::ULessThanOrEqual = SH4Assembler::LS;44 const Condition MacroAssemblerSH4::Zero = SH4Assembler::EQ;45 const Condition MacroAssemblerSH4::NonZero = SH4Assembler::NE;46 const Condition MacroAssemblerSH4::Overflow = SH4Assembler::OF;47 const Condition MacroAssemblerSH4::Above = SH4Assembler::HI;48 const Condition MacroAssemblerSH4::AboveOrEqual = SH4Assembler::HS;49 const Condition MacroAssemblerSH4::Below = SH4Assembler::LI;50 const Condition MacroAssemblerSH4::BelowOrEqual = SH4Assembler::LS;51 const Condition MacroAssemblerSH4::DoubleEqual = SH4Assembler::EQ;52 const Condition MacroAssemblerSH4::DoubleNotEqual = SH4Assembler::NE;53 const Condition MacroAssemblerSH4::DoubleGreaterThan = SH4Assembler::GT;54 const Condition MacroAssemblerSH4::DoubleGreaterThanOrEqual = SH4Assembler::GE;55 const Condition MacroAssemblerSH4::DoubleLessThan = SH4Assembler::LT;56 const Condition MacroAssemblerSH4::DoubleLessThanOrEqual = SH4Assembler::LE;57 const Condition MacroAssemblerSH4::DoubleEqualOrUnordered = SH4Assembler::EQU;58 const Condition MacroAssemblerSH4::DoubleNotEqualOrUnordered = SH4Assembler::NEU;59 const Condition MacroAssemblerSH4::DoubleGreaterThanOrUnordered = SH4Assembler::GTU;60 const Condition MacroAssemblerSH4::DoubleGreaterThanOrEqualOrUnordered = SH4Assembler::GEU;61 const Condition MacroAssemblerSH4::DoubleLessThanOrUnordered = SH4Assembler::LTU;62 const Condition MacroAssemblerSH4::DoubleLessThanOrEqualOrUnordered = SH4Assembler::LEU;63 const Condition MacroAssemblerSH4::Signed = SH4Assembler::SI;64 34 65 35 void MacroAssemblerSH4::linkCall(void* code, Call call, FunctionPtr function) -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
r83447 r84796 35 35 36 36 namespace JSC { 37 typedef SH4Assembler::Condition Condition;38 37 39 38 class MacroAssemblerSH4 : public AbstractMacroAssembler<SH4Assembler> { … … 41 40 typedef SH4Assembler::FPRegisterID FPRegisterID; 42 41 43 static const Condition Equal;44 static const Condition NotEqual;45 static const Condition GreaterThan;46 static const Condition GreaterThanOrEqual;47 static const Condition LessThan;48 static const Condition LessThanOrEqual;49 static const Condition UGreaterThan;50 static const Condition UGreaterThanOrEqual;51 static const Condition ULessThan;52 static const Condition ULessThanOrEqual;53 static const Condition Zero;54 static const Condition NonZero;55 static const Condition Overflow;56 static const Condition Above;57 static const Condition AboveOrEqual;58 static const Condition Below;59 static const Condition BelowOrEqual;60 static const Condition DoubleEqual;61 static const Condition DoubleNotEqual;62 static const Condition DoubleGreaterThan;63 static const Condition DoubleGreaterThanOrEqual;64 static const Condition DoubleLessThan;65 static const Condition DoubleLessThanOrEqual;66 static const Condition DoubleEqualOrUnordered;67 static const Condition DoubleNotEqualOrUnordered;68 static const Condition DoubleGreaterThanOrUnordered;69 static const Condition DoubleGreaterThanOrEqualOrUnordered;70 static const Condition DoubleLessThanOrUnordered;71 static const Condition DoubleLessThanOrEqualOrUnordered;72 static const Condition Signed;73 42 static const Scale ScalePtr = TimesFour; 74 43 static const FPRegisterID fscratch = SH4Registers::fr10; … … 77 46 static const RegisterID scratchReg3 = SH4Registers::r13; 78 47 48 enum RelationalCondition { 49 Equal = SH4Assembler::EQ, 50 NotEqual = SH4Assembler::NE, 51 Above = SH4Assembler::HI, 52 AboveOrEqual = SH4Assembler::HS, 53 Below = SH4Assembler::LI, 54 BelowOrEqual = SH4Assembler::LS, 55 GreaterThan = SH4Assembler::GT, 56 GreaterThanOrEqual = SH4Assembler::GE, 57 LessThan = SH4Assembler::LT, 58 LessThanOrEqual = SH4Assembler::LE 59 }; 60 61 enum ResultCondition { 62 Overflow = SH4Assembler::OF, 63 Signed = SH4Assembler::SI, 64 Zero = SH4Assembler::EQ, 65 NonZero = SH4Assembler::NE 66 }; 67 68 enum DoubleCondition { 69 // These conditions will only evaluate to true if the comparison is ordered - i.e. neither operand is NaN. 70 DoubleEqual = SH4Assembler::EQ, 71 DoubleNotEqual = SH4Assembler::NE, 72 DoubleGreaterThan = SH4Assembler::GT, 73 DoubleGreaterThanOrEqual = SH4Assembler::GE, 74 DoubleLessThan = SH4Assembler::LT, 75 DoubleLessThanOrEqual = SH4Assembler::LE, 76 // If either operand is NaN, these conditions always evaluate to true. 77 DoubleEqualOrUnordered = SH4Assembler::EQU, 78 DoubleNotEqualOrUnordered = SH4Assembler::NEU, 79 DoubleGreaterThanOrUnordered = SH4Assembler::GTU, 80 DoubleGreaterThanOrEqualOrUnordered = SH4Assembler::GEU, 81 DoubleLessThanOrUnordered = SH4Assembler::LTU, 82 DoubleLessThanOrEqualOrUnordered = SH4Assembler::LEU, 83 }; 84 79 85 RegisterID claimScratch() 80 86 { … … 349 355 } 350 356 351 void compare32(int imm, RegisterID dst, Condition cond)357 void compare32(int imm, RegisterID dst, RelationalCondition cond) 352 358 { 353 359 if (((cond == Equal) || (cond == NotEqual)) && (dst == SH4Registers::r0) && m_assembler.isImmediate(imm)) { 354 m_assembler.cmpEqImmR0(imm, dst , cond);360 m_assembler.cmpEqImmR0(imm, dst); 355 361 return; 356 362 } … … 358 364 RegisterID scr = claimScratch(); 359 365 m_assembler.loadConstant(imm, scr); 360 m_assembler.cmplRegReg(scr, dst, cond);361 releaseScratch(scr); 362 } 363 364 void compare32(int offset, RegisterID base, RegisterID left, Condition cond)366 m_assembler.cmplRegReg(scr, dst, SH4Condition(cond)); 367 releaseScratch(scr); 368 } 369 370 void compare32(int offset, RegisterID base, RegisterID left, RelationalCondition cond) 365 371 { 366 372 RegisterID scr = claimScratch(); 367 373 if (!offset) { 368 374 m_assembler.movlMemReg(base, scr); 369 m_assembler.cmplRegReg(scr, left, cond);375 m_assembler.cmplRegReg(scr, left, SH4Condition(cond)); 370 376 releaseScratch(scr); 371 377 return; … … 376 382 m_assembler.addlRegReg(base, scr); 377 383 m_assembler.movlMemReg(scr, scr); 378 m_assembler.cmplRegReg(scr, left, cond);384 m_assembler.cmplRegReg(scr, left, SH4Condition(cond)); 379 385 releaseScratch(scr); 380 386 return; … … 382 388 383 389 m_assembler.movlMemReg(offset >> 2, base, scr); 384 m_assembler.cmplRegReg(scr, left, cond);390 m_assembler.cmplRegReg(scr, left, SH4Condition(cond)); 385 391 releaseScratch(scr); 386 392 } … … 422 428 } 423 429 424 void compare32(RegisterID right, int offset, RegisterID base, Condition cond)430 void compare32(RegisterID right, int offset, RegisterID base, RelationalCondition cond) 425 431 { 426 432 if (!offset) { 427 433 RegisterID scr = claimScratch(); 428 434 m_assembler.movlMemReg(base, scr); 429 m_assembler.cmplRegReg(right, scr, cond);435 m_assembler.cmplRegReg(right, scr, SH4Condition(cond)); 430 436 releaseScratch(scr); 431 437 return; … … 437 443 m_assembler.addlRegReg(base, scr); 438 444 m_assembler.movlMemReg(scr, scr); 439 m_assembler.cmplRegReg(right, scr, cond);445 m_assembler.cmplRegReg(right, scr, SH4Condition(cond)); 440 446 releaseScratch(scr); 441 447 return; … … 444 450 RegisterID scr = claimScratch(); 445 451 m_assembler.movlMemReg(offset >> 2, base, scr); 446 m_assembler.cmplRegReg(right, scr, cond);447 releaseScratch(scr); 448 } 449 450 void compare32(int imm, int offset, RegisterID base, Condition cond)452 m_assembler.cmplRegReg(right, scr, SH4Condition(cond)); 453 releaseScratch(scr); 454 } 455 456 void compare32(int imm, int offset, RegisterID base, RelationalCondition cond) 451 457 { 452 458 if (!offset) { … … 455 461 m_assembler.movlMemReg(base, scr); 456 462 m_assembler.loadConstant(imm, scr1); 457 m_assembler.cmplRegReg(scr1, scr, cond);463 m_assembler.cmplRegReg(scr1, scr, SH4Condition(cond)); 458 464 releaseScratch(scr1); 459 465 releaseScratch(scr); … … 468 474 m_assembler.movlMemReg(scr, scr); 469 475 m_assembler.loadConstant(imm, scr1); 470 m_assembler.cmplRegReg(scr1, scr, cond);476 m_assembler.cmplRegReg(scr1, scr, SH4Condition(cond)); 471 477 releaseScratch(scr1); 472 478 releaseScratch(scr); … … 478 484 m_assembler.movlMemReg(offset >> 2, base, scr); 479 485 m_assembler.loadConstant(imm, scr1); 480 m_assembler.cmplRegReg(scr1, scr, cond);486 m_assembler.cmplRegReg(scr1, scr, SH4Condition(cond)); 481 487 releaseScratch(scr1); 482 488 releaseScratch(scr); … … 867 873 } 868 874 869 Jump branch32WithUnalignedHalfWords( Condition cond, BaseIndex left, TrustedImm32 right)875 Jump branch32WithUnalignedHalfWords(RelationalCondition cond, BaseIndex left, TrustedImm32 right) 870 876 { 871 877 RegisterID scr = scratchReg3; … … 895 901 } 896 902 897 Jump branchDouble( Condition cond, FPRegisterID left, FPRegisterID right)903 Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right) 898 904 { 899 905 if (cond == DoubleEqual) { … … 907 913 m_assembler.dcnvds(right); 908 914 m_assembler.stsfpulReg(scr); 909 m_assembler.cmplRegReg(scratchReg3, scr, Equal);915 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 910 916 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 911 917 m_assembler.branch(BT_OPCODE, 8); 912 918 m_assembler.dcnvds(left); 913 919 m_assembler.stsfpulReg(scr); 914 m_assembler.cmplRegReg(scratchReg3, scr, Equal);920 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 915 921 m_assembler.branch(BT_OPCODE, 4); 916 922 m_assembler.dcmppeq(right, left); … … 944 950 m_assembler.dcnvds(right); 945 951 m_assembler.stsfpulReg(scr); 946 m_assembler.cmplRegReg(scratchReg3, scr, Equal);952 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 947 953 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 948 954 m_assembler.branch(BT_OPCODE, 5); 949 955 m_assembler.dcnvds(left); 950 956 m_assembler.stsfpulReg(scr); 951 m_assembler.cmplRegReg(scratchReg3, scr, Equal);957 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 952 958 m_assembler.branch(BT_OPCODE, 1); 953 959 m_assembler.dcmppeq(left, right); … … 961 967 m_assembler.dcnvds(right); 962 968 m_assembler.stsfpulReg(scr); 963 m_assembler.cmplRegReg(scratchReg3, scr, Equal);969 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 964 970 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 965 971 m_assembler.branch(BT_OPCODE, 5); 966 972 m_assembler.dcnvds(left); 967 973 m_assembler.stsfpulReg(scr); 968 m_assembler.cmplRegReg(scratchReg3, scr, Equal);974 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 969 975 m_assembler.branch(BT_OPCODE, 1); 970 976 m_assembler.dcmppgt(right, left); … … 978 984 m_assembler.dcnvds(right); 979 985 m_assembler.stsfpulReg(scr); 980 m_assembler.cmplRegReg(scratchReg3, scr, Equal);986 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 981 987 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 982 988 m_assembler.branch(BT_OPCODE, 5); 983 989 m_assembler.dcnvds(left); 984 990 m_assembler.stsfpulReg(scr); 985 m_assembler.cmplRegReg(scratchReg3, scr, Equal);991 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 986 992 m_assembler.branch(BT_OPCODE, 1); 987 993 m_assembler.dcmppgt(left, right); … … 995 1001 m_assembler.dcnvds(right); 996 1002 m_assembler.stsfpulReg(scr); 997 m_assembler.cmplRegReg(scratchReg3, scr, Equal);1003 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 998 1004 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 999 1005 m_assembler.branch(BT_OPCODE, 5); 1000 1006 m_assembler.dcnvds(left); 1001 1007 m_assembler.stsfpulReg(scr); 1002 m_assembler.cmplRegReg(scratchReg3, scr, Equal);1008 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1003 1009 m_assembler.branch(BT_OPCODE, 1); 1004 1010 m_assembler.dcmppgt(left, right); … … 1012 1018 m_assembler.dcnvds(right); 1013 1019 m_assembler.stsfpulReg(scr); 1014 m_assembler.cmplRegReg(scratchReg3, scr, Equal);1020 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1015 1021 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1016 1022 m_assembler.branch(BT_OPCODE, 5); 1017 1023 m_assembler.dcnvds(left); 1018 1024 m_assembler.stsfpulReg(scr); 1019 m_assembler.cmplRegReg(scratchReg3, scr, Equal);1025 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1020 1026 m_assembler.branch(BT_OPCODE, 1); 1021 1027 m_assembler.dcmppgt(right, left); … … 1029 1035 m_assembler.dcnvds(right); 1030 1036 m_assembler.stsfpulReg(scr); 1031 m_assembler.cmplRegReg(scratchReg3, scr, Equal);1037 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1032 1038 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1033 1039 m_assembler.branch(BT_OPCODE, 5); 1034 1040 m_assembler.dcnvds(left); 1035 1041 m_assembler.stsfpulReg(scr); 1036 m_assembler.cmplRegReg(scratchReg3, scr, Equal);1042 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1037 1043 m_assembler.branch(BT_OPCODE, 1); 1038 1044 m_assembler.dcmppeq(right, left); … … 1061 1067 } 1062 1068 1063 void set8Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest) 1064 { 1065 set32Compare32(cond, left, right, dest); 1066 } 1067 1068 void set8Compare32(Condition cond, RegisterID left, TrustedImm32 right, RegisterID dest) 1069 { 1070 if (left != dest) { 1071 m_assembler.loadConstant(right.m_value, dest); 1072 set32Compare32(cond, left, dest, dest); 1073 return; 1074 } 1075 1076 RegisterID scr = claimScratch(); 1077 m_assembler.loadConstant(right.m_value, scr); 1078 set32Compare32(cond, left, scr, dest); 1079 releaseScratch(scr); 1080 } 1081 1082 Jump branch32(Condition cond, BaseIndex left, TrustedImm32 right) 1069 Jump branch32(RelationalCondition cond, BaseIndex left, TrustedImm32 right) 1083 1070 { 1084 1071 RegisterID scr = claimScratch(); … … 1102 1089 } 1103 1090 1104 Jump branchTest8( Condition cond, Address address, TrustedImm32 mask = TrustedImm32(-1))1091 Jump branchTest8(ResultCondition cond, Address address, TrustedImm32 mask = TrustedImm32(-1)) 1105 1092 { 1106 1093 RegisterID addressTempRegister = claimScratch(); … … 1117 1104 } 1118 1105 1119 Jump branch8( Condition cond, Address left, TrustedImm32 right)1106 Jump branch8(RelationalCondition cond, Address left, TrustedImm32 right) 1120 1107 { 1121 1108 RegisterID addressTempRegister = claimScratch(); … … 1131 1118 m_assembler.stsfpulReg(dest); 1132 1119 m_assembler.loadConstant(0x7fffffff, scratchReg3); 1133 m_assembler.cmplRegReg(dest, scratchReg3, Equal);1120 m_assembler.cmplRegReg(dest, scratchReg3, SH4Condition(Equal)); 1134 1121 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 14, sizeof(uint32_t)); 1135 1122 m_assembler.branch(BT_OPCODE, 2); 1136 1123 m_assembler.addlImm8r(1, scratchReg3); 1137 m_assembler.cmplRegReg(dest, scratchReg3, Equal);1124 m_assembler.cmplRegReg(dest, scratchReg3, SH4Condition(Equal)); 1138 1125 return branchTrue(); 1139 1126 } … … 1209 1196 } 1210 1197 1211 void set32Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)1212 { 1213 m_assembler.cmplRegReg(right, left, cond);1198 void compare32(RelationalCondition cond, RegisterID left, RegisterID right, RegisterID dest) 1199 { 1200 m_assembler.cmplRegReg(right, left, SH4Condition(cond)); 1214 1201 if (cond != NotEqual) { 1215 1202 m_assembler.movt(dest); … … 1223 1210 } 1224 1211 1225 void set32Compare32(Condition cond, RegisterID left, TrustedImm32 right, RegisterID dest)1212 void compare32(RelationalCondition cond, RegisterID left, TrustedImm32 right, RegisterID dest) 1226 1213 { 1227 1214 if (left != dest) { 1228 1215 move(right, dest); 1229 set32Compare32(cond, left, dest, dest);1216 compare32(cond, left, dest, dest); 1230 1217 return; 1231 1218 } … … 1233 1220 RegisterID scr = claimScratch(); 1234 1221 move(right, scr); 1235 set32Compare32(cond, left, scr, dest);1236 releaseScratch(scr); 1237 } 1238 1239 void set32Test8(Condition cond, Address address, TrustedImm32 mask, RegisterID dest)1222 compare32(cond, left, scr, dest); 1223 releaseScratch(scr); 1224 } 1225 1226 void test8(ResultCondition cond, Address address, TrustedImm32 mask, RegisterID dest) 1240 1227 { 1241 1228 ASSERT((cond == Zero) || (cond == NonZero)); … … 1243 1230 load8(address, dest); 1244 1231 if (mask.m_value == -1) 1245 compare32(0, dest, cond);1232 compare32(0, dest, static_cast<RelationalCondition>(cond)); 1246 1233 else 1247 1234 testlImm(mask.m_value, dest); … … 1265 1252 } 1266 1253 1267 Jump branch32( Condition cond, RegisterID left, RegisterID right)1268 { 1269 m_assembler.cmplRegReg(right, left, cond);1254 Jump branch32(RelationalCondition cond, RegisterID left, RegisterID right) 1255 { 1256 m_assembler.cmplRegReg(right, left, SH4Condition(cond)); 1270 1257 /* BT label => BF off 1271 1258 nop LDR reg … … 1278 1265 } 1279 1266 1280 Jump branch32( Condition cond, RegisterID left, TrustedImm32 right)1267 Jump branch32(RelationalCondition cond, RegisterID left, TrustedImm32 right) 1281 1268 { 1282 1269 if (((cond == Equal) || (cond == NotEqual)) && !right.m_value) … … 1290 1277 } 1291 1278 1292 Jump branch32( Condition cond, RegisterID left, Address right)1279 Jump branch32(RelationalCondition cond, RegisterID left, Address right) 1293 1280 { 1294 1281 compare32(right.offset, right.base, left, cond); … … 1298 1285 } 1299 1286 1300 Jump branch32( Condition cond, Address left, RegisterID right)1287 Jump branch32(RelationalCondition cond, Address left, RegisterID right) 1301 1288 { 1302 1289 compare32(right, left.offset, left.base, cond); … … 1306 1293 } 1307 1294 1308 Jump branch32( Condition cond, Address left, TrustedImm32 right)1295 Jump branch32(RelationalCondition cond, Address left, TrustedImm32 right) 1309 1296 { 1310 1297 compare32(right.m_value, left.offset, left.base, cond); … … 1314 1301 } 1315 1302 1316 Jump branch32( Condition cond, AbsoluteAddress left, RegisterID right)1303 Jump branch32(RelationalCondition cond, AbsoluteAddress left, RegisterID right) 1317 1304 { 1318 1305 RegisterID scr = claimScratch(); 1319 1306 1320 1307 move(TrustedImm32(reinterpret_cast<uint32_t>(left.m_ptr)), scr); 1321 m_assembler.cmplRegReg(right, scr, cond);1322 releaseScratch(scr); 1323 1324 if (cond == NotEqual) 1325 return branchFalse(); 1326 return branchTrue(); 1327 } 1328 1329 Jump branch32( Condition cond, AbsoluteAddress left, TrustedImm32 right)1308 m_assembler.cmplRegReg(right, scr, SH4Condition(cond)); 1309 releaseScratch(scr); 1310 1311 if (cond == NotEqual) 1312 return branchFalse(); 1313 return branchTrue(); 1314 } 1315 1316 Jump branch32(RelationalCondition cond, AbsoluteAddress left, TrustedImm32 right) 1330 1317 { 1331 1318 RegisterID addressTempRegister = claimScratch(); … … 1341 1328 } 1342 1329 1343 Jump branch16( Condition cond, BaseIndex left, RegisterID right)1330 Jump branch16(RelationalCondition cond, BaseIndex left, RegisterID right) 1344 1331 { 1345 1332 RegisterID scr = claimScratch(); … … 1358 1345 } 1359 1346 1360 Jump branch16( Condition cond, BaseIndex left, TrustedImm32 right)1347 Jump branch16(RelationalCondition cond, BaseIndex left, TrustedImm32 right) 1361 1348 { 1362 1349 RegisterID scr = claimScratch(); … … 1378 1365 } 1379 1366 1380 Jump branchTest32( Condition cond, RegisterID reg, RegisterID mask)1367 Jump branchTest32(ResultCondition cond, RegisterID reg, RegisterID mask) 1381 1368 { 1382 1369 ASSERT((cond == Zero) || (cond == NonZero)); … … 1389 1376 } 1390 1377 1391 Jump branchTest32( Condition cond, RegisterID reg, TrustedImm32 mask = TrustedImm32(-1))1378 Jump branchTest32(ResultCondition cond, RegisterID reg, TrustedImm32 mask = TrustedImm32(-1)) 1392 1379 { 1393 1380 ASSERT((cond == Zero) || (cond == NonZero)); … … 1403 1390 } 1404 1391 1405 Jump branchTest32( Condition cond, Address address, TrustedImm32 mask = TrustedImm32(-1))1392 Jump branchTest32(ResultCondition cond, Address address, TrustedImm32 mask = TrustedImm32(-1)) 1406 1393 { 1407 1394 ASSERT((cond == Zero) || (cond == NonZero)); 1408 1395 1409 1396 if (mask.m_value == -1) 1410 compare32(0, address.offset, address.base, cond);1397 compare32(0, address.offset, address.base, static_cast<RelationalCondition>(cond)); 1411 1398 else 1412 1399 testImm(mask.m_value, address.offset, address.base); … … 1417 1404 } 1418 1405 1419 Jump branchTest32( Condition cond, BaseIndex address, TrustedImm32 mask = TrustedImm32(-1))1406 Jump branchTest32(ResultCondition cond, BaseIndex address, TrustedImm32 mask = TrustedImm32(-1)) 1420 1407 { 1421 1408 RegisterID scr = claimScratch(); … … 1467 1454 // Arithmetic control flow operations 1468 1455 1469 Jump branchAdd32( Condition cond, RegisterID src, RegisterID dest)1456 Jump branchAdd32(ResultCondition cond, RegisterID src, RegisterID dest) 1470 1457 { 1471 1458 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1491 1478 } 1492 1479 1493 Jump branchAdd32( Condition cond, TrustedImm32 imm, RegisterID dest)1480 Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, RegisterID dest) 1494 1481 { 1495 1482 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1499 1486 } 1500 1487 1501 Jump branchMul32( Condition cond, RegisterID src, RegisterID dest)1488 Jump branchMul32(ResultCondition cond, RegisterID src, RegisterID dest) 1502 1489 { 1503 1490 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1512 1499 m_assembler.shaRegReg(scr1, scr); 1513 1500 m_assembler.stsmach(scr); 1514 m_assembler.cmplRegReg(scr, scr1, Zero);1501 m_assembler.cmplRegReg(scr, scr1, SH4Condition(Equal)); 1515 1502 releaseScratch(scr1); 1516 1503 releaseScratch(scr); … … 1526 1513 } 1527 1514 1528 compare32(0, dest, cond);1529 1530 if (cond == NotEqual) 1531 return branchFalse(); 1532 return branchTrue(); 1533 } 1534 1535 Jump branchMul32( Condition cond, TrustedImm32 imm, RegisterID src, RegisterID dest)1515 compare32(0, dest, static_cast<RelationalCondition>(cond)); 1516 1517 if (cond == NotEqual) 1518 return branchFalse(); 1519 return branchTrue(); 1520 } 1521 1522 Jump branchMul32(ResultCondition cond, TrustedImm32 imm, RegisterID src, RegisterID dest) 1536 1523 { 1537 1524 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1544 1531 } 1545 1532 1546 Jump branchSub32( Condition cond, RegisterID src, RegisterID dest)1533 Jump branchSub32(ResultCondition cond, RegisterID src, RegisterID dest) 1547 1534 { 1548 1535 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1561 1548 1562 1549 sub32(src, dest); 1563 compare32(0, dest, cond);1564 1565 if (cond == NotEqual) 1566 return branchFalse(); 1567 return branchTrue(); 1568 } 1569 1570 Jump branchSub32( Condition cond, TrustedImm32 imm, RegisterID dest)1550 compare32(0, dest, static_cast<RelationalCondition>(cond)); 1551 1552 if (cond == NotEqual) 1553 return branchFalse(); 1554 return branchTrue(); 1555 } 1556 1557 Jump branchSub32(ResultCondition cond, TrustedImm32 imm, RegisterID dest) 1571 1558 { 1572 1559 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1576 1563 } 1577 1564 1578 Jump branchOr32( Condition cond, RegisterID src, RegisterID dest)1565 Jump branchOr32(ResultCondition cond, RegisterID src, RegisterID dest) 1579 1566 { 1580 1567 ASSERT((cond == Signed) || (cond == Zero) || (cond == NonZero)); … … 1582 1569 if (cond == Signed) { 1583 1570 or32(src, dest); 1584 compare32(0, dest, LessThan);1571 compare32(0, dest, static_cast<RelationalCondition>(LessThan)); 1585 1572 return branchTrue(); 1586 1573 } 1587 1574 1588 1575 or32(src, dest); 1589 compare32(0, dest, cond);1576 compare32(0, dest, static_cast<RelationalCondition>(cond)); 1590 1577 1591 1578 if (cond == NotEqual) … … 1602 1589 1603 1590 if (dest == SH4Registers::r0) 1604 m_assembler.cmpEqImmR0(0, dest , Equal);1591 m_assembler.cmpEqImmR0(0, dest); 1605 1592 else { 1606 1593 m_assembler.movImm8(0, scratchReg3); 1607 m_assembler.cmplRegReg(scratchReg3, dest, Equal);1594 m_assembler.cmplRegReg(scratchReg3, dest, SH4Condition(Equal)); 1608 1595 } 1609 1596 failureCases.append(branchTrue()); … … 1666 1653 } 1667 1654 1668 Jump branchPtrWithPatch( Condition cond, RegisterID left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0))1655 Jump branchPtrWithPatch(RelationalCondition cond, RegisterID left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0)) 1669 1656 { 1670 1657 RegisterID dataTempRegister = claimScratch(); 1671 1658 1672 1659 dataLabel = moveWithPatch(initialRightValue, dataTempRegister); 1673 m_assembler.cmplRegReg(dataTempRegister, left, cond);1660 m_assembler.cmplRegReg(dataTempRegister, left, SH4Condition(cond)); 1674 1661 releaseScratch(dataTempRegister); 1675 1662 … … 1679 1666 } 1680 1667 1681 Jump branchPtrWithPatch( Condition cond, Address left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0))1668 Jump branchPtrWithPatch(RelationalCondition cond, Address left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0)) 1682 1669 { 1683 1670 RegisterID scr = claimScratch(); … … 1688 1675 RegisterID scr1 = claimScratch(); 1689 1676 dataLabel = moveWithPatch(initialRightValue, scr1); 1690 m_assembler.cmplRegReg(scr1, scr, cond);1677 m_assembler.cmplRegReg(scr1, scr, SH4Condition(cond)); 1691 1678 releaseScratch(scr); 1692 1679 releaseScratch(scr1); … … 1735 1722 return tailRecursiveCall(); 1736 1723 } 1737 1724 protected: 1725 SH4Assembler::Condition SH4Condition(RelationalCondition cond) 1726 { 1727 return static_cast<SH4Assembler::Condition>(cond); 1728 } 1729 1730 SH4Assembler::Condition SH4Condition(ResultCondition cond) 1731 { 1732 return static_cast<SH4Assembler::Condition>(cond); 1733 } 1738 1734 private: 1739 1735 friend class LinkBuffer; -
trunk/Source/JavaScriptCore/assembler/SH4Assembler.h
r82617 r84796 703 703 } 704 704 705 void cmpEqImmR0(int imm, RegisterID dst , Condition cond)705 void cmpEqImmR0(int imm, RegisterID dst) 706 706 { 707 707 uint16_t opc = getOpcodeGroup5(CMPEQIMM_OPCODE, imm);
Note: See TracChangeset
for help on using the changeset viewer.