[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.cpp X86InstrMMX.td

2007-04-03 Thread Bill Wendling


Changes in directory llvm/lib/Target/X86:

X86InstrInfo.cpp updated: 1.81 - 1.82
X86InstrMMX.td updated: 1.28 - 1.29
---
Log message:

Add FEMMS and ADDQ. Renamed MMX recipes to prepend the MMX_ to them.


---
Diffs of the changes:  (+85 -69)

 X86InstrInfo.cpp |   10 +--
 X86InstrMMX.td   |  144 ++-
 2 files changed, 85 insertions(+), 69 deletions(-)


Index: llvm/lib/Target/X86/X86InstrInfo.cpp
diff -u llvm/lib/Target/X86/X86InstrInfo.cpp:1.81 
llvm/lib/Target/X86/X86InstrInfo.cpp:1.82
--- llvm/lib/Target/X86/X86InstrInfo.cpp:1.81   Wed Mar 28 13:12:31 2007
+++ llvm/lib/Target/X86/X86InstrInfo.cppTue Apr  3 01:00:37 2007
@@ -38,7 +38,7 @@
   oc == X86::MOVAPSrr || oc == X86::MOVAPDrr ||
   oc == X86::MOVSS2PSrr || oc == X86::MOVSD2PDrr ||
   oc == X86::MOVPS2SSrr || oc == X86::MOVPD2SDrr ||
-  oc == X86::MOVD64rr || oc == X86::MOVQ64rr) {
+  oc == X86::MMX_MOVD64rr || oc == X86::MMX_MOVQ64rr) {
   assert(MI.getNumOperands() == 2 
  MI.getOperand(0).isRegister() 
  MI.getOperand(1).isRegister() 
@@ -65,8 +65,8 @@
   case X86::MOVSDrm:
   case X86::MOVAPSrm:
   case X86::MOVAPDrm:
-  case X86::MOVD64rm:
-  case X86::MOVQ64rm:
+  case X86::MMX_MOVD64rm:
+  case X86::MMX_MOVQ64rm:
 if (MI-getOperand(1).isFrameIndex()  MI-getOperand(2).isImmediate() 
 MI-getOperand(3).isRegister()  MI-getOperand(4).isImmediate() 
 MI-getOperand(2).getImmedValue() == 1 
@@ -95,8 +95,8 @@
   case X86::MOVSDmr:
   case X86::MOVAPSmr:
   case X86::MOVAPDmr:
-  case X86::MOVD64mr:
-  case X86::MOVQ64mr:
+  case X86::MMX_MOVD64mr:
+  case X86::MMX_MOVQ64mr:
 if (MI-getOperand(0).isFrameIndex()  MI-getOperand(1).isImmediate() 
 MI-getOperand(2).isRegister()  MI-getOperand(3).isImmediate() 
 MI-getOperand(1).getImmedValue() == 1 


Index: llvm/lib/Target/X86/X86InstrMMX.td
diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.28 
llvm/lib/Target/X86/X86InstrMMX.td:1.29
--- llvm/lib/Target/X86/X86InstrMMX.td:1.28 Tue Mar 27 19:57:11 2007
+++ llvm/lib/Target/X86/X86InstrMMX.td  Tue Apr  3 01:00:37 2007
@@ -118,10 +118,11 @@
 }
 
 
//===--===//
-// MMX EMMS Instruction
+// MMX EMMS  FEMMS Instructions
 
//===--===//
 
-def MMX_EMMS : MMXI0x77, RawFrm, (ops), emms, [(int_x86_mmx_emms)];
+def MMX_EMMS  : MMXI0x77, RawFrm, (ops), emms,  [(int_x86_mmx_emms)];
+def MMX_FEMMS : MMXI0x0E, RawFrm, (ops), femms, [(int_x86_mmx_femms)];
 
 
//===--===//
 // MMX Scalar Instructions
@@ -130,9 +131,10 @@
 // Arithmetic Instructions
 
 // -- Addition
-defm MMX_PADDB : MMXI_binop_rm0xFC, paddb, add, v8i8, 1;
+defm MMX_PADDB : MMXI_binop_rm0xFC, paddb, add, v8i8,  1;
 defm MMX_PADDW : MMXI_binop_rm0xFD, paddw, add, v4i16, 1;
 defm MMX_PADDD : MMXI_binop_rm0xFE, paddd, add, v2i32, 1;
+defm MMX_PADDQ : MMXI_binop_rm0xD4, paddq, add, v1i64, 1;
 
 defm MMX_PADDSB  : MMXI_binop_rm_int0xEC, paddsb , int_x86_mmx_padds_b, 1;
 defm MMX_PADDSW  : MMXI_binop_rm_int0xED, paddsw , int_x86_mmx_padds_w, 1;
@@ -309,45 +311,52 @@
 defm MMX_PACKUSWB : MMXI_binop_rm_int0x67, packuswb, int_x86_mmx_packuswb;
 
 // Data Transfer Instructions
-def MOVD64rr : MMXI0x6E, MRMSrcReg, (ops VR64:$dst, GR32:$src),
-movd {$src, $dst|$dst, $src}, [];
-def MOVD64rm : MMXI0x6E, MRMSrcMem, (ops VR64:$dst, i32mem:$src),
-movd {$src, $dst|$dst, $src}, [];
-def MOVD64mr : MMXI0x7E, MRMDestMem, (ops i32mem:$dst, VR64:$src),
-movd {$src, $dst|$dst, $src}, [];
-
-def MOVQ64rr : MMXI0x6F, MRMSrcReg, (ops VR64:$dst, VR64:$src),
-movq {$src, $dst|$dst, $src}, [];
-def MOVQ64rm : MMXI0x6F, MRMSrcMem, (ops VR64:$dst, i64mem:$src),
-movq {$src, $dst|$dst, $src},
-[(set VR64:$dst, (load_mmx addr:$src))];
-def MOVQ64mr : MMXI0x7F, MRMDestMem, (ops i64mem:$dst, VR64:$src),
-movq {$src, $dst|$dst, $src},
-[(store (v1i64 VR64:$src), addr:$dst)];
+def MMX_MOVD64rr : MMXI0x6E, MRMSrcReg, (ops VR64:$dst, GR32:$src),
+movd {$src, $dst|$dst, $src}, [];
+def MMX_MOVD64rm : MMXI0x6E, MRMSrcMem, (ops VR64:$dst, i32mem:$src),
+movd {$src, $dst|$dst, $src}, [];
+def MMX_MOVD64mr : MMXI0x7E, MRMDestMem, (ops i32mem:$dst, VR64:$src),
+movd {$src, $dst|$dst, $src}, [];
+
+def MMX_MOVQ64rr : MMXI0x6F, MRMSrcReg, (ops VR64:$dst, VR64:$src),
+movq {$src, $dst|$dst, $src}, [];
+def MMX_MOVQ64rm : MMXI0x6F, MRMSrcMem, (ops VR64:$dst, i64mem:$src),
+movq {$src, $dst|$dst, $src},
+[(set VR64:$dst, (load_mmx addr:$src))];
+def MMX_MOVQ64mr : MMXI0x7F, MRMDestMem, (ops i64mem:$dst, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.cpp X86InstrMMX.td

2007-04-03 Thread Bill Wendling


Changes in directory llvm/lib/Target/X86:

X86InstrInfo.cpp updated: 1.82 - 1.83
X86InstrMMX.td updated: 1.29 - 1.30
---
Log message:

Adding more MMX instructions.


---
Diffs of the changes:  (+128 -64)

 X86InstrInfo.cpp |4 -
 X86InstrMMX.td   |  188 ---
 2 files changed, 128 insertions(+), 64 deletions(-)


Index: llvm/lib/Target/X86/X86InstrInfo.cpp
diff -u llvm/lib/Target/X86/X86InstrInfo.cpp:1.82 
llvm/lib/Target/X86/X86InstrInfo.cpp:1.83
--- llvm/lib/Target/X86/X86InstrInfo.cpp:1.82   Tue Apr  3 01:00:37 2007
+++ llvm/lib/Target/X86/X86InstrInfo.cppTue Apr  3 18:48:32 2007
@@ -38,7 +38,8 @@
   oc == X86::MOVAPSrr || oc == X86::MOVAPDrr ||
   oc == X86::MOVSS2PSrr || oc == X86::MOVSD2PDrr ||
   oc == X86::MOVPS2SSrr || oc == X86::MOVPD2SDrr ||
-  oc == X86::MMX_MOVD64rr || oc == X86::MMX_MOVQ64rr) {
+  oc == X86::MMX_MOVD64rr || oc == X86::MMX_MOVQ64rr ||
+  oc == X86::MMX_MOVDQ2Qrr || oc == X86::MMX_MOVQ2DQrr) {
   assert(MI.getNumOperands() == 2 
  MI.getOperand(0).isRegister() 
  MI.getOperand(1).isRegister() 
@@ -97,6 +98,7 @@
   case X86::MOVAPDmr:
   case X86::MMX_MOVD64mr:
   case X86::MMX_MOVQ64mr:
+  case X86::MMX_MOVNTQmr:
 if (MI-getOperand(0).isFrameIndex()  MI-getOperand(1).isImmediate() 
 MI-getOperand(2).isRegister()  MI-getOperand(3).isImmediate() 
 MI-getOperand(1).getImmedValue() == 1 


Index: llvm/lib/Target/X86/X86InstrMMX.td
diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.29 
llvm/lib/Target/X86/X86InstrMMX.td:1.30
--- llvm/lib/Target/X86/X86InstrMMX.td:1.29 Tue Apr  3 01:00:37 2007
+++ llvm/lib/Target/X86/X86InstrMMX.td  Tue Apr  3 18:48:32 2007
@@ -20,12 +20,19 @@
 // MMXI   - MMX instructions with TB prefix.
 // MMX2I  - MMX / SSE2 instructions with TB and OpSize prefixes.
 // MMXIi8 - MMX instructions with ImmT == Imm8 and TB prefix.
+// MMXIi8 - MMX instructions with ImmT == Imm8 and TB prefix.
+// MMXID  - MMX instructions with XD prefix.
+// MMXIS  - MMX instructions with XS prefix.
 class MMXIbits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, TB, Requires[HasMMX];
 class MMX2Ibits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, TB, OpSize, Requires[HasMMX];
 class MMXIi8bits8 o, Format F, dag ops, string asm, listdag pattern
   : Ii8o, F, ops, asm, pattern, TB, Requires[HasMMX];
+class MMXIDbits8 o, Format F, dag ops, string asm, listdag pattern
+  : Ii8o, F, ops, asm, pattern, XD, Requires[HasMMX];
+class MMXISbits8 o, Format F, dag ops, string asm, listdag pattern
+  : Ii8o, F, ops, asm, pattern, XS, Requires[HasMMX];
 
 // Some 'special' instructions
 def IMPLICIT_DEF_VR64 : I0, Pseudo, (ops VR64:$dst),
@@ -51,6 +58,18 @@
 def bc_v1i64 : PatFrag(ops node:$in), (v1i64 (bitconvert node:$in));
 
 
//===--===//
+// MMX Masks
+//===--===//
+
+def MMX_UNPCKH_shuffle_mask : PatLeaf(build_vector), [{
+  return X86::isUNPCKHMask(N);
+}];
+
+def MMX_UNPCKL_shuffle_mask : PatLeaf(build_vector), [{
+  return X86::isUNPCKLMask(N);
+}];
+
+//===--===//
 // MMX Multiclasses
 
//===--===//
 
@@ -128,6 +147,35 @@
 // MMX Scalar Instructions
 
//===--===//
 
+// Data Transfer Instructions
+def MMX_MOVD64rr : MMXI0x6E, MRMSrcReg, (ops VR64:$dst, GR32:$src),
+movd {$src, $dst|$dst, $src}, [];
+def MMX_MOVD64rm : MMXI0x6E, MRMSrcMem, (ops VR64:$dst, i32mem:$src),
+movd {$src, $dst|$dst, $src}, [];
+def MMX_MOVD64mr : MMXI0x7E, MRMDestMem, (ops i32mem:$dst, VR64:$src),
+movd {$src, $dst|$dst, $src}, [];
+
+def MMX_MOVQ64rr : MMXI0x6F, MRMSrcReg, (ops VR64:$dst, VR64:$src),
+movq {$src, $dst|$dst, $src}, [];
+def MMX_MOVQ64rm : MMXI0x6F, MRMSrcMem, (ops VR64:$dst, i64mem:$src),
+movq {$src, $dst|$dst, $src},
+[(set VR64:$dst, (load_mmx addr:$src))];
+def MMX_MOVQ64mr : MMXI0x7F, MRMDestMem, (ops i64mem:$dst, VR64:$src),
+movq {$src, $dst|$dst, $src},
+[(store (v1i64 VR64:$src), addr:$dst)];
+
+def MMX_MOVDQ2Qrr : MMXID0xD6, MRMDestMem, (ops VR64:$dst, VR128:$src),
+  movdq2q {$src, $dst|$dst, $src},
+  [(store (i64 (vector_extract (v2i64 VR128:$src),
+(iPTR 0))), VR64:$dst)];
+def MMX_MOVQ2DQrr : MMXIS0xD6, MRMDestMem, (ops VR128:$dst, VR64:$src),
+  movq2dq {$src, $dst|$dst, $src},
+  [(store (v1i64 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.cpp X86InstrMMX.td X86InstrSSE.td

2006-03-20 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrInfo.cpp updated: 1.45 - 1.46
X86InstrMMX.td updated: 1.4 - 1.5
X86InstrSSE.td updated: 1.10 - 1.11
---
Log message:

- Remove scalar to vector pseudo ops. They are just wrong.
- Handle FR32 to VR128:v4f32 and FR64 to VR128:v2f64 with aliases of MOVAPS
and MOVAPD. Mark them as move instructions and *hope* they will be deleted.


---
Diffs of the changes:  (+17 -56)

 X86InstrInfo.cpp |3 ++-
 X86InstrMMX.td   |   19 ---
 X86InstrSSE.td   |   51 +++
 3 files changed, 17 insertions(+), 56 deletions(-)


Index: llvm/lib/Target/X86/X86InstrInfo.cpp
diff -u llvm/lib/Target/X86/X86InstrInfo.cpp:1.45 
llvm/lib/Target/X86/X86InstrInfo.cpp:1.46
--- llvm/lib/Target/X86/X86InstrInfo.cpp:1.45   Thu Feb 16 16:45:16 2006
+++ llvm/lib/Target/X86/X86InstrInfo.cppTue Mar 21 01:09:35 2006
@@ -30,7 +30,8 @@
   if (oc == X86::MOV8rr || oc == X86::MOV16rr || oc == X86::MOV32rr ||
   oc == X86::FpMOV  || oc == X86::MOVSSrr || oc == X86::MOVSDrr ||
   oc == X86::FsMOVAPSrr || oc == X86::FsMOVAPDrr ||
-  oc == X86::MOVAPSrr || oc == X86::MOVAPDrr) {
+  oc == X86::MOVAPSrr || oc == X86::MOVAPDrr ||
+  oc == X86::FR32ToV4F32 || oc == X86::FR64ToV2F64) {
   assert(MI.getNumOperands() == 2 
  MI.getOperand(0).isRegister() 
  MI.getOperand(1).isRegister() 


Index: llvm/lib/Target/X86/X86InstrMMX.td
diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.4 
llvm/lib/Target/X86/X86InstrMMX.td:1.5
--- llvm/lib/Target/X86/X86InstrMMX.td:1.4  Mon Mar 20 18:33:35 2006
+++ llvm/lib/Target/X86/X86InstrMMX.td  Tue Mar 21 01:09:35 2006
@@ -22,24 +22,6 @@
 def : Pat(v4i16 (undef)), (IMPLICIT_DEF_VR64),  Requires[HasMMX];
 def : Pat(v2i32 (undef)), (IMPLICIT_DEF_VR64),  Requires[HasMMX];
 
-def SCALAR_TO_VECTOR_V8I8 : I0, Pseudo, (ops VR64:$dst, R8:$src),
-  #SCALAR_TO_VECTOR $src,
-  [(set VR64:$dst,
-(v8i8 (scalar_to_vector R8:$src)))],
-Requires[HasMMX];
-
-def SCALAR_TO_VECTOR_V4I16 : I0, Pseudo, (ops VR64:$dst, R16:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR64:$dst,
- (v4i16 (scalar_to_vector R16:$src)))],
- Requires[HasMMX];
-
-def SCALAR_TO_VECTOR_V2I32 : I0, Pseudo, (ops VR64:$dst, R32:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR64:$dst,
- (v2i32 (scalar_to_vector R32:$src)))],
- Requires[HasMMX];
-
 // Move Instructions
 def MOVD64rr : I0x6E, MRMSrcReg, (ops VR64:$dst, R32:$src),
  movd {$src, $dst|$dst, $src}, [], TB,
@@ -60,4 +42,3 @@
 def MOVQ64mr : I0x7F, MRMDestMem, (ops i64mem:$dst, VR64:$src),
  movq {$src, $dst|$dst, $src}, [], TB,
Requires[HasMMX];
-


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.10 
llvm/lib/Target/X86/X86InstrSSE.td:1.11
--- llvm/lib/Target/X86/X86InstrSSE.td:1.10 Mon Mar 20 18:33:35 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Mar 21 01:09:35 2006
@@ -353,42 +353,6 @@
 def : Pat(v4i32 (undef)), (IMPLICIT_DEF_VR128), Requires[HasSSE2];
 def : Pat(v2i64 (undef)), (IMPLICIT_DEF_VR128), Requires[HasSSE2];
 
-def SCALAR_TO_VECTOR_V4F32 : I0, Pseudo, (ops VR128:$dst, FR32:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR128:$dst,
- (v4f32 (scalar_to_vector FR32:$src)))],
- Requires[HasSSE1];
-
-def SCALAR_TO_VECTOR_V2F64 : I0, Pseudo, (ops VR128:$dst, FR64:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR128:$dst,
- (v2f64 (scalar_to_vector FR64:$src)))],
- Requires[HasSSE2];
-
-def SCALAR_TO_VECTOR_V16I8 : I0, Pseudo, (ops VR128:$dst, R8:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR128:$dst,
- (v16i8 (scalar_to_vector R8:$src)))],
- Requires[HasSSE2];
-
-def SCALAR_TO_VECTOR_V8I16 : I0, Pseudo, (ops VR128:$dst, R16:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR128:$dst,
- (v8i16 (scalar_to_vector R16:$src)))],
- Requires[HasSSE2];
-
-def SCALAR_TO_VECTOR_V4I32 : I0, Pseudo, (ops VR128:$dst, R32:$src),
-   #SCALAR_TO_VECTOR $src,
-   [(set VR128:$dst,
- (v4i32 (scalar_to_vector R32:$src)))],
- Requires[HasSSE2];
-
-def