following up, theres my naive fix for this. instead of 
emiting conditional division instruction by 5c... dont and
keep the branch. does this make any sense?

term% hg diff -r 1777 peep.c
diff -r 5eeb36d3ddd0 sys/src/cmd/5c/peep.c
--- a/sys/src/cmd/5c/peep.c     Mon Jul 30 19:11:16 2012 +0200
+++ b/sys/src/cmd/5c/peep.c     Mon Apr 29 20:51:12 2013 +0200
@@ -1354,6 +1354,15 @@
                        j->end = r->s2;
                        return Branch;
                }
+               switch(r->prog->as){
+               case ADIV:
+               case ADIVU:
+               case AMOD:
+               case AMODU:
+                       /* emulated by 5l, doesnt handle conditionals */
+                       j->end = r->s1;
+                       return Toolong;
+               }
                if (modifiescpsr(r->prog)) {
                        j->end = r->s1;
                        return Setcond;

--
cinap

Reply via email to