dbgfile "" section ".data.strdata.1" data $strdata.1 = { b "demos/hare/gol/gol.ha" } dbgfile "" section ".data.strliteral.0" data $strliteral.0 = { l $strdata.1, l 21, l 21 } dbgfile "" # struct { dead: uint, alive: uint, rows: uint, cols: uint, cells: *[*]uint, } [id: 2489860644; size: 24] type :type.19 = align 8 { w 1, w 1, w 1, w 1, l 1 } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.mutate" "ax" export function $mutate(l %w) { @start.2 %param.3 =l alloc8 8 %binding.13 =l alloc4 4 %binding.29 =l alloc4 4 storel %w, %param.3 @body.4 dbgloc 44, 36 dbgloc 45, 12 dbgloc 45, 24 storew 0, %binding.13 @loop.7 dbgloc 45, 36 dbgloc 45, 29 %.16 =w loaduw %binding.13 dbgloc 45, 32 dbgloc 45, 32 %.17 =l loadl %param.3 %field.18 =l add %.17, 8 %.20 =w loaduw %field.18 %.21 =w cultw %.16, %.20 %.22 =w extub %.21 jnz %.22, @body.8, @else.12 @body.8 dbgloc 46, 20 dbgloc 46, 32 storew 0, %binding.29 @loop.23 dbgloc 46, 44 dbgloc 46, 37 %.32 =w loaduw %binding.29 dbgloc 46, 40 dbgloc 46, 40 %.33 =l loadl %param.3 %field.34 =l add %.33, 12 %.35 =w loaduw %field.34 %.36 =w cultw %.32, %.35 %.37 =w extub %.36 jnz %.37, @body.24, @else.28 @body.24 dbgloc 51, 26 dbgloc 47, 30 dbgloc 47, 30 dbgloc 47, 32 %.39 =l loadl %param.3 dbgloc 47, 35 %.40 =w loaduw %binding.13 dbgloc 47, 38 %.41 =w loaduw %binding.29 %.38 =l call $cell(l %.39, w %.40, w %.41) dbgloc 47, 44 dbgloc 47, 50 dbgloc 47, 50 dbgloc 47, 52 %.47 =l loadl %param.3 dbgloc 47, 55 %.48 =w loaduw %binding.13 dbgloc 47, 58 %.49 =w loaduw %binding.29 %.46 =w call $live(l %.47, w %.48, w %.49) %.50 =w extub %.46 jnz %.50, @true.43, @false.44 @true.43 dbgloc 47, 61 dbgloc 48, 38 dbgloc 48, 41 dbgloc 48, 41 %.53 =l loadl %param.3 %field.54 =l add %.53, 4 %.55 =w loaduw %field.54 %.52 =w copy %.55 jmp @.51 @.56 @.51 %.42 =w copy %.52 jmp @.45 @false.44 dbgloc 49, 32 dbgloc 50, 38 dbgloc 50, 41 dbgloc 50, 41 %.59 =l loadl %param.3 %field.60 =l add %.59, 0 %.61 =w loaduw %field.60 %.58 =w copy %.61 jmp @.57 @.62 @.57 %.42 =w copy %.58 @.45 storew %.42, %.38 @after.27 dbgloc 46, 52 %.63 =w loaduw %binding.29 dbgloc 46, 52 %.63 =w add %.63, 1 storew %.63, %binding.29 jmp @loop.23 @else.28 @.26 @after.11 dbgloc 45, 44 %.64 =w loaduw %binding.13 dbgloc 45, 44 %.64 =w add %.64, 1 storew %.64, %binding.13 jmp @loop.7 @else.12 @.10 jmp @.5 @.65 @.5 ret } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.live" "ax" function ub $live(l %w, w %r, w %c) { @start.66 %param.67 =l alloc8 8 %param.68 =l alloc4 4 %param.69 =l alloc4 4 %binding.73 =l alloc4 4 storel %w, %param.67 storew %r, %param.68 storew %c, %param.69 @body.70 dbgloc 38, 45 dbgloc 39, 14 dbgloc 39, 34 dbgloc 39, 34 dbgloc 39, 36 %.75 =l loadl %param.67 dbgloc 39, 39 %.76 =w loaduw %param.68 dbgloc 39, 42 %.77 =w loaduw %param.69 %.74 =w call $live_neighbors(l %.75, w %.76, w %.77) storew %.74, %binding.73 dbgloc 41, 15 dbgloc 41, 56 dbgloc 41, 26 dbgloc 41, 20 %.82 =w loaduw %binding.73 dbgloc 41, 23 %.83 =w ceqw %.82, 3 %.78 =w copy %.83 jnz %.78, @.80, @.79 @.79 dbgloc 41, 55 dbgloc 41, 38 dbgloc 41, 32 %.88 =w loaduw %binding.73 dbgloc 41, 35 %.89 =w ceqw %.88, 2 %.84 =w copy %.89 jnz %.84, @.85, @.86 @.85 dbgloc 41, 46 dbgloc 41, 46 dbgloc 41, 48 %.91 =l loadl %param.67 dbgloc 41, 51 %.92 =w loaduw %param.68 dbgloc 41, 54 %.93 =w loaduw %param.69 %.90 =w call $isalive(l %.91, w %.92, w %.93) %.84 =w copy %.90 jmp @.86 @.86 %.78 =w copy %.84 jmp @.80 @.80 ret %.78 @.94 @.71 @.95 hlt } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.live_neighbors" "ax" function w $live_neighbors(l %w, w %r, w %c) { @start.96 %param.97 =l alloc8 8 %param.98 =l alloc4 4 %param.99 =l alloc4 4 %binding.103 =l alloc4 4 %binding.109 =l alloc4 4 %binding.115 =l alloc4 4 %binding.121 =l alloc4 4 %binding.127 =l alloc4 4 storel %w, %param.97 storew %r, %param.98 storew %c, %param.99 @body.100 dbgloc 19, 55 dbgloc 20, 14 dbgloc 20, 24 dbgloc 20, 24 dbgloc 20, 26 %.105 =w loaduw %param.99 dbgloc 20, 30 dbgloc 20, 30 %.106 =l loadl %param.97 %field.107 =l add %.106, 12 %.108 =w loaduw %field.107 %.104 =w call $next(w %.105, w %.108) storew %.104, %binding.103 dbgloc 21, 14 dbgloc 21, 24 dbgloc 21, 24 dbgloc 21, 26 %.111 =w loaduw %param.99 dbgloc 21, 30 dbgloc 21, 30 %.112 =l loadl %param.97 %field.113 =l add %.112, 12 %.114 =w loaduw %field.113 %.110 =w call $prev(w %.111, w %.114) storew %.110, %binding.109 dbgloc 22, 14 dbgloc 22, 24 dbgloc 22, 24 dbgloc 22, 26 %.117 =w loaduw %param.98 dbgloc 22, 30 dbgloc 22, 30 %.118 =l loadl %param.97 %field.119 =l add %.118, 8 %.120 =w loaduw %field.119 %.116 =w call $next(w %.117, w %.120) storew %.116, %binding.115 dbgloc 23, 14 dbgloc 23, 24 dbgloc 23, 24 dbgloc 23, 26 %.123 =w loaduw %param.98 dbgloc 23, 30 dbgloc 23, 30 %.124 =l loadl %param.97 %field.125 =l add %.124, 8 %.126 =w loaduw %field.125 %.122 =w call $prev(w %.123, w %.126) storew %.122, %binding.121 dbgloc 24, 12 dbgloc 24, 19 storew 0, %binding.127 dbgloc 26, 11 dbgloc 26, 20 dbgloc 26, 20 dbgloc 26, 22 %.133 =l loadl %param.97 dbgloc 26, 26 %.134 =w loaduw %binding.121 dbgloc 26, 30 %.135 =w loaduw %binding.109 %.132 =w call $isalive(l %.133, w %.134, w %.135) %.136 =w extub %.132 jnz %.136, @true.129, @false.130 @true.129 dbgloc 26, 39 %.137 =w loaduw %binding.127 dbgloc 26, 39 %.137 =w add %.137, 1 storew %.137, %binding.127 jmp @.131 @false.130 @.131 dbgloc 27, 11 dbgloc 27, 20 dbgloc 27, 20 dbgloc 27, 22 %.143 =l loadl %param.97 dbgloc 27, 26 %.144 =w loaduw %binding.121 dbgloc 27, 29 %.145 =w loaduw %param.99 %.142 =w call $isalive(l %.143, w %.144, w %.145) %.146 =w extub %.142 jnz %.146, @true.139, @false.140 @true.139 dbgloc 27, 38 %.147 =w loaduw %binding.127 dbgloc 27, 38 %.147 =w add %.147, 1 storew %.147, %binding.127 jmp @.141 @false.140 @.141 dbgloc 28, 11 dbgloc 28, 20 dbgloc 28, 20 dbgloc 28, 22 %.153 =l loadl %param.97 dbgloc 28, 26 %.154 =w loaduw %binding.121 dbgloc 28, 30 %.155 =w loaduw %binding.103 %.152 =w call $isalive(l %.153, w %.154, w %.155) %.156 =w extub %.152 jnz %.156, @true.149, @false.150 @true.149 dbgloc 28, 39 %.157 =w loaduw %binding.127 dbgloc 28, 39 %.157 =w add %.157, 1 storew %.157, %binding.127 jmp @.151 @false.150 @.151 dbgloc 29, 11 dbgloc 29, 20 dbgloc 29, 20 dbgloc 29, 22 %.163 =l loadl %param.97 dbgloc 29, 25 %.164 =w loaduw %param.98 dbgloc 29, 29 %.165 =w loaduw %binding.109 %.162 =w call $isalive(l %.163, w %.164, w %.165) %.166 =w extub %.162 jnz %.166, @true.159, @false.160 @true.159 dbgloc 29, 38 %.167 =w loaduw %binding.127 dbgloc 29, 38 %.167 =w add %.167, 1 storew %.167, %binding.127 jmp @.161 @false.160 @.161 dbgloc 30, 11 dbgloc 30, 20 dbgloc 30, 20 dbgloc 30, 22 %.173 =l loadl %param.97 dbgloc 30, 25 %.174 =w loaduw %param.98 dbgloc 30, 29 %.175 =w loaduw %binding.103 %.172 =w call $isalive(l %.173, w %.174, w %.175) %.176 =w extub %.172 jnz %.176, @true.169, @false.170 @true.169 dbgloc 30, 38 %.177 =w loaduw %binding.127 dbgloc 30, 38 %.177 =w add %.177, 1 storew %.177, %binding.127 jmp @.171 @false.170 @.171 dbgloc 31, 11 dbgloc 31, 20 dbgloc 31, 20 dbgloc 31, 22 %.183 =l loadl %param.97 dbgloc 31, 26 %.184 =w loaduw %binding.115 dbgloc 31, 30 %.185 =w loaduw %binding.109 %.182 =w call $isalive(l %.183, w %.184, w %.185) %.186 =w extub %.182 jnz %.186, @true.179, @false.180 @true.179 dbgloc 31, 39 %.187 =w loaduw %binding.127 dbgloc 31, 39 %.187 =w add %.187, 1 storew %.187, %binding.127 jmp @.181 @false.180 @.181 dbgloc 32, 11 dbgloc 32, 20 dbgloc 32, 20 dbgloc 32, 22 %.193 =l loadl %param.97 dbgloc 32, 26 %.194 =w loaduw %binding.115 dbgloc 32, 29 %.195 =w loaduw %param.99 %.192 =w call $isalive(l %.193, w %.194, w %.195) %.196 =w extub %.192 jnz %.196, @true.189, @false.190 @true.189 dbgloc 32, 38 %.197 =w loaduw %binding.127 dbgloc 32, 38 %.197 =w add %.197, 1 storew %.197, %binding.127 jmp @.191 @false.190 @.191 dbgloc 33, 11 dbgloc 33, 20 dbgloc 33, 20 dbgloc 33, 22 %.203 =l loadl %param.97 dbgloc 33, 26 %.204 =w loaduw %binding.115 dbgloc 33, 30 %.205 =w loaduw %binding.103 %.202 =w call $isalive(l %.203, w %.204, w %.205) %.206 =w extub %.202 jnz %.206, @true.199, @false.200 @true.199 dbgloc 33, 39 %.207 =w loaduw %binding.127 dbgloc 33, 39 %.207 =w add %.207, 1 storew %.207, %binding.127 jmp @.201 @false.200 @.201 dbgloc 35, 15 dbgloc 35, 17 %.208 =w loaduw %binding.127 ret %.208 @.209 @.101 @.210 hlt } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.prev" "ax" function w $prev(w %i, w %n) { @start.211 %param.212 =l alloc4 4 %param.213 =l alloc4 4 storew %i, %param.212 storew %n, %param.213 @body.214 dbgloc 17, 51 dbgloc 17, 40 dbgloc 17, 38 %.217 =w loaduw %param.212 dbgloc 17, 40 %.218 =w sub %.217, 1 dbgloc 17, 50 dbgloc 17, 48 %.220 =w loaduw %param.213 dbgloc 17, 50 %.221 =w sub %.220, 1 %.222 =w and %.218, %.221 ret %.222 } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.next" "ax" function w $next(w %i, w %n) { @start.223 %param.224 =l alloc4 4 %param.225 =l alloc4 4 storew %i, %param.224 storew %n, %param.225 @body.226 dbgloc 15, 51 dbgloc 15, 40 dbgloc 15, 38 %.229 =w loaduw %param.224 dbgloc 15, 40 %.230 =w add %.229, 1 dbgloc 15, 50 dbgloc 15, 48 %.232 =w loaduw %param.225 dbgloc 15, 50 %.233 =w sub %.232, 1 %.234 =w and %.230, %.233 ret %.234 } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.isalive" "ax" function ub $isalive(l %w, w %r, w %c) { @start.235 %param.236 =l alloc8 8 %param.237 =l alloc4 4 %param.238 =l alloc4 4 storel %w, %param.236 storew %r, %param.237 storew %c, %param.238 @body.239 dbgloc 13, 73 dbgloc 13, 49 dbgloc 13, 53 dbgloc 13, 53 dbgloc 13, 55 %.242 =l loadl %param.236 dbgloc 13, 58 %.243 =w loaduw %param.237 dbgloc 13, 61 %.244 =w loaduw %param.238 %.241 =l call $cell(l %.242, w %.243, w %.244) %.245 =w loaduw %.241 dbgloc 13, 68 dbgloc 13, 68 %.246 =l loadl %param.236 %field.247 =l add %.246, 4 %.248 =w loaduw %field.247 %.249 =w ceqw %.245, %.248 ret %.249 } dbgfile "" # [*]uint [id: 1671753632; size: undefined] type :type.259 = align 4 { 18446744073709551615 } dbgfile "qbe-wasm/demos/hare/gol/gol.ha" section ".text.cell" "ax" function l $cell(l %w, w %r, w %c) { @start.250 %param.251 =l alloc8 8 %param.252 =l alloc4 4 %param.253 =l alloc4 4 storel %w, %param.251 storew %r, %param.252 storew %c, %param.253 @body.254 dbgloc 11, 47 dbgloc 11, 49 dbgloc 11, 49 %.255 =l loadl %param.251 %field.256 =l add %.255, 16 %.257 =l loadl %field.256 dbgloc 11, 71 # gen lowered cast dbgloc 11, 71 dbgloc 11, 66 dbgloc 11, 59 %.262 =w loaduw %param.252 dbgloc 11, 62 dbgloc 11, 62 %.263 =l loadl %param.251 %field.264 =l add %.263, 8 %.265 =w loaduw %field.264 %.266 =w mul %.262, %.265 dbgloc 11, 71 %.267 =w loaduw %param.253 %.268 =w add %.266, %.267 %.269 =l extuw %.268 %.258 =l mul %.269, 4 %.258 =l add %.257, %.258 ret %.258 }