make verifier a bit less strict about keeps
[libfirm] / ir / be / ia32 / ia32_spec.pl
index 93ae024..510897e 100644 (file)
@@ -332,6 +332,7 @@ Asm => {
        modified_flags => 1,
 },
 
+# "allocates" a free register
 ProduceVal => {
        op_flags  => "c",
        irn_flags => "R",
@@ -1008,9 +1009,10 @@ Stc => {
 Cmp => {
        irn_flags => "R",
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "gp", "gp" ] , out => [ "flags" ] },
+       reg_req   => { in  => [ "gp", "gp", "none", "gp", "gp" ],
+                      out => [ "flags", "none", "none" ] },
        ins       => [ "base", "index", "mem", "left", "right" ],
-       outs      => [ "eflags" ],
+       outs      => [ "eflags", "unused", "M" ],
        am        => "source,binary",
        emit      => '. cmp%M %binop',
        attr      => "int ins_permuted, int cmp_unsigned",
@@ -1453,6 +1455,17 @@ LdTls => {
        latency   => 1,
 },
 
+Bt => {
+       irn_flags => "R",
+       state     => "exc_pinned",
+       reg_req   => { in => [ "gp", "gp" ], out => [ "flags" ] },
+       ins       => [ "left", "right" ],
+       emit      => '. bt%M %S1, %S0',
+       units     => [ "GP" ],
+       latency   => 1,
+       mode      => $mode_flags,
+       modified_flags => $status_flags  # only CF is set, but the other flags are undefined
+},
 
 #-----------------------------------------------------------------------------#
 #   _____ _____ ______    __ _             _                     _            #
@@ -1986,6 +1999,17 @@ vfist => {
        attr_type => "ia32_x87_attr_t",
 },
 
+# SSE3 fisttp instruction
+vfisttp => {
+       state     => "exc_pinned",
+       reg_req   => { in => [ "gp", "gp", "none", "vfp" ], out => [ "in_r4", "none" ]},
+       ins       => [ "base", "index", "mem", "val" ],
+       outs      => [ "res", "M" ],
+       latency   => 4,
+       units     => [ "VFP" ],
+       attr_type => "ia32_x87_attr_t",
+},
+
 l_vfist => {
        cmp_attr  => "return 1;",
        state     => "exc_pinned",
@@ -2339,6 +2363,17 @@ fistp => {
        latency   => 2,
 },
 
+# SSE3 firsttp instruction
+fisttp => {
+       state     => "exc_pinned",
+       rd_constructor => "NONE",
+       reg_req   => { },
+       emit      => '. fisttp%M %AM',
+       mode      => "mode_M",
+       attr_type => "ia32_x87_attr_t",
+       latency   => 2,
+},
+
 # constants
 
 fldz => {