put register classes into arch_env struct, no need for complicated callbacks
[libfirm] / ir / be / sparc / sparc_spec.pl
index 6479ac3..484cf02 100644 (file)
@@ -427,7 +427,7 @@ Sll => {
        constructors => \%binop_operand_constructors,
 },
 
-Slr => {
+Srl => {
        irn_flags    => [ "rematerializable" ],
        mode         => $mode_gp,
        emit         => '. srl %S0, %R1I, %D0',
@@ -609,7 +609,17 @@ fdiv => {
        attr         => "ir_mode *fp_mode",
        ins          => [ "left", "right" ],
        outs         => [ "res", "M" ],
-       constructors => \%float_binop_constructors,
+       constructors => {
+               s => {
+                       reg_req => { in => [ "fp", "fp" ], out => [ "fp", "none" ] },
+               },
+               d => {
+                       reg_req => { in => [ "fp:a|2", "fp:a|2" ], out => [ "fp:a|2", "none" ] },
+               },
+               q => {
+                       reg_req => { in => [ "fp:a|4", "fp:a|4" ], out => [ "fp:a|4", "none" ] },
+               }
+       },
 },
 
 fneg => {
@@ -668,21 +678,20 @@ fftof => {
 
 fitof => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "gp" ], out => [ "fp" ] },
        emit      => '. fito%FPM %S0, %D0',
        attr_type => "sparc_fp_attr_t",
        attr      => "ir_mode *fp_mode",
        constructors => {
                s => {
-                       reg_req => { in => [ "gp" ], out => [ "fp" ] },
+                       reg_req => { in => [ "fp" ], out => [ "fp" ] },
                        mode    => $mode_fp,
                },
                d => {
-                       reg_req => { in => [ "gp" ], out => [ "fp:a|2" ] },
+                       reg_req => { in => [ "fp" ], out => [ "fp:a|2" ] },
                        mode    => $mode_fp2,
                },
                q => {
-                       reg_req => { in => [ "gp" ], out => [ "fp:a|4" ] },
+                       reg_req => { in => [ "fp" ], out => [ "fp:a|4" ] },
                        mode    => $mode_fp4,
                },
        },
@@ -690,20 +699,19 @@ fitof => {
 
 fftoi => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "fp" ], out => [ "gp" ] },
-       emit      => '. f%FPM.toi %S0, %D0',
+       emit      => '. f%FPM%.toi %S0, %D0',
        attr_type => "sparc_fp_attr_t",
        attr      => "ir_mode *fp_mode",
        mode      => $mode_gp,
        constructors => {
                s => {
-                       reg_req => { in => [ "gp" ], out => [ "gp" ] },
+                       reg_req => { in => [ "fp" ], out => [ "fp" ] },
                },
                d => {
-                       reg_req => { in => [ "fp:a|2" ], out => [ "gp" ] },
+                       reg_req => { in => [ "fp:a|2" ], out => [ "fp" ] },
                },
                q => {
-                       reg_req => { in => [ "fp:a|4" ], out => [ "gp" ] },
+                       reg_req => { in => [ "fp:a|4" ], out => [ "fp" ] },
                },
        },
 },
@@ -749,7 +757,7 @@ Stf => {
        attr_type => "sparc_load_store_attr_t",
        attr      => "ir_mode *ls_mode, ir_entity *entity, int32_t offset, bool is_frame_entity",
        custominit => "init_sparc_load_store_attributes(res, ls_mode, entity, offset, is_frame_entity, false);",
-       emit      => '. st%FLSM %S1, [%S0%O1]',
+       emit      => '. st%FLSM %S0, [%S1%O2]',
        mode      => 'mode_M',
 },