Changeset 112192 in webkit for trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
- Timestamp:
- Mar 26, 2012, 7:03:47 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
r110289 r112192 682 682 add32(TrustedImm32(1), scr); 683 683 load8(scr, dest); 684 move(TrustedImm32(8), scr); 685 m_assembler.shllRegReg(dest, scr); 684 m_assembler.shllImm8r(8, dest); 686 685 or32(scr1, dest); 687 686 … … 943 942 { 944 943 RegisterID scr = claimScratch(); 944 RegisterID scr1 = claimScratch(); 945 Jump m_jump; 946 JumpList end; 947 948 if (dest != SH4Registers::r0) 949 move(SH4Registers::r0, scr1); 945 950 946 951 move(address.index, scr); … … 951 956 add32(TrustedImm32(address.offset), scr); 952 957 953 RegisterID scr1 = claimScratch(); 958 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 68, sizeof(uint32_t)); 959 move(scr, SH4Registers::r0); 960 m_assembler.andlImm8r(0x3, SH4Registers::r0); 961 m_assembler.cmpEqImmR0(0x0, SH4Registers::r0); 962 m_jump = Jump(m_assembler.jne(), SH4Assembler::JumpNear); 963 if (dest != SH4Registers::r0) 964 move(scr1, SH4Registers::r0); 965 966 load32(scr, dest); 967 end.append(Jump(m_assembler.bra(), SH4Assembler::JumpNear)); 968 m_assembler.nop(); 969 m_jump.link(this); 970 m_assembler.andlImm8r(0x1, SH4Registers::r0); 971 m_assembler.cmpEqImmR0(0x0, SH4Registers::r0); 972 973 if (dest != SH4Registers::r0) 974 move(scr1, SH4Registers::r0); 975 976 m_jump = Jump(m_assembler.jne(), SH4Assembler::JumpNear); 954 977 load16(scr, scr1); 955 978 add32(TrustedImm32(2), scr); 956 979 load16(scr, dest); 957 move(TrustedImm32(16), scr); 958 m_assembler.shllRegReg(dest, scr); 980 m_assembler.shllImm8r(16, dest); 959 981 or32(scr1, dest); 982 end.append(Jump(m_assembler.bra(), SH4Assembler::JumpNear)); 983 m_assembler.nop(); 984 m_jump.link(this); 985 load8(scr, scr1); 986 add32(TrustedImm32(1), scr); 987 load16(scr, dest); 988 m_assembler.shllImm8r(8, dest); 989 or32(dest, scr1); 990 add32(TrustedImm32(2), scr); 991 load8(scr, dest); 992 m_assembler.shllImm8r(8, dest); 993 m_assembler.shllImm8r(16, dest); 994 or32(scr1, dest); 995 end.link(this); 960 996 961 997 releaseScratch(scr); … … 1000 1036 if (cond == DoubleNotEqual) { 1001 1037 RegisterID scr = claimScratch(); 1038 JumpList end; 1002 1039 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1003 1040 m_assembler.dcnvds(right); … … 1005 1042 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1006 1043 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1007 m_assembler.branch(BT_OPCODE, 8);1044 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1008 1045 m_assembler.dcnvds(left); 1009 1046 m_assembler.stsfpulReg(scr); 1010 1047 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1011 m_assembler.branch(BT_OPCODE, 4);1048 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1012 1049 m_assembler.dcmppeq(right, left); 1013 1050 releaseScratch(scr); 1014 return branchFalse(); 1051 Jump m_jump = branchFalse(); 1052 end.link(this); 1053 return m_jump; 1015 1054 } 1016 1055 … … 1037 1076 if (cond == DoubleEqualOrUnordered) { 1038 1077 RegisterID scr = claimScratch(); 1078 JumpList end; 1039 1079 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1040 1080 m_assembler.dcnvds(right); … … 1042 1082 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1043 1083 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1044 m_assembler.branch(BT_OPCODE, 5);1084 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1045 1085 m_assembler.dcnvds(left); 1046 1086 m_assembler.stsfpulReg(scr); 1047 1087 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1048 m_assembler.branch(BT_OPCODE, 1);1088 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1049 1089 m_assembler.dcmppeq(left, right); 1090 Jump m_jump = Jump(m_assembler.je()); 1091 end.link(this); 1092 m_assembler.extraInstrForBranch(scr); 1050 1093 releaseScratch(scr); 1051 return branchTrue();1094 return m_jump; 1052 1095 } 1053 1096 1054 1097 if (cond == DoubleGreaterThanOrUnordered) { 1055 1098 RegisterID scr = claimScratch(); 1099 JumpList end; 1056 1100 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1057 1101 m_assembler.dcnvds(right); … … 1059 1103 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1060 1104 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1061 m_assembler.branch(BT_OPCODE, 5);1105 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1062 1106 m_assembler.dcnvds(left); 1063 1107 m_assembler.stsfpulReg(scr); 1064 1108 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1065 m_assembler.branch(BT_OPCODE, 1);1109 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1066 1110 m_assembler.dcmppgt(right, left); 1111 Jump m_jump = Jump(m_assembler.je()); 1112 end.link(this); 1113 m_assembler.extraInstrForBranch(scr); 1067 1114 releaseScratch(scr); 1068 return branchTrue();1115 return m_jump; 1069 1116 } 1070 1117 1071 1118 if (cond == DoubleGreaterThanOrEqualOrUnordered) { 1072 1119 RegisterID scr = claimScratch(); 1120 JumpList end; 1073 1121 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1074 1122 m_assembler.dcnvds(right); … … 1076 1124 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1077 1125 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1078 m_assembler.branch(BT_OPCODE, 5);1126 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1079 1127 m_assembler.dcnvds(left); 1080 1128 m_assembler.stsfpulReg(scr); 1081 1129 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1082 m_assembler.branch(BT_OPCODE, 1);1130 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1083 1131 m_assembler.dcmppgt(left, right); 1132 Jump m_jump = Jump(m_assembler.jne()); 1133 end.link(this); 1134 m_assembler.extraInstrForBranch(scr); 1084 1135 releaseScratch(scr); 1085 return branchFalse();1136 return m_jump; 1086 1137 } 1087 1138 1088 1139 if (cond == DoubleLessThanOrUnordered) { 1089 1140 RegisterID scr = claimScratch(); 1141 JumpList end; 1090 1142 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1091 1143 m_assembler.dcnvds(right); … … 1093 1145 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1094 1146 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1095 m_assembler.branch(BT_OPCODE, 5);1147 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1096 1148 m_assembler.dcnvds(left); 1097 1149 m_assembler.stsfpulReg(scr); 1098 1150 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1099 m_assembler.branch(BT_OPCODE, 1);1151 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1100 1152 m_assembler.dcmppgt(left, right); 1153 Jump m_jump = Jump(m_assembler.je()); 1154 end.link(this); 1155 m_assembler.extraInstrForBranch(scr); 1101 1156 releaseScratch(scr); 1102 return branchTrue();1157 return m_jump; 1103 1158 } 1104 1159 1105 1160 if (cond == DoubleLessThanOrEqualOrUnordered) { 1106 1161 RegisterID scr = claimScratch(); 1162 JumpList end; 1107 1163 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1108 1164 m_assembler.dcnvds(right); … … 1110 1166 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1111 1167 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1112 m_assembler.branch(BT_OPCODE, 5);1168 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1113 1169 m_assembler.dcnvds(left); 1114 1170 m_assembler.stsfpulReg(scr); 1115 1171 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1116 m_assembler.branch(BT_OPCODE, 1);1172 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1117 1173 m_assembler.dcmppgt(right, left); 1174 Jump m_jump = Jump(m_assembler.jne()); 1175 end.link(this); 1176 m_assembler.extraInstrForBranch(scr); 1118 1177 releaseScratch(scr); 1119 return branchFalse();1178 return m_jump; 1120 1179 } 1121 1180 1122 1181 ASSERT(cond == DoubleNotEqualOrUnordered); 1123 1182 RegisterID scr = claimScratch(); 1183 JumpList end; 1124 1184 m_assembler.loadConstant(0x7fbfffff, scratchReg3); 1125 1185 m_assembler.dcnvds(right); … … 1127 1187 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1128 1188 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 22, sizeof(uint32_t)); 1129 m_assembler.branch(BT_OPCODE, 5);1189 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1130 1190 m_assembler.dcnvds(left); 1131 1191 m_assembler.stsfpulReg(scr); 1132 1192 m_assembler.cmplRegReg(scratchReg3, scr, SH4Condition(Equal)); 1133 m_assembler.branch(BT_OPCODE, 1);1193 end.append(Jump(m_assembler.je(), SH4Assembler::JumpNear)); 1134 1194 m_assembler.dcmppeq(right, left); 1135 releaseScratch(scr); 1136 return branchFalse(); 1195 Jump m_jump = Jump(m_assembler.jne()); 1196 end.link(this); 1197 m_assembler.extraInstrForBranch(scr); 1198 releaseScratch(scr); 1199 return m_jump; 1137 1200 } 1138 1201 … … 1141 1204 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 6, sizeof(uint32_t)); 1142 1205 Jump m_jump = Jump(m_assembler.je()); 1143 m_assembler.loadConstantUnReusable(0x0, scratchReg3); 1144 m_assembler.nop(); 1145 m_assembler.nop(); 1206 m_assembler.extraInstrForBranch(scratchReg3); 1146 1207 return m_jump; 1147 1208 } … … 1151 1212 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 6, sizeof(uint32_t)); 1152 1213 Jump m_jump = Jump(m_assembler.jne()); 1153 m_assembler.loadConstantUnReusable(0x0, scratchReg3); 1154 m_assembler.nop(); 1155 m_assembler.nop(); 1214 m_assembler.extraInstrForBranch(scratchReg3); 1156 1215 return m_jump; 1157 1216 }
Note:
See TracChangeset
for help on using the changeset viewer.