arch-x86: implement movntq/movntdq instructions
Non-temporal quadword/double-quadword move instructions. This change ignores the non-temporal hint and instructions are implemented to send cacheable request to memory. This would have some "performance" impact (i.e. having some cache pollution) to get better "correctness" in behavior. Change-Id: I2052ac0970f61a54bafb7332762debcb7103202d Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20288 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
committed by
Pouya Fotouhi
parent
3edfacea9c
commit
8d439c29ed
@@ -978,7 +978,9 @@
|
||||
0x3: PAVGW(Pq,Qq);
|
||||
0x4: PMULHUW(Pq,Qq);
|
||||
0x5: PMULHW(Pq,Qq);
|
||||
0x7: WarnUnimpl::movntq_Mq_Pq();
|
||||
//Non-temporal hint is ignored since we don't have
|
||||
//proper support for it in the memory system.
|
||||
0x7: MOVNTQ(Mq,Pq);
|
||||
default: UD2();
|
||||
}
|
||||
// repe (0xF3)
|
||||
@@ -995,7 +997,11 @@
|
||||
0x4: PMULHUW(Vo,Wo);
|
||||
0x5: PMULHW(Vo,Wo);
|
||||
0x6: CVTTPD2DQ(Vo,Wo);
|
||||
0x7: WarnUnimpl::movntdq_Mo_Vo();
|
||||
//MOVNTDQ should really use size o (octword), but
|
||||
//because it is split in two, we use q (quadword).
|
||||
//Non-temporal hint is ignored since we don't have
|
||||
//proper support for it in the memory system.
|
||||
0x7: MOVNTDQ(Mq,Vq);
|
||||
}
|
||||
// repne (0xF2)
|
||||
0x8: decode OPCODE_OP_BOTTOM3 {
|
||||
|
||||
@@ -34,9 +34,23 @@
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# Authors: Gabe Black
|
||||
# Pouya Fotouhi
|
||||
|
||||
microcode = '''
|
||||
# MOVNTDQ
|
||||
def macroop MOVNTDQ_M_XMM {
|
||||
warn "MOVNTDQ: Ignoring non-temporal hint, modeling as cacheable!"
|
||||
cda seg, sib, "DISPLACEMENT + 8", dataSize=8
|
||||
stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
|
||||
stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
|
||||
};
|
||||
|
||||
def macroop MOVNTDQ_P_XMM {
|
||||
warn "MOVNTDQ_P: Ignoring non-temporal hint, modeling as cacheable!"
|
||||
rdip t7
|
||||
cda seg, riprel, "DISPLACEMENT + 8", dataSize=8
|
||||
stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
|
||||
stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
|
||||
};
|
||||
|
||||
def macroop MASKMOVDQU_XMM_XMM {
|
||||
ldfp ufp1, ds, [1, t0, rdi], dataSize=8
|
||||
|
||||
@@ -34,9 +34,19 @@
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# Authors: Gabe Black
|
||||
# Pouya Fotouhi
|
||||
|
||||
microcode = '''
|
||||
# MOVNTQ
|
||||
def macroop MOVNTQ_M_MMX {
|
||||
warn "MOVNTQ: Ignoring non-temporal hint, modeling as cacheable!"
|
||||
stfp mmx, seg, sib, "DISPLACEMENT", dataSize=8
|
||||
};
|
||||
|
||||
def macroop MOVNTQ_P_MMX {
|
||||
warn "MOVNTQ_P: Ignoring non-temporal hint, modeling as cacheable!"
|
||||
rdip t7
|
||||
stfp mmx, seg, riprel, "DISPLACEMENT", dataSize=8
|
||||
};
|
||||
|
||||
def macroop MASKMOVQ_MMX_MMX {
|
||||
ldfp ufp1, ds, [1, t0, rdi], dataSize=8
|
||||
|
||||
Reference in New Issue
Block a user