MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / getCondition

Function getCondition

source/emulation/cpu/srcgen.cpp:8219–8345  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8217
8218char tmpCondition[256];
8219const char* getCondition(struct GenData* data, int condition) {
8220 if (data->inlinedLazyFlagOp) {
8221 if (data->lazyFlags == sFLAGS_TEST8 || data->lazyFlags == sFLAGS_TEST16 || data->lazyFlags == sFLAGS_TEST32) {
8222 char left[256];
8223 char right[256];
8224 U32 same = 0;
8225 const char* signMask;
8226 const char* signCast;
8227 const char* src;
8228 const char* dst;
8229
8230 if (data->lazyFlags == sFLAGS_TEST8) {
8231 signMask = "0x80";
8232 signCast = "(S8)";
8233 src = "cpu->src.u8";
8234 dst = "cpu->dst.u8";
8235 } else if (data->lazyFlags == sFLAGS_TEST16) {
8236 signMask = "0x8000";
8237 signCast = "(S16)";
8238 src = "cpu->src.u16";
8239 dst = "cpu->dst.u16";
8240 } else if (data->lazyFlags == sFLAGS_TEST32) {
8241 signMask = "0x80000000";
8242 signCast = "(S32)";
8243 src = "cpu->src.u32";
8244 dst = "cpu->dst.u32";
8245 } else {
8246 kpanic("getCondition: oops");
8247 }
8248
8249 same = getTestLeftRight(data->inlinedLazyFlagOp, left, right);
8250
8251 if (data->inlinedLazyFlagOpAssignedToCPU) {
8252 strcpy(left, dst);
8253 strcpy(right, src);
8254 }
8255 data->inlinedLazyFlagOp = 0;
8256
8257 switch (condition) {
8258 case 0: // OF
8259 return "0";
8260 case 1: // !OF
8261 return "1";
8262 case 2: // CF
8263 return "0";
8264 case 3: // !CF
8265 return "1";
8266 case 4: // ZF
8267 case 6: // ZF or CF
8268 if (same) {
8269 strcpy(tmpCondition, "!"); strcat(tmpCondition, left); return tmpCondition;
8270 }
8271 strcpy(tmpCondition, "!("); strcat(tmpCondition, left); strcat(tmpCondition, " & "); strcat(tmpCondition, right); strcat(tmpCondition, ")"); return tmpCondition;
8272 case 5: // !ZF
8273 case 7: // !ZF and !CF
8274 if (same) {
8275 strcpy(tmpCondition, left); return tmpCondition;
8276 }

Callers 15

genJumpFunction · 0.85
gen140Function · 0.85
gen340Function · 0.85
gen141Function · 0.85
gen341Function · 0.85
gen142Function · 0.85
gen342Function · 0.85
gen143Function · 0.85
gen343Function · 0.85
gen144Function · 0.85
gen344Function · 0.85
gen145Function · 0.85

Calls 3

kpanicFunction · 0.85
getTestLeftRightFunction · 0.85
getFlagFunction · 0.85

Tested by

no test coverage detected