This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Count immediate byte for MMX/SSE instructions


MMX/SSE instructions with more than 2 operands have a 8bit immediate.
This patch counts them.


H.J.
----
2007-04-21  H.J. Lu  <hongjiu.lu@intel.com>

	* config/i386/i386-protos.h (ix86_attr_length_simd_immediate_default):
	New.

	* config/i386/i386.c (ix86_attr_length_simd_immediate_default):
	New.

	* config/i386/i386.md (length_immediate): Call
	ix86_attr_length_simd_immediate_default for MMX/SSE insns.

--- gcc/config/i386/i386-protos.h.sse	2007-03-30 06:33:33.000000000 -0700
+++ gcc/config/i386/i386-protos.h	2007-04-21 16:24:56.000000000 -0700
@@ -125,6 +125,7 @@ extern int ix86_check_movabs (rtx, int);
 
 extern rtx assign_386_stack_local (enum machine_mode, enum ix86_stack_slot);
 extern int ix86_attr_length_immediate_default (rtx, int);
+extern int ix86_attr_length_simd_immediate_default (rtx);
 extern int ix86_attr_length_address_default (rtx);
 
 extern enum machine_mode ix86_fp_compare_mode (enum rtx_code);
--- gcc/config/i386/i386.c.sse	2007-04-20 18:17:43.000000000 -0700
+++ gcc/config/i386/i386.c	2007-04-21 16:24:22.000000000 -0700
@@ -15423,6 +15423,18 @@ ix86_attr_length_immediate_default (rtx 
       }
   return len;
 }
+
+/* Compute default value for "length_immediate" attribute for MMX/SSE
+   instructions.  */
+int
+ix86_attr_length_simd_immediate_default (rtx insn)
+{
+  /* MMX/SSE instructions with more than 2 operands have a 8bit
+    immediat.  */
+  extract_insn_cached (insn);
+  return recog_data.n_operands > 2 ? 1 : 0;
+}
+
 /* Compute default value for "length_address" attribute.  */
 int
 ix86_attr_length_address_default (rtx insn)
--- gcc/config/i386/i386.md.sse	2007-04-21 13:14:48.000000000 -0700
+++ gcc/config/i386/i386.md	2007-04-21 16:20:43.000000000 -0700
@@ -245,8 +245,10 @@
   (cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
                           bitmanip")
 	   (const_int 0)
-	 (eq_attr "unit" "i387,sse,mmx")
+	 (eq_attr "unit" "i387")
 	   (const_int 0)
+	 (eq_attr "unit" "sse,mmx")
+	   (symbol_ref "ix86_attr_length_simd_immediate_default(insn)")
 	 (eq_attr "type" "alu,alu1,negnot,imovx,ishift,rotate,ishift1,rotate1,
 			  imul,icmp,push,pop")
 	   (symbol_ref "ix86_attr_length_immediate_default(insn,1)")


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]