added changes for new survice_dce code
[libfirm] / ir / be / ia32 / ia32_spec.pl
index 8ab661b..5c15a85 100644 (file)
@@ -335,11 +335,6 @@ $arch = "ia32";
 
 # other operations
 
-"Conv" => {
-  "reg_req"  => { "in" => [ "gp" ], "out" => [ "in_r1" ] },
-  "comment"  => "construct Conv: Conv(a) = (conv)a"
-},
-
 "CondJmp" => {
   "op_flags"  => "L|X|Y",
   "comment"   => "construct conditional jump: CMP A, B && JMPxx LABEL",
@@ -386,7 +381,14 @@ $arch = "ia32";
   "comment"   => "construct Load: Load(ptr, mem) = LD ptr -> reg",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
   "reg_req"   => { "in" => [ "gp", "gp", "none" ], "out" => [ "gp" ] },
-  "emit"      => '. mov %D1, %ia32_emit_am\t\t\t/* Load((%A1)) -> %D1 */'
+  "emit"      =>
+'  if (get_mode_size_bits(get_ia32_ls_mode(n)) < 32) {
+4.   mov%Mx %D1, %ia32_emit_am\t\t\t/* Load((%A1)) -> %D1 */
+  }
+  else {
+4.   mov %D1, %ia32_emit_am\t\t\t/* Load((%A1)) -> %D1 */
+  }
+'
 },
 
 "Store" => {
@@ -422,7 +424,7 @@ $arch = "ia32";
   "comment"   => "construct SSE Add: Add(a, b) = Add(b, a) = a + b",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
   "reg_req"   => { "in" => [ "gp", "gp", "fp", "fp", "none" ], "out" => [ "in_r3 !in_r4" ] },
-  "emit"      => '. adds%M %ia32_emit_binop\t\t\t/* SSE Add(%A1, %A2) -> %D1 */'
+  "emit"      => '. adds%M %ia32_emit_binop\t\t\t/* SSE Add(%A3, %A4) -> %D1 */'
 },
 
 "fMul" => {
@@ -430,7 +432,7 @@ $arch = "ia32";
   "comment"   => "construct SSE Mul: Mul(a, b) = Mul(b, a) = a * b",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
   "reg_req"   => { "in" => [ "gp", "gp", "fp", "fp", "none" ], "out" => [ "in_r3 !in_r4" ] },
-  "emit"      => '. muls%M %ia32_emit_binop\t\t\t/* SSE Mul(%A1, %A2) -> %D1 */'
+  "emit"      => '. muls%M %ia32_emit_binop\t\t\t/* SSE Mul(%A3, %A4) -> %D1 */'
 },
 
 "fMax" => {
@@ -438,7 +440,7 @@ $arch = "ia32";
   "comment"   => "construct SSE Max: Max(a, b) = Max(b, a) = a > b ? a : b",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
   "reg_req"   => { "in" => [ "gp", "gp", "fp", "fp", "none" ], "out" => [ "in_r3 !in_r4" ] },
-  "emit"      => '. maxs%M %ia32_emit_binop\t\t\t/* SSE Max(%A1, %A2) -> %D1 */'
+  "emit"      => '. maxs%M %ia32_emit_binop\t\t\t/* SSE Max(%A3, %A4) -> %D1 */'
 },
 
 "fMin" => {
@@ -446,7 +448,7 @@ $arch = "ia32";
   "comment"   => "construct SSE Min: Min(a, b) = Min(b, a) = a < b ? a : b",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
   "reg_req"   => { "in" => [ "gp", "gp", "fp", "fp", "none" ], "out" => [ "in_r3 !in_r4" ] },
-  "emit"      => '. mins%M %ia32_emit_binop\t\t\t/* SSE Min(%A1, %A2) -> %D1 */'
+  "emit"      => '. mins%M %ia32_emit_binop\t\t\t/* SSE Min(%A3, %A4) -> %D1 */'
 },
 
 "fAnd" => {
@@ -493,11 +495,6 @@ $arch = "ia32";
 
 # other operations
 
-"fConv" => {
-  "reg_req"  => { "in" => [ "fp" ], "out" => [ "gp" ] },
-  "comment"  => "construct Conv: Conv(a) = (conv)a"
-},
-
 "fCondJmp" => {
   "op_flags"  => "L|X|Y",
   "comment"   => "construct conditional jump: UCOMIS A, B && JMPxx LABEL",
@@ -552,4 +549,24 @@ $arch = "ia32";
   "reg_req"  => { "in" => [ "edi", "esi", "none" ], "out" => [ "none" ] },
 },
 
+# Conversions
+
+"Conv_I2FP" => {
+  "reg_req"  => { "in" => [ "gp", "gp", "gp", "none" ], "out" => [ "fp", "none" ] },
+  "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
+  "comment"  => "construct Conv Int -> Floating Point"
+},
+
+"Conv_FP2I" => {
+  "reg_req"  => { "in" => [ "gp", "gp", "fp", "none" ], "out" => [ "gp", "none" ] },
+  "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
+  "comment"  => "construct Conv Floating Point -> Int"
+},
+
+"Conv_FP2FP" => {
+  "reg_req"  => { "in" => [ "gp", "gp", "fp", "none" ], "out" => [ "fp", "none" ] },
+  "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
+  "comment"  => "construct Conv Floating Point -> Floating Point",
+},
+
 ); # end of %nodes