X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=blobdiff_plain;f=gesamt_ppc%2Fparser.y;h=c0088d01c744f0e111c5423629726c161d1c6f81;hp=182a08d66253ce6f012aecdc5fae8b3ec93c2715;hb=0f89341e10f662c3ce1128d83e660709da9c3785;hpb=be9027fc4d97ced5cd5c2286da4fd99d387ee657 diff --git a/gesamt_ppc/parser.y b/gesamt_ppc/parser.y index 182a08d..c0088d0 100644 --- a/gesamt_ppc/parser.y +++ b/gesamt_ppc/parser.y @@ -223,8 +223,7 @@ Statement: @gen { printf(".%s_ifstart_%d:\n", get_func_name(), @Statement.lblcnt_in@); write_tree(@Statement.node@, 0); burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1); - /* TODO: kann ich mir das test wirklich wegan and davor sparen? */ - printf("\tjz .%s_ifend_%d\n", get_func_name(), @Statement.lblcnt_in@); + printf("\tbeq 0,.%s_ifend_%d\n", get_func_name(), @Statement.lblcnt_in@); } @gen @revorder(1) printf(".%s_ifend_%d:\n", get_func_name(), @Statement.lblcnt_in@); @} @@ -256,7 +255,7 @@ Statement: printf(".%s_ifstart_%d:\n", get_func_name(), @Statement.lblcnt_in@); write_tree(@Statement.node@, 0); burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1); /* TODO: kann ich mir das test wirklich wegan and davor sparen? */ - printf("\tjz .%s_ifelse_%d\n", get_func_name(), @Statement.lblcnt_in@); + printf("\tbeq 0,.%s_ifelse_%d\n", get_func_name(), @Statement.lblcnt_in@); } @gen @revorder(1) printf(".%s_ifend_%d:\n", get_func_name(), @Statement.lblcnt_in@); @} @@ -282,9 +281,9 @@ Statement: printf(".%s_whilestart_%d:\n", get_func_name(), @Statement.lblcnt_in@); write_tree(@Statement.node@, 0); burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1); /* TODO: kann ich mir das test wirklich wegan and davor sparen? */ - printf("\tjz .%s_whileend_%d\n", get_func_name(), @Statement.lblcnt_in@); + printf("\tbeq 0,.%s_whileend_%d\n", get_func_name(), @Statement.lblcnt_in@); } - @gen @revorder(1) printf("\tjmp .%s_whilestart_%d\n.%s_whileend_%d:\n", get_func_name(), @Statement.lblcnt_in@, get_func_name(), @Statement.lblcnt_in@); + @gen @revorder(1) printf("\tb .%s_whilestart_%d\n.%s_whileend_%d:\n", get_func_name(), @Statement.lblcnt_in@, get_func_name(), @Statement.lblcnt_in@); @} | RETURN Expr @@ -310,7 +309,7 @@ Elsestat: @i @Statseq.vars_in@ = @Elsestat.vars_in@; @i @Elsestat.vars_out@ = @Statseq.vars_out@; - @gen printf("\tjmp .%s_ifend_%d\n.%s_ifelse_%d:\n", get_func_name(), @Elsestat.reallblcnt@, get_func_name(), @Elsestat.reallblcnt@); + @gen printf("\tb .%s_ifend_%d\n.%s_ifelse_%d:\n", get_func_name(), @Elsestat.reallblcnt@, get_func_name(), @Elsestat.reallblcnt@); @} Lexpr: