X86: Make the qaud width bswap instruction handle the fact that 32 bit operations...
authorGabe Black <gblack@eecs.umich.edu>
Fri, 7 Aug 2009 17:12:58 +0000 (10:12 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 7 Aug 2009 17:12:58 +0000 (10:12 -0700)
src/arch/x86/isa/insts/general_purpose/data_conversion/endian_conversion.py

index ac23434627d87bde101ab6ff09617129b5578b00..f6aac1761e058036668ba54d689dfff5ddeff939 100644 (file)
@@ -64,15 +64,15 @@ def macroop BSWAP_D_R
 def macroop BSWAP_Q_R
 {
     roli reg, reg, 8, dataSize=2
-    roli reg, reg, 16, dataSize=4
-    roli reg, reg, 8, dataSize=2
-    roli reg, reg, 32, dataSize=8
-    roli reg, reg, 8, dataSize=2
-    roli reg, reg, 16, dataSize=4
-    roli reg, reg, 8, dataSize=2
+    roli t1, reg, 16, dataSize=4
+    # Top 4 bytes of t1 are now zero
+    roli t1, t1, 8, dataSize=2
+    roli t1, t1, 32, dataSize=8
+    srli t2, reg, 32, dataSize=8
+    roli t2, t2, 8, dataSize=2
+    roli t2, t2, 16, dataSize=4
+    # Top 4 bytes of t2 are now zero
+    roli t2, t2, 8, dataSize=2
+    or reg, t1, t2, dataSize=8
 };
 '''
-#let {{
-#    class BSWAP(Inst):
-#       "GenFault ${new UnimpInstFault}"
-#}};