summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/isa/decoder/two_byte_opcodes.isa4
-rw-r--r--src/arch/x86/isa/insts/simd128/floating_point/data_transfer/move_non_temporal.py31
2 files changed, 31 insertions, 4 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
index 761e8381e..339e5a0ab 100644
--- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
@@ -383,7 +383,7 @@
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);
@@ -401,7 +401,7 @@
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);
diff --git a/src/arch/x86/isa/insts/simd128/floating_point/data_transfer/move_non_temporal.py b/src/arch/x86/isa/insts/simd128/floating_point/data_transfer/move_non_temporal.py
index 063be91bd..a6e392ffd 100644
--- a/src/arch/x86/isa/insts/simd128/floating_point/data_transfer/move_non_temporal.py
+++ b/src/arch/x86/isa/insts/simd128/floating_point/data_transfer/move_non_temporal.py
@@ -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
@@ -34,8 +35,34 @@
# 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
+};
'''