arch-x86: implement movntps/movntpd SSE insts
authorSteve Reinhardt <steve.reinhardt@amd.com>
Thu, 20 Apr 2017 15:33:00 +0000 (11:33 -0400)
committerAnthony Gutierrez <anthony.gutierrez@amd.com>
Wed, 2 May 2018 23:28:23 +0000 (23:28 +0000)
These are non-temporal packed SSE stores.

Change-Id: I526cd6551b38d6d35010bc6173f23d017106b466
Reviewed-on: https://gem5-review.googlesource.com/9861
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/arch/x86/isa/decoder/two_byte_opcodes.isa
src/arch/x86/isa/insts/simd128/floating_point/data_transfer/move_non_temporal.py

index 761e8381ec547618868a284b17c85875e59cd97a..339e5a0ab487992e039c0e7455cc581dca276422 100644 (file)
                     0x0: MOVAPS(Vq,Wq);
                     0x1: MOVAPS(Wq,Vq);
                     0x2: CVTPI2PS(Vq,Qq);
-                    0x3: WarnUnimpl::movntps_Mo_Vo();
+                    0x3: MOVNTPS(Mq,Vq);
                     0x4: CVTTPS2PI(Pq,Wq);
                     0x5: CVTPS2PI(Pq,Wq);
                     0x6: UCOMISS(Vd,Wd);
                     0x0: MOVAPD(Vo,Wo);
                     0x1: MOVAPD(Wo,Vo);
                     0x2: CVTPI2PD(Vo,Qq);
-                    0x3: WarnUnimpl::movntpd_Mo_Vo();
+                    0x3: MOVNTPD(Mq,Vq);
                     0x4: CVTTPD2PI(Pq,Wo);
                     0x5: CVTPD2PI(Pq,Wo);
                     0x6: UCOMISD(Vq,Wq);
index 063be91bddc2b4cadb69e6d7201a10f6fbd0d836..a6e392ffd193de3563592a929e33b70bacecb718 100644 (file)
@@ -1,4 +1,5 @@
 # Copyright (c) 2007 The Hewlett-Packard Development Company
+# Copyright (c) 2015, 2018 Advanced Micro Devices, Inc.
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Gabe Black
+#          Steve Reinhardt
 
 microcode = '''
-# MOVNTPS
-# MOVNTPD
+# movntps is basically the same as movaps, excepting the caching hint and
+# ordering constraints
+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
+};
+
+def macroop MOVNTPS_P_XMM {
+    rdip t7
+    # Check low address.
+    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
+    stfp xmml, seg, riprel, disp, dataSize=8, uncacheable=True
+};
+
+# movntpd is basically the same as movapd, excepting the caching hint and
+# ordering constraints
+def macroop MOVNTPD_M_XMM {
+    stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8, uncacheable=True
+    stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
+};
+
+def macroop MOVNTPD_P_XMM {
+    rdip t7
+    stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8, uncacheable=True
+    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8, uncacheable=True
+};
 '''