Changeset 103257 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Feb 7, 2024 3:17:33 PM (12 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp
r103233 r103257 236 236 /* Effective address stuff is rather complicated... */ 237 237 #define IEM_MC_CALC_RM_EFF_ADDR_THREADED_16(a_GCPtrEff, a_bRm, a_u16Disp) do { \ 238 } while (0) 238 if (((a_bRm) & (X86_MODRM_MOD_MASK | X86_MODRM_RM_MASK)) != 6) \ 239 { \ 240 switch ((a_bRm) & X86_MODRM_RM_MASK) \ 241 { \ 242 case 0: IEM_LIVENESS_GPR_INPUT(X86_GREG_xBX); IEM_LIVENESS_GPR_INPUT(X86_GREG_xSI); break; \ 243 case 1: IEM_LIVENESS_GPR_INPUT(X86_GREG_xBX); IEM_LIVENESS_GPR_INPUT(X86_GREG_xDI); break; \ 244 case 2: IEM_LIVENESS_GPR_INPUT(X86_GREG_xBP); IEM_LIVENESS_GPR_INPUT(X86_GREG_xSI); break; \ 245 case 3: IEM_LIVENESS_GPR_INPUT(X86_GREG_xBP); IEM_LIVENESS_GPR_INPUT(X86_GREG_xDI); break; \ 246 case 4: IEM_LIVENESS_GPR_INPUT(X86_GREG_xSI); break; \ 247 case 5: IEM_LIVENESS_GPR_INPUT(X86_GREG_xDI); break; \ 248 case 6: IEM_LIVENESS_GPR_INPUT(X86_GREG_xBP); break; \ 249 case 7: IEM_LIVENESS_GPR_INPUT(X86_GREG_xBX); break; \ 250 } \ 251 } \ 252 } while (0) 253 239 254 #define IEM_MC_CALC_RM_EFF_ADDR_THREADED_32(a_GCPtrEff, a_bRm, a_uSibAndRspOffset, a_u32Disp) do { \ 240 } while (0) 255 if (((a_bRm) & (X86_MODRM_MOD_MASK | X86_MODRM_RM_MASK)) != 5) \ 256 { \ 257 uint8_t const idxReg = (a_bRm) & X86_MODRM_RM_MASK; \ 258 if (idxReg != 4 /*SIB*/) \ 259 IEM_LIVENESS_GPR_INPUT(idxReg); \ 260 else \ 261 { \ 262 uint8_t const idxIndex = ((a_uSibAndRspOffset) >> X86_SIB_INDEX_SHIFT) & X86_SIB_INDEX_SMASK; \ 263 if (idxIndex != 4 /*no index*/) \ 264 IEM_LIVENESS_GPR_INPUT(idxIndex); \ 265 \ 266 uint8_t const idxBase = (a_uSibAndRspOffset) & X86_SIB_BASE_MASK; \ 267 if (idxBase != 5 || ((a_bRm) & X86_MODRM_MOD_MASK) != 0) \ 268 IEM_LIVENESS_GPR_INPUT(idxBase); \ 269 } \ 270 } \ 271 } while (0) 272 241 273 #define IEM_MC_CALC_RM_EFF_ADDR_THREADED_64(a_GCPtrEff, a_bRmEx, a_uSibAndRspOffset, a_u32Disp, a_cbImm) do { \ 274 if (((a_bRmEx) & (X86_MODRM_MOD_MASK | X86_MODRM_RM_MASK)) == 5) \ 275 { /* RIP */ } \ 276 else \ 277 { \ 278 uint8_t const idxReg = (a_bRmEx) & (X86_MODRM_RM_MASK | 0x8); /* bRmEx[bit 3] = REX.B */ \ 279 if ((idxReg & X86_MODRM_RM_MASK) != 4 /* not SIB */) \ 280 IEM_LIVENESS_GPR_INPUT(idxReg); \ 281 else /* SIB: */\ 282 { \ 283 uint8_t const idxIndex = (((a_uSibAndRspOffset) >> X86_SIB_INDEX_SHIFT) & X86_SIB_INDEX_SMASK) \ 284 | (((a_bRmEx) & 0x10) >> 1); /* bRmEx[bit 4] = REX.X */ \ 285 if (idxIndex != 4 /*no index*/) \ 286 IEM_LIVENESS_GPR_INPUT(idxIndex); \ 287 \ 288 uint8_t const idxBase = ((a_uSibAndRspOffset) & X86_SIB_BASE_MASK) | ((a_bRmEx) & 0x8); /* bRmEx[bit 3] = REX.B */ \ 289 if ((idxBase & 7) != 5 /* and !13*/ || ((a_bRmEx) & X86_MODRM_MOD_MASK) != 0) \ 290 IEM_LIVENESS_GPR_INPUT(idxBase); \ 291 } \ 292 } \ 242 293 } while (0) 243 294 #define IEM_MC_CALC_RM_EFF_ADDR_THREADED_64_FSGS(a_GCPtrEff, a_bRmEx, a_uSibAndRspOffset, a_u32Disp, a_cbImm) \
Note:
See TracChangeset
for help on using the changeset viewer.