added modufy_sp flag for AddSP
[libfirm] / ir / be / ia32 / ia32_spec.pl
index d2cabac..ed2348d 100644 (file)
@@ -18,7 +18,7 @@ $comment_string = "/*";
 #
 # <op-name> => {
 #   "op_flags"  => "N|L|C|X|I|F|Y|H|c|K",
-#   "irn_flags" => "R|N|I"
+#   "irn_flags" => "R|N|I|S"
 #   "arity"     => "0|1|2|3 ... |variable|dynamic|any",
 #   "state"     => "floats|pinned|mem_pinned|exc_pinned",
 #   "args"      => [
@@ -57,6 +57,7 @@ $comment_string = "/*";
 #   R   rematerializeable
 #   N   not spillable
 #   I   ignore for register allocation
+#   S   modifies stack pointer
 #
 # state: state of the operation, OPTIONAL (default is "floats")
 #
@@ -628,7 +629,6 @@ else {
 
 "Load" => {
   "op_flags"  => "L|F",
-  "irn_flags" => "R",
   "state"     => "exc_pinned",
   "comment"   => "construct Load: Load(ptr, mem) = LD ptr -> reg",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
@@ -738,6 +738,13 @@ else {
   "outs"      => [ "frame", "stack", "M" ],
 },
 
+"AddSP" => {
+  "irn_flags" => "S|I",
+  "comment"   => "allocate space on stack",
+  "reg_req"   => { "in" => [ "esp", "gp" ], "out" => [ "esp", "none" ] },
+  "outs"      => [ "stack", "M" ],
+},
+
 #-----------------------------------------------------------------------------#
 #   _____ _____ ______    __ _             _                     _            #
 #  / ____/ ____|  ____|  / _| |           | |                   | |           #
@@ -871,7 +878,6 @@ else {
 
 "xLoad" => {
   "op_flags"  => "L|F",
-  "irn_flags" => "R",
   "state"     => "exc_pinned",
   "comment"   => "construct SSE Load: Load(ptr, mem) = LD ptr",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
@@ -1147,7 +1153,6 @@ else {
 
 "vfld" => {
   "op_flags"  => "L|F",
-  "irn_flags" => "R",
   "state"     => "exc_pinned",
   "comment"   => "virtual fp Load: Load(ptr, mem) = LD ptr -> reg",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
@@ -1167,7 +1172,6 @@ else {
 # Conversions
 
 "vfild" => {
-  "irn_flags" => "R",
   "comment"   => "virtual fp integer Load: Load(ptr, mem) = iLD ptr -> reg",
   "cmp_attr"  => "  return ia32_compare_immop_attr(attr_a, attr_b);\n",
   "reg_req"   => { "in" => [ "gp", "gp", "none" ], "out" => [ "vfp", "none" ] },
@@ -1438,7 +1442,6 @@ else {
 
 "fild" => {
   "op_flags"  => "R",
-  "irn_flags" => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp integer Load: Load(ptr, mem) = iLD ptr -> reg",
   "reg_req"   => { },
@@ -1465,6 +1468,7 @@ else {
 
 "fldz" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load 0.0: Ld 0.0 -> reg",
   "reg_req"   => { },
@@ -1473,6 +1477,7 @@ else {
 
 "fld1" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load 1.0: Ld 1.0 -> reg",
   "reg_req"   => { },
@@ -1481,6 +1486,7 @@ else {
 
 "fldpi" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load pi: Ld pi -> reg",
   "reg_req"   => { },
@@ -1489,6 +1495,7 @@ else {
 
 "fldln2" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load ln 2: Ld ln 2 -> reg",
   "reg_req"   => { },
@@ -1497,6 +1504,7 @@ else {
 
 "fldlg2" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load lg 2: Ld lg 2 -> reg",
   "reg_req"   => { },
@@ -1505,6 +1513,7 @@ else {
 
 "fldl2t" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load ld 10: Ld ld 10 -> reg",
   "reg_req"   => { },
@@ -1513,6 +1522,7 @@ else {
 
 "fldl2e" => {
   "op_flags"  => "R",
+  "irn_flags"  => "R",
   "rd_constructor" => "NONE",
   "comment"   => "x87 fp Load ld e: Ld ld e -> reg",
   "reg_req"   => { },