- Timestamp:
- Aug 9, 2023 2:31:48 PM (19 months ago)
- svn:sync-xref-src-repo-rev:
- 158732
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r100831 r100832 2700 2700 { 2701 2701 /* Memory */ 2702 IEM_MC_BEGIN(3, 2);2702 IEM_MC_BEGIN(3, 3); 2703 2703 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 2704 2704 IEM_MC_ARG(uint16_t, u16Src, 1); 2705 2705 IEM_MC_ARG_LOCAL_EFLAGS(pEFlags, EFlags, 2); 2706 2706 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 2707 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 2707 2708 2708 2709 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 2709 2710 IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS); 2710 IEM_MC_MEM_MAP (pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);2711 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 2711 2712 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG_8(bRm)); 2712 2713 IEM_MC_FETCH_EFLAGS(EFlags); 2713 2714 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_arpl, pu16Dst, u16Src, pEFlags); 2714 2715 2715 IEM_MC_MEM_COMMIT_AND_UNMAP (pu16Dst, IEM_ACCESS_DATA_RW);2716 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); 2716 2717 IEM_MC_COMMIT_EFLAGS(EFlags); 2717 2718 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4097 4098 * Body for a group 1 binary operator. 4098 4099 */ 4099 #define IEMOP_BODY_BINARY_Ev_Iz (a_fnNormalU16, a_fnNormalU32, a_fnNormalU64, a_fRW) \4100 #define IEMOP_BODY_BINARY_Ev_Iz_RW(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64) \ 4100 4101 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 4101 4102 { \ … … 4133 4134 IEM_MC_REF_EFLAGS(pEFlags); \ 4134 4135 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 4135 if (a_fRW == IEM_ACCESS_DATA_RW) \ 4136 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \ 4136 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \ 4137 4137 \ 4138 4138 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4171 4171 case IEMMODE_16BIT: \ 4172 4172 { \ 4173 IEM_MC_BEGIN(3, 2); \4173 IEM_MC_BEGIN(3, 3); \ 4174 4174 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 4175 4175 IEM_MC_ARG(uint16_t, u16Src, 1); \ 4176 4176 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4177 4177 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4178 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4178 4179 \ 4179 4180 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); \ … … 4181 4182 IEM_MC_ASSIGN(u16Src, u16Imm); \ 4182 4183 IEMOP_HLP_DONE_DECODING(); \ 4183 IEM_MC_MEM_MAP (pu16Dst, a_fRW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \4184 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4184 4185 IEM_MC_FETCH_EFLAGS(EFlags); \ 4185 4186 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \ 4186 4187 \ 4187 IEM_MC_MEM_COMMIT_AND_UNMAP (pu16Dst, a_fRW); \4188 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \ 4188 4189 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4189 4190 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4194 4195 case IEMMODE_32BIT: \ 4195 4196 { \ 4196 IEM_MC_BEGIN(3, 2); \4197 IEM_MC_BEGIN(3, 3); \ 4197 4198 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 4198 4199 IEM_MC_ARG(uint32_t, u32Src, 1); \ 4199 4200 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4200 4201 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4202 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4201 4203 \ 4202 4204 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \ … … 4204 4206 IEM_MC_ASSIGN(u32Src, u32Imm); \ 4205 4207 IEMOP_HLP_DONE_DECODING(); \ 4206 IEM_MC_MEM_MAP (pu32Dst, a_fRW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \4208 IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4207 4209 IEM_MC_FETCH_EFLAGS(EFlags); \ 4208 4210 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 4209 4211 \ 4210 IEM_MC_MEM_COMMIT_AND_UNMAP (pu32Dst, a_fRW); \4212 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \ 4211 4213 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4212 4214 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4217 4219 case IEMMODE_64BIT: \ 4218 4220 { \ 4219 IEM_MC_BEGIN(3, 2); \4221 IEM_MC_BEGIN(3, 3); \ 4220 4222 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 4221 4223 IEM_MC_ARG(uint64_t, u64Src, 1); \ 4222 4224 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4223 4225 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4226 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4224 4227 \ 4225 4228 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \ … … 4227 4230 IEMOP_HLP_DONE_DECODING(); \ 4228 4231 IEM_MC_ASSIGN(u64Src, u64Imm); \ 4229 IEM_MC_MEM_MAP (pu64Dst, a_fRW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \4232 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4230 4233 IEM_MC_FETCH_EFLAGS(EFlags); \ 4231 4234 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \ 4232 4235 \ 4233 IEM_MC_MEM_COMMIT_AND_UNMAP (pu64Dst, a_fRW); \4236 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \ 4234 4237 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4235 4238 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4244 4247 { \ 4245 4248 (void)0 4246 4247 #define IEMOP_BODY_BINARY_Ev_Iz_NO_LOCK() \ 4248 IEMOP_HLP_DONE_DECODING(); \ 4249 IEMOP_RAISE_INVALID_LOCK_PREFIX_RET(); \ 4250 } \ 4251 } \ 4252 (void)0 4253 4249 /* This must be a separate macro due to parsing restrictions in IEMAllInstPython.py. */ 4254 4250 #define IEMOP_BODY_BINARY_Ev_Iz_LOCKED(a_fnLockedU16, a_fnLockedU32, a_fnLockedU64) \ 4255 4251 switch (pVCpu->iem.s.enmEffOpSize) \ … … 4257 4253 case IEMMODE_16BIT: \ 4258 4254 { \ 4259 IEM_MC_BEGIN(3, 2); \4255 IEM_MC_BEGIN(3, 3); \ 4260 4256 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 4261 4257 IEM_MC_ARG(uint16_t, u16Src, 1); \ 4262 4258 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4263 4259 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4260 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4264 4261 \ 4265 4262 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); \ … … 4267 4264 IEM_MC_ASSIGN(u16Src, u16Imm); \ 4268 4265 IEMOP_HLP_DONE_DECODING(); \ 4269 IEM_MC_MEM_MAP (pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \4266 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4270 4267 IEM_MC_FETCH_EFLAGS(EFlags); \ 4271 4268 IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU16, pu16Dst, u16Src, pEFlags); \ 4272 4269 \ 4273 IEM_MC_MEM_COMMIT_AND_UNMAP (pu16Dst, IEM_ACCESS_DATA_RW); \4270 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \ 4274 4271 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4275 4272 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4280 4277 case IEMMODE_32BIT: \ 4281 4278 { \ 4282 IEM_MC_BEGIN(3, 2); \4279 IEM_MC_BEGIN(3, 3); \ 4283 4280 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 4284 4281 IEM_MC_ARG(uint32_t, u32Src, 1); \ 4285 4282 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4286 4283 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4284 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4287 4285 \ 4288 4286 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \ … … 4290 4288 IEM_MC_ASSIGN(u32Src, u32Imm); \ 4291 4289 IEMOP_HLP_DONE_DECODING(); \ 4292 IEM_MC_MEM_MAP (pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \4290 IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4293 4291 IEM_MC_FETCH_EFLAGS(EFlags); \ 4294 4292 IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU32, pu32Dst, u32Src, pEFlags); \ 4295 4293 \ 4296 IEM_MC_MEM_COMMIT_AND_UNMAP (pu32Dst, IEM_ACCESS_DATA_RW); \4294 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \ 4297 4295 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4298 4296 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4303 4301 case IEMMODE_64BIT: \ 4304 4302 { \ 4305 IEM_MC_BEGIN(3, 2); \4303 IEM_MC_BEGIN(3, 3); \ 4306 4304 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 4307 4305 IEM_MC_ARG(uint64_t, u64Src, 1); \ 4308 4306 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4309 4307 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4308 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4310 4309 \ 4311 4310 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \ … … 4313 4312 IEMOP_HLP_DONE_DECODING(); \ 4314 4313 IEM_MC_ASSIGN(u64Src, u64Imm); \ 4315 IEM_MC_MEM_MAP (pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \4314 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4316 4315 IEM_MC_FETCH_EFLAGS(EFlags); \ 4317 4316 IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU64, pu64Dst, u64Src, pEFlags); \ 4318 4317 \ 4319 IEM_MC_MEM_COMMIT_AND_UNMAP (pu64Dst, IEM_ACCESS_DATA_RW); \4318 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \ 4320 4319 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4321 4320 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4330 4329 (void)0 4331 4330 4331 /* read-only version */ 4332 #define IEMOP_BODY_BINARY_Ev_Iz_RO(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64) \ 4333 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 4334 { \ 4335 /* register target */ \ 4336 switch (pVCpu->iem.s.enmEffOpSize) \ 4337 { \ 4338 case IEMMODE_16BIT: \ 4339 { \ 4340 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \ 4341 IEM_MC_BEGIN(3, 0); \ 4342 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 4343 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 4344 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ u16Imm, 1); \ 4345 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 4346 \ 4347 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4348 IEM_MC_REF_EFLAGS(pEFlags); \ 4349 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \ 4350 \ 4351 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4352 IEM_MC_END(); \ 4353 break; \ 4354 } \ 4355 \ 4356 case IEMMODE_32BIT: \ 4357 { \ 4358 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \ 4359 IEM_MC_BEGIN(3, 0); \ 4360 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 4361 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 4362 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ u32Imm, 1); \ 4363 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 4364 \ 4365 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4366 IEM_MC_REF_EFLAGS(pEFlags); \ 4367 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 4368 \ 4369 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4370 IEM_MC_END(); \ 4371 break; \ 4372 } \ 4373 \ 4374 case IEMMODE_64BIT: \ 4375 { \ 4376 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \ 4377 IEM_MC_BEGIN(3, 0); \ 4378 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 4379 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 4380 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ u64Imm, 1); \ 4381 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 4382 \ 4383 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4384 IEM_MC_REF_EFLAGS(pEFlags); \ 4385 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \ 4386 \ 4387 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4388 IEM_MC_END(); \ 4389 break; \ 4390 } \ 4391 \ 4392 IEM_NOT_REACHED_DEFAULT_CASE_RET(); \ 4393 } \ 4394 } \ 4395 else \ 4396 { \ 4397 /* memory target */ \ 4398 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) \ 4399 { \ 4400 switch (pVCpu->iem.s.enmEffOpSize) \ 4401 { \ 4402 case IEMMODE_16BIT: \ 4403 { \ 4404 IEM_MC_BEGIN(3, 3); \ 4405 IEM_MC_ARG(uint16_t const *, pu16Dst, 0); \ 4406 IEM_MC_ARG(uint16_t, u16Src, 1); \ 4407 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4408 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4409 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4410 \ 4411 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); \ 4412 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \ 4413 IEM_MC_ASSIGN(u16Src, u16Imm); \ 4414 IEMOP_HLP_DONE_DECODING(); \ 4415 IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4416 IEM_MC_FETCH_EFLAGS(EFlags); \ 4417 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \ 4418 \ 4419 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu16Dst, bUnmapInfo); \ 4420 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4421 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4422 IEM_MC_END(); \ 4423 break; \ 4424 } \ 4425 \ 4426 case IEMMODE_32BIT: \ 4427 { \ 4428 IEM_MC_BEGIN(3, 3); \ 4429 IEM_MC_ARG(uint32_t const *, pu32Dst, 0); \ 4430 IEM_MC_ARG(uint32_t, u32Src, 1); \ 4431 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4432 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4433 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4434 \ 4435 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \ 4436 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \ 4437 IEM_MC_ASSIGN(u32Src, u32Imm); \ 4438 IEMOP_HLP_DONE_DECODING(); \ 4439 IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4440 IEM_MC_FETCH_EFLAGS(EFlags); \ 4441 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 4442 \ 4443 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu32Dst, bUnmapInfo); \ 4444 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4445 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4446 IEM_MC_END(); \ 4447 break; \ 4448 } \ 4449 \ 4450 case IEMMODE_64BIT: \ 4451 { \ 4452 IEM_MC_BEGIN(3, 3); \ 4453 IEM_MC_ARG(uint64_t const *, pu64Dst, 0); \ 4454 IEM_MC_ARG(uint64_t, u64Src, 1); \ 4455 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4456 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4457 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4458 \ 4459 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \ 4460 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \ 4461 IEMOP_HLP_DONE_DECODING(); \ 4462 IEM_MC_ASSIGN(u64Src, u64Imm); \ 4463 IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4464 IEM_MC_FETCH_EFLAGS(EFlags); \ 4465 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \ 4466 \ 4467 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu64Dst, bUnmapInfo); \ 4468 IEM_MC_COMMIT_EFLAGS(EFlags); \ 4469 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4470 IEM_MC_END(); \ 4471 break; \ 4472 } \ 4473 \ 4474 IEM_NOT_REACHED_DEFAULT_CASE_RET(); \ 4475 } \ 4476 } \ 4477 else \ 4478 { \ 4479 IEMOP_HLP_DONE_DECODING(); \ 4480 IEMOP_RAISE_INVALID_LOCK_PREFIX_RET(); \ 4481 } \ 4482 } \ 4483 (void)0 4484 4332 4485 4333 4486 /** … … 4338 4491 { 4339 4492 IEMOP_MNEMONIC(add_Ev_Iz, "add Ev,Iz"); 4340 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_add_u16, iemAImpl_add_u32, iemAImpl_add_u64, IEM_ACCESS_DATA_RW);4493 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_add_u16, iemAImpl_add_u32, iemAImpl_add_u64); 4341 4494 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_add_u16_locked, iemAImpl_add_u32_locked, iemAImpl_add_u64_locked); 4342 4495 } … … 4350 4503 { 4351 4504 IEMOP_MNEMONIC(or_Ev_Iz, "or Ev,Iz"); 4352 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_or_u16, iemAImpl_or_u32, iemAImpl_or_u64, IEM_ACCESS_DATA_RW);4505 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_or_u16, iemAImpl_or_u32, iemAImpl_or_u64); 4353 4506 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_or_u16_locked, iemAImpl_or_u32_locked, iemAImpl_or_u64_locked); 4354 4507 } … … 4362 4515 { 4363 4516 IEMOP_MNEMONIC(adc_Ev_Iz, "adc Ev,Iz"); 4364 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_adc_u16, iemAImpl_adc_u32, iemAImpl_adc_u64, IEM_ACCESS_DATA_RW);4517 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_adc_u16, iemAImpl_adc_u32, iemAImpl_adc_u64); 4365 4518 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_adc_u16_locked, iemAImpl_adc_u32_locked, iemAImpl_adc_u64_locked); 4366 4519 } … … 4374 4527 { 4375 4528 IEMOP_MNEMONIC(sbb_Ev_Iz, "sbb Ev,Iz"); 4376 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_sbb_u16, iemAImpl_sbb_u32, iemAImpl_sbb_u64, IEM_ACCESS_DATA_RW);4529 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_sbb_u16, iemAImpl_sbb_u32, iemAImpl_sbb_u64); 4377 4530 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_sbb_u16_locked, iemAImpl_sbb_u32_locked, iemAImpl_sbb_u64_locked); 4378 4531 } … … 4386 4539 { 4387 4540 IEMOP_MNEMONIC(and_Ev_Iz, "and Ev,Iz"); 4388 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_and_u16, iemAImpl_and_u32, iemAImpl_and_u64, IEM_ACCESS_DATA_RW);4541 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_and_u16, iemAImpl_and_u32, iemAImpl_and_u64); 4389 4542 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_and_u16_locked, iemAImpl_and_u32_locked, iemAImpl_and_u64_locked); 4390 4543 } … … 4398 4551 { 4399 4552 IEMOP_MNEMONIC(sub_Ev_Iz, "sub Ev,Iz"); 4400 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_sub_u16, iemAImpl_sub_u32, iemAImpl_sub_u64, IEM_ACCESS_DATA_RW);4553 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_sub_u16, iemAImpl_sub_u32, iemAImpl_sub_u64); 4401 4554 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_sub_u16_locked, iemAImpl_sub_u32_locked, iemAImpl_sub_u64_locked); 4402 4555 } … … 4410 4563 { 4411 4564 IEMOP_MNEMONIC(xor_Ev_Iz, "xor Ev,Iz"); 4412 IEMOP_BODY_BINARY_Ev_Iz ( iemAImpl_xor_u16, iemAImpl_xor_u32, iemAImpl_xor_u64, IEM_ACCESS_DATA_RW);4565 IEMOP_BODY_BINARY_Ev_Iz_RW( iemAImpl_xor_u16, iemAImpl_xor_u32, iemAImpl_xor_u64); 4413 4566 IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_xor_u16_locked, iemAImpl_xor_u32_locked, iemAImpl_xor_u64_locked); 4414 4567 } … … 4422 4575 { 4423 4576 IEMOP_MNEMONIC(cmp_Ev_Iz, "cmp Ev,Iz"); 4424 IEMOP_BODY_BINARY_Ev_Iz( iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64, IEM_ACCESS_DATA_R); 4425 IEMOP_BODY_BINARY_Ev_Iz_NO_LOCK(); 4577 IEMOP_BODY_BINARY_Ev_Iz_RO(iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64); 4426 4578 } 4427 4579
Note:
See TracChangeset
for help on using the changeset viewer.