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

Method read

source/emulation/cpu/jit/jitCodeGen.cpp:1084–1169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1082}
1083
1084RegPtr JitCodeGen::read(JitWidth width, RegPtr addressReg, std::function<void(MemPtr address)> customMemoryOp, std::function<void()> failedMemoryOp, RegPtr tmp, bool checkAlignment) {
1085 if (!tmp) {
1086 tmp = getTmpReg8();
1087 }
1088
1089#ifdef BOXEDWINE_MEM_CACHE
1090 if (currentOp->exceptionCount < MAX_OP_EXCEPTION_COUNT) {
1091#ifdef _DEBUG
1092 writeCurrentEip(0);
1093#endif
1094 shrValueWithDest(JitWidth::b32, tmp, addressReg, K_PAGE_SHIFT);
1095
1096 readMMU(tmp, tmp, K_NUMBER_OF_PAGES * sizeof(void*));
1097
1098 if (!KSystem::canJitUse4KPage && width != JitWidth::b8) {
1099 RegPtr offsetReg = getTmpReg();
1100
1101 andValueWithDest(JitWidth::b32, offsetReg, addressReg, K_PAGE_MASK);
1102 addReg(DYN_PTR, tmp, addressReg);
1103 clearIfSpansPage(width, offsetReg, tmp);
1104 if (customMemoryOp) {
1105 customMemoryOp(createMemPtr(tmp));
1106 } else {
1107 readHost(width, createMemPtr(tmp), tmp);
1108 }
1109 } else {
1110 if (customMemoryOp) {
1111 customMemoryOp(createMemPtr(tmp, addressReg));
1112 } else {
1113 readHost(width, createMemPtr(tmp, addressReg), tmp);
1114 }
1115 }
1116 return tmp;
1117 }
1118#endif
1119 RegPtr offsetReg;
1120
1121 shrValueWithDest(JitWidth::b32, tmp, addressReg, K_PAGE_SHIFT);
1122 readMMU(tmp, tmp);
1123
1124 if (addressReg.use_count() == 1) {
1125 offsetReg = addressReg;
1126 andValue(JitWidth::b32, offsetReg, K_PAGE_MASK);
1127 } else {
1128 offsetReg = getTmpReg();
1129 andValueWithDest(JitWidth::b32, offsetReg, addressReg, K_PAGE_MASK);
1130 }
1131
1132 if (width != JitWidth::b8 && checkAlignment) {
1133#ifdef BOXEDWINE_HOST_EXCEPTIONS
1134 if (KSystem::canJitUse4KPage) {
1135#ifdef _DEBUG
1136 writeCurrentEip(0);
1137#endif
1138 if (currentOp->exceptionCount == MAX_OP_EXCEPTION_COUNT) {
1139 clearMMUPermissionIfSpansPage(width, offsetReg, tmp);
1140 }
1141 } else

Callers

nothing calls this directly

Calls 3

readFunction · 0.85
doesSpanPageFunction · 0.85
kpanic_fmtFunction · 0.85

Tested by

no test coverage detected