This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Count immediate byte for MMX/SSE instructions
- From: "H. J. Lu" <hjl at lucon dot org>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 21 Apr 2007 16:32:04 -0700
- Subject: 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)")