Mercurial > repos > blastem
comparison m68k.cpu @ 2586:6c58cadeabe1
Implement subx in new CPU core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 08 Feb 2025 16:41:20 -0800 |
parents | c730067d5f77 |
children | e04c7e753bf6 |
comparison
equal
deleted
inserted
replaced
2585:c730067d5f77 | 2586:6c58cadeabe1 |
---|---|
1126 sub src dst dst Z | 1126 sub src dst dst Z |
1127 update_flags XNZVC | 1127 update_flags XNZVC |
1128 end | 1128 end |
1129 m68k_save_dst Z | 1129 m68k_save_dst Z |
1130 m68k_prefetch | 1130 m68k_prefetch |
1131 | 1131 |
1132 1001DDD1ZZ000SSS subx_dy_dx | |
1133 invalid Z 3 | |
1134 sbc dregs.S dregs.D dregs.D Z | |
1135 update_flags XNVC | |
1136 switch Z | |
1137 case 0 | |
1138 local tmp8 8 | |
1139 mov dregs.D tmp8 | |
1140 if tmp8 | |
1141 update_flags Z0 | |
1142 end | |
1143 case 1 | |
1144 local tmp16 16 | |
1145 mov dregs.D tmp16 | |
1146 if tmp16 | |
1147 update_flags Z0 | |
1148 end | |
1149 case 2 | |
1150 cycles 4 | |
1151 if dregs.D | |
1152 update_flags Z0 | |
1153 end | |
1154 end | |
1155 m68k_prefetch | |
1156 | |
1157 1001DDD1ZZ001SSS subx_ay_ax | |
1158 invalid Z 3 | |
1159 if Z | |
1160 decsize Z aregs.S aregs.S | |
1161 else | |
1162 switch S | |
1163 case 7 | |
1164 sub 2 aregs.S aregs.S | |
1165 default | |
1166 decsize Z aregs.S aregs.S | |
1167 end | |
1168 end | |
1169 #predec penalty on src only | |
1170 cycles 2 | |
1171 mov aregs.S scratch1 | |
1172 switch Z | |
1173 case 0 | |
1174 ocall read_8 | |
1175 case 1 | |
1176 ocall read_16 | |
1177 case 2 | |
1178 m68k_read32 | |
1179 end | |
1180 mov scratch1 scratch2 | |
1181 if Z | |
1182 decsize Z aregs.D aregs.D | |
1183 else | |
1184 switch D | |
1185 case 7 | |
1186 sub 2 aregs.D aregs.D | |
1187 default | |
1188 decsize Z aregs.D aregs.D | |
1189 end | |
1190 end | |
1191 mov aregs.D scratch1 | |
1192 switch Z | |
1193 case 0 | |
1194 ocall read_8 | |
1195 case 1 | |
1196 ocall read_16 | |
1197 case 2 | |
1198 m68k_read32 | |
1199 end | |
1200 sbc scratch2 scratch1 scratch1 Z | |
1201 update_flags XNVC | |
1202 switch Z | |
1203 case 0 | |
1204 local tmp8 8 | |
1205 mov dregs.D tmp8 | |
1206 if tmp8 | |
1207 update_flags Z0 | |
1208 end | |
1209 case 1 | |
1210 local tmp16 16 | |
1211 mov dregs.D tmp16 | |
1212 if tmp16 | |
1213 update_flags Z0 | |
1214 end | |
1215 case 2 | |
1216 if dregs.D | |
1217 update_flags Z0 | |
1218 end | |
1219 end | |
1220 mov aregs.D scratch2 | |
1221 m68k_write_size Z 0 | |
1222 m68k_prefetch | |
1223 | |
1132 1110CCC0ZZ001RRR lsri | 1224 1110CCC0ZZ001RRR lsri |
1133 invalid Z 3 | 1225 invalid Z 3 |
1134 switch C | 1226 switch C |
1135 case 0 | 1227 case 0 |
1136 meta shift 8 | 1228 meta shift 8 |