microcode = '''
# movntps is basically the same as movaps, excepting the caching hint and
# ordering constraints
+# We are ignoring the non-temporal hint.
def macroop MOVNTPS_M_XMM {
- # Check low address.
- stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
- stfp xmml, seg, sib, disp, dataSize=8, uncacheable=True
+ warn_once "MOVNTPS: Ignoring non-temporal hint, modeling as cacheable!"
+ cda seg, sib, "DISPLACEMENT + 8", dataSize=8
+ stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
+ stfp xmml, seg, sib, disp, dataSize=8
};
def macroop MOVNTPS_P_XMM {
+ warn_once "MOVNTPS_P: Ignoring non-temporal hint, modeling as cacheable!"
rdip t7
- # Check low address.
- stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
- stfp xmml, seg, riprel, disp, dataSize=8, uncacheable=True
+ cda seg, riprel, "DISPLACEMENT + 8", dataSize=8
+ stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
+ stfp xmml, seg, riprel, disp, dataSize=8
};
# movntpd is basically the same as movapd, excepting the caching hint and
# ordering constraints
+# We are ignoring the non-temporal hint.
def macroop MOVNTPD_M_XMM {
- stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8, uncacheable=True
- stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
+ warn_once "MOVNTPD: 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 MOVNTPD_P_XMM {
+ warn_once "MOVNTPD_P: Ignoring non-temporal hint, modeling as cacheable!"
rdip t7
- stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8, uncacheable=True
- stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
+ cda seg, riprel, "DISPLACEMENT + 8", dataSize=8
+ stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
+ stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
};
'''