cheaper mul by small constants on amd64
[qbe.git] / test / mandel.ssa
blob67d960abb7fddbf817fb716f3f090aae8170df0f
1 # Print the Mandelbrot set on the
2 # terminal line output.
4 function w $mandel(d %x, d %y) {
5 @mandel
6         %cr =d sub %y, d_0.5
7         %ci =d copy %x
8 @loop
9         %i =w phi @mandel 0, @loop1 %i1
10         %zr =d phi @mandel d_0, @loop1 %zr1
11         %zi =d phi @mandel d_0, @loop1 %zi1
12         %i1 =w add 1, %i
13         %tmp =d mul %zr, %zi
14         %zr2 =d mul %zr, %zr
15         %zi2 =d mul %zi, %zi
16         %zrx =d sub %zr2, %zi2
17         %zr1 =d add %zrx, %cr
18         %zix =d add %tmp, %tmp
19         %zi1 =d add %zix, %ci
20         %sum =d add %zi2, %zr2
21         %cmp1 =w cgtd %sum, d_16
22         jnz %cmp1, @reti, @loop1
23 @loop1
24         %cmp2 =w csgtw %i1, 1000
25         jnz %cmp2, @ret0, @loop
26 @reti
27         ret %i1
28 @ret0
29         ret 0
32 export
33 function w $main() {
34 @main
35 @loopy
36         %y =d phi @main d_-1, @loopy1 %y1
37 @loopx
38         %x =d phi @loopy d_-1, @loopx1 %x1
39         %i =w call $mandel(d %x, d %y)
40         jnz %i, @out, @in
41 @in
42         %r0 =w call $putchar(w 42)   # '*'
43         jmp @loopx1
44 @out
45         %r1 =w call $putchar(w 32)   # ' '
46         jmp @loopx1
47 @loopx1
48         %x1 =d add %x, d_0.032
49         %cmp1 =w cgtd %x1, d_1
50         jnz %cmp1, @loopy1, @loopx
51 @loopy1
52         %r2 =w call $putchar(w 10)   # '\n'
53         %y1 =d add %y, d_0.032
54         %cmp2 =w cgtd %y1, d_1
55         jnz %cmp2, @ret, @loopy
56 @ret
57         ret 0
60 # >>> output
61 #                                                                #
62 #                                                                #
63 #                                                                #
64 #                                                                #
65 #                                *                               #
66 #                               ****                             #
67 #                               ****                             #
68 #                               ***                              #
69 #                              *****                             #
70 #                             *********                          #
71 #                           ************                         #
72 #                        *****************                       #
73 #                         ****************                       #
74 #                         ***************                        #
75 #                         ****************                       #
76 #                         ****************                       #
77 #                        *****************                       #
78 #                         ****************                       #
79 #                         ****************                       #
80 #                          **************                        #
81 #                          *************                         #
82 #                           ************                         #
83 #                            *********                           #
84 #                              *****                             #
85 #                            ***********                         #
86 #                         *****************                      #
87 #                      **********************                    #
88 #                   * *********************** **                 #
89 #                   ***************************                  #
90 #                  *****************************                 #
91 #               * *******************************  **            #
92 #              ** ***********************************            #
93 #              *********************************** *             #
94 #               ***********************************              #
95 #              *************************************             #
96 #              *************************************             #
97 #             ***************************************            #
98 #             ***************************************            #
99 #             ***************************************            #
100 #             ****************************************           #
101 #       *     ****************************************           #
102 #       ********************************************** ****      #
103 #       ****************************************************     #
104 #     * *****************************************************    #
105 #     * *****************************************************    #
106 #       ***** **************************************** ****      #
107 #         *   ****************************************    *      #
108 #             ****************************************           #
109 #             ***************************************            #
110 #            ****************************************            #
111 #              ***************************************           #
112 #             ****************************************           #
113 #               ************************************             #
114 #               ***********************************              #
115 #                *********************************               #
116 #               ************************************             #
117 #               *** ************* ************** ***             #
118 #                    ***********   ************   **             #
119 #                      ********      ********                    #
120 #                     **                *   *                    #
121 #                                                                #
122 #                                                                #
123 #                                                                #
124 # <<<