os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit ec816a9977f76e037f2b0c981790c82b1ec631b0
parent 82420586a2b2b28786afd2e32fd9136d9654aa00
Author: erai <erai@omiltem.net>
Date:   Sun,  9 Feb 2025 04:45:59 +0000

fold bit and

Diffstat:
Mcc0.c | 418+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mir.om | 2++
2 files changed, 217 insertions(+), 203 deletions(-)

diff --git a/cc0.c b/cc0.c @@ -1490,7 +1490,7 @@ b7: if (!v4) goto b1; v7 = (u)zdie; v8 = (u)"invalid reg"; v9 = ((u(*)())v7)(v8); -b1: if (vop == (131327UL & 65535UL)) goto b28; +b1: if (vop == 255) goto b28; if ((vop & -16UL) == 3984) goto b28; v11 = 1; b30: if (!v11) goto b24; @@ -19285,6 +19285,11 @@ u zirexpr_fold(u vic, u vo) { u v168 = 0; u v169 = 0; u v170 = 0; + u v171 = 0; + u v172 = 0; + u v173 = 0; + u v174 = 0; + u v175 = 0; if (!*(u*)(vo + 8)) goto b4; v8 = (u)zirexpr_fold; v9 = vic; @@ -19315,216 +19320,216 @@ b16: if (!v16) goto b10; *(u*)(vret + 80) = *(u*)(vo + 80); return vret; b10: if (*(u*)va == 3) goto b18; -b1: if (!va) goto b89; - if (*(u*)va != 3) goto b89; - v110 = 1; -b91: if (!v110) goto b85; +b1: if (!va) goto b92; + if (*(u*)va != 3) goto b92; + v115 = 1; +b94: if (!v115) goto b88; vn = *(u*)(va + 24); - if (vn != 0) goto b94; - if (vkind != 11) goto b99; - v111 = 1; -b101: if (!v111) goto b95; + if (vn != 0) goto b97; + if (vkind != 11) goto b102; + v116 = 1; +b104: if (!v116) goto b98; return vb; -b95: if (vkind != 20) goto b108; - v113 = (u)zmkirop; - v114 = vic; - v115 = 9; - v116 = vb; - v117 = 0; - v118 = ((u(*)())v113)(v114, v115, v116, v117); - vret = v118; +b98: if (vkind != 20) goto b111; + v118 = (u)zmkirop; + v119 = vic; + v120 = 9; + v121 = vb; + v122 = 0; + v123 = ((u(*)())v118)(v119, v120, v121, v122); + vret = v123; *(u*)(vret + 64) = *(u*)(vo + 64); *(u*)(vret + 72) = *(u*)(vo + 72); *(u*)(vret + 80) = *(u*)(vo + 80); return vret; -b108: if (vkind != 12) goto b116; - v119 = 1; -b118: if (!v119) goto b85; - v122 = (u)zmkirfold; - v123 = vic; - v124 = vo; - v125 = 0; - v126 = ((u(*)())v122)(v123, v124, v125); - return v126; -b85: if (!vb) goto b153; - if (*(u*)vb != 3) goto b153; - v139 = 1; -b155: if (!v139) goto b149; +b111: if (vkind != 12) goto b119; + v124 = 1; +b121: if (!v124) goto b88; + v127 = (u)zmkirfold; + v128 = vic; + v129 = vo; + v130 = 0; + v131 = ((u(*)())v127)(v128, v129, v130); + return v131; +b88: if (!vb) goto b156; + if (*(u*)vb != 3) goto b156; + v144 = 1; +b158: if (!v144) goto b152; vn = *(u*)(vb + 24); - if (vn != 0) goto b158; - if (vkind != 11) goto b163; - v140 = 1; -b165: if (!v140) goto b159; - return va; -b159: if (vkind != 12) goto b191; + if (vn != 0) goto b161; + if (vkind != 11) goto b166; v145 = 1; -b193: if (!v145) goto b149; - v146 = (u)zmkirfold; - v147 = vic; - v148 = vo; - v149 = 0; - v150 = ((u(*)())v146)(v147, v148, v149); - return v150; -b149: if (*(u*)(vo + 8) != va) goto b223; - if (*(u*)(vo + 16) != vb) goto b223; - v164 = 1; -b225: if (!v164) goto b219; +b168: if (!v145) goto b162; + return va; +b162: if (vkind != 12) goto b194; + v150 = 1; +b196: if (!v150) goto b152; + v151 = (u)zmkirfold; + v152 = vic; + v153 = vo; + v154 = 0; + v155 = ((u(*)())v151)(v152, v153, v154); + return v155; +b152: if (*(u*)(vo + 8) != va) goto b226; + if (*(u*)(vo + 16) != vb) goto b226; + v169 = 1; +b228: if (!v169) goto b222; return vo; -b219: v165 = (u)zmkirop; - v166 = vic; - v167 = vkind; - v168 = va; - v169 = vb; - v170 = ((u(*)())v165)(v166, v167, v168, v169); - vret = v170; +b222: v170 = (u)zmkirop; + v171 = vic; + v172 = vkind; + v173 = va; + v174 = vb; + v175 = ((u(*)())v170)(v171, v172, v173, v174); + vret = v175; *(u*)(vret + 64) = *(u*)(vo + 64); *(u*)(vret + 72) = *(u*)(vo + 72); *(u*)(vret + 80) = *(u*)(vo + 80); *(u*)(vret + 48) = *(u*)(vo + 48); *(u*)(vret + 24) = *(u*)(vo + 24); return vret; -b223: v164 = 0; - goto b225; -b191: if (vkind != 19) goto b194; +b226: v169 = 0; + goto b228; +b194: if (vkind != 19) goto b197; + v150 = 1; + goto b196; +b197: v150 = 0; + goto b196; +b166: if (vkind != 13) goto b171; + v146 = 1; +b173: if (!v146) goto b169; v145 = 1; - goto b193; -b194: v145 = 0; - goto b193; -b163: if (vkind != 13) goto b168; - v141 = 1; -b170: if (!v141) goto b166; - v140 = 1; - goto b165; -b166: v140 = 0; - goto b165; -b168: if (vkind != 14) goto b173; - v142 = 1; -b175: if (!v142) goto b171; - v141 = 1; - goto b170; -b171: v141 = 0; - goto b170; -b173: if (vkind != 20) goto b178; - v143 = 1; -b180: if (!v143) goto b176; - v142 = 1; - goto b175; -b176: v142 = 0; - goto b175; -b178: if (vkind != 17) goto b183; - v144 = 1; -b185: if (!v144) goto b181; - v143 = 1; - goto b180; -b181: v143 = 0; - goto b180; -b183: if (vkind != 18) goto b186; - v144 = 1; - goto b185; -b186: v144 = 0; - goto b185; -b158: if (vn != 1) goto b197; - if (vkind != 15) goto b202; - v151 = 1; -b204: if (!v151) goto b149; + goto b168; +b169: v145 = 0; + goto b168; +b171: if (vkind != 14) goto b176; + v147 = 1; +b178: if (!v147) goto b174; + v146 = 1; + goto b173; +b174: v146 = 0; + goto b173; +b176: if (vkind != 20) goto b181; + v148 = 1; +b183: if (!v148) goto b179; + v147 = 1; + goto b178; +b179: v147 = 0; + goto b178; +b181: if (vkind != 17) goto b186; + v149 = 1; +b188: if (!v149) goto b184; + v148 = 1; + goto b183; +b184: v148 = 0; + goto b183; +b186: if (vkind != 18) goto b189; + v149 = 1; + goto b188; +b189: v149 = 0; + goto b188; +b161: if (vn != 1) goto b200; + if (vkind != 15) goto b205; + v156 = 1; +b207: if (!v156) goto b152; return va; -b202: if (vkind != 19) goto b205; - v151 = 1; - goto b204; -b205: v151 = 0; - goto b204; -b197: if (vn != -1UL) goto b149; - if (vkind != 19) goto b208; - v152 = (u)zmkirop; - v153 = vic; - v154 = 9; - v155 = va; - v156 = 0; - v157 = ((u(*)())v152)(v153, v154, v155, v156); - vret = v157; +b205: if (vkind != 19) goto b208; + v156 = 1; + goto b207; +b208: v156 = 0; + goto b207; +b200: if (vn != -1UL) goto b152; + if (vkind != 19) goto b211; + v157 = (u)zmkirop; + v158 = vic; + v159 = 9; + v160 = va; + v161 = 0; + v162 = ((u(*)())v157)(v158, v159, v160, v161); + vret = v162; *(u*)(vret + 64) = *(u*)(vo + 64); *(u*)(vret + 72) = *(u*)(vo + 72); *(u*)(vret + 80) = *(u*)(vo + 80); return vret; -b208: if (vkind != 14) goto b212; - v158 = (u)zmkirop; - v159 = vic; - v160 = 10; - v161 = va; - v162 = 0; - v163 = ((u(*)())v158)(v159, v160, v161, v162); - vret = v163; +b211: if (vkind != 14) goto b215; + v163 = (u)zmkirop; + v164 = vic; + v165 = 10; + v166 = va; + v167 = 0; + v168 = ((u(*)())v163)(v164, v165, v166, v167); + vret = v168; *(u*)(vret + 64) = *(u*)(vo + 64); *(u*)(vret + 72) = *(u*)(vo + 72); *(u*)(vret + 80) = *(u*)(vo + 80); return vret; -b212: if (vkind != 12) goto b149; +b215: if (vkind != 12) goto b152; return va; -b153: v139 = 0; - goto b155; -b116: if (vkind != 19) goto b121; - v120 = 1; -b123: if (!v120) goto b119; - v119 = 1; - goto b118; -b119: v119 = 0; - goto b118; -b121: if (vkind != 17) goto b126; - v121 = 1; -b128: if (!v121) goto b124; - v120 = 1; - goto b123; -b124: v120 = 0; - goto b123; -b126: if (vkind != 18) goto b129; - v121 = 1; - goto b128; -b129: v121 = 0; - goto b128; -b99: if (vkind != 13) goto b104; - v112 = 1; -b106: if (!v112) goto b102; - v111 = 1; - goto b101; -b102: v111 = 0; - goto b101; -b104: if (vkind != 14) goto b107; - v112 = 1; - goto b106; -b107: v112 = 0; - goto b106; -b94: if (vn != 1) goto b132; - if (vkind != 19) goto b85; +b156: v144 = 0; + goto b158; +b119: if (vkind != 19) goto b124; + v125 = 1; +b126: if (!v125) goto b122; + v124 = 1; + goto b121; +b122: v124 = 0; + goto b121; +b124: if (vkind != 17) goto b129; + v126 = 1; +b131: if (!v126) goto b127; + v125 = 1; + goto b126; +b127: v125 = 0; + goto b126; +b129: if (vkind != 18) goto b132; + v126 = 1; + goto b131; +b132: v126 = 0; + goto b131; +b102: if (vkind != 13) goto b107; + v117 = 1; +b109: if (!v117) goto b105; + v116 = 1; + goto b104; +b105: v116 = 0; + goto b104; +b107: if (vkind != 14) goto b110; + v117 = 1; + goto b109; +b110: v117 = 0; + goto b109; +b97: if (vn != 1) goto b135; + if (vkind != 19) goto b88; return vb; -b132: if (vn != -1UL) goto b85; - if (vkind != 19) goto b138; - v127 = (u)zmkirop; - v128 = vic; - v129 = 9; - v130 = vb; - v131 = 0; - v132 = ((u(*)())v127)(v128, v129, v130, v131); - vret = v132; +b135: if (vn != -1UL) goto b88; + if (vkind != 19) goto b141; + v132 = (u)zmkirop; + v133 = vic; + v134 = 9; + v135 = vb; + v136 = 0; + v137 = ((u(*)())v132)(v133, v134, v135, v136); + vret = v137; *(u*)(vret + 64) = *(u*)(vo + 64); *(u*)(vret + 72) = *(u*)(vo + 72); *(u*)(vret + 80) = *(u*)(vo + 80); return vret; -b138: if (vkind != 14) goto b142; - v133 = (u)zmkirop; - v134 = vic; - v135 = 10; - v136 = vb; - v137 = 0; - v138 = ((u(*)())v133)(v134, v135, v136, v137); - vret = v138; +b141: if (vkind != 14) goto b145; + v138 = (u)zmkirop; + v139 = vic; + v140 = 10; + v141 = vb; + v142 = 0; + v143 = ((u(*)())v138)(v139, v140, v141, v142); + vret = v143; *(u*)(vret + 64) = *(u*)(vo + 64); *(u*)(vret + 72) = *(u*)(vo + 72); *(u*)(vret + 80) = *(u*)(vo + 80); return vret; -b142: if (vkind != 12) goto b85; +b145: if (vkind != 12) goto b88; return vb; -b89: v110 = 0; - goto b91; +b92: v115 = 0; + goto b94; b18: if (vkind != 9) goto b23; v23 = (u)zmkirfold; v24 = vic; @@ -19552,104 +19557,111 @@ b28: if (vkind != 11) goto b41; v38 = *(u*)(va + 24) + *(u*)(vb + 24); v39 = ((u(*)())v35)(v36, v37, v38); return v39; -b41: if (vkind != 13) goto b44; +b41: if (vkind != 12) goto b44; v40 = (u)zmkirfold; v41 = vic; v42 = vo; - v43 = *(u*)(va + 24) | *(u*)(vb + 24); + v43 = *(u*)(va + 24) & *(u*)(vb + 24); v44 = ((u(*)())v40)(v41, v42, v43); return v44; -b44: if (vkind != 14) goto b47; +b44: if (vkind != 13) goto b47; v45 = (u)zmkirfold; v46 = vic; v47 = vo; - v48 = *(u*)(va + 24) ^ *(u*)(vb + 24); + v48 = *(u*)(va + 24) | *(u*)(vb + 24); v49 = ((u(*)())v45)(v46, v47, v48); return v49; -b47: if (vkind != 15) goto b50; +b47: if (vkind != 14) goto b50; v50 = (u)zmkirfold; v51 = vic; v52 = vo; - v53 = (u)((s)*(u*)(va + 24) / (s)*(u*)(vb + 24)); + v53 = *(u*)(va + 24) ^ *(u*)(vb + 24); v54 = ((u(*)())v50)(v51, v52, v53); return v54; -b50: if (vkind != 16) goto b53; +b50: if (vkind != 15) goto b53; v55 = (u)zmkirfold; v56 = vic; v57 = vo; - v58 = (u)((s)*(u*)(va + 24) % (s)*(u*)(vb + 24)); + v58 = (u)((s)*(u*)(va + 24) / (s)*(u*)(vb + 24)); v59 = ((u(*)())v55)(v56, v57, v58); return v59; -b53: if (vkind != 17) goto b56; +b53: if (vkind != 16) goto b56; v60 = (u)zmkirfold; v61 = vic; v62 = vo; - v63 = *(u*)(va + 24) << *(u*)(vb + 24); + v63 = (u)((s)*(u*)(va + 24) % (s)*(u*)(vb + 24)); v64 = ((u(*)())v60)(v61, v62, v63); return v64; -b56: if (vkind != 18) goto b59; +b56: if (vkind != 17) goto b59; v65 = (u)zmkirfold; v66 = vic; v67 = vo; - v68 = *(u*)(va + 24) >> *(u*)(vb + 24); + v68 = *(u*)(va + 24) << *(u*)(vb + 24); v69 = ((u(*)())v65)(v66, v67, v68); return v69; -b59: if (vkind != 19) goto b62; +b59: if (vkind != 18) goto b62; v70 = (u)zmkirfold; v71 = vic; v72 = vo; - v73 = *(u*)(va + 24) * *(u*)(vb + 24); + v73 = *(u*)(va + 24) >> *(u*)(vb + 24); v74 = ((u(*)())v70)(v71, v72, v73); return v74; -b62: if (vkind != 20) goto b65; +b62: if (vkind != 19) goto b65; v75 = (u)zmkirfold; v76 = vic; v77 = vo; - v78 = *(u*)(va + 24) - *(u*)(vb + 24); + v78 = *(u*)(va + 24) * *(u*)(vb + 24); v79 = ((u(*)())v75)(v76, v77, v78); return v79; -b65: if (vkind != 21) goto b68; +b65: if (vkind != 20) goto b68; v80 = (u)zmkirfold; v81 = vic; v82 = vo; - v83 = (u)(*(u*)(va + 24) == *(u*)(vb + 24)); + v83 = *(u*)(va + 24) - *(u*)(vb + 24); v84 = ((u(*)())v80)(v81, v82, v83); return v84; -b68: if (vkind != 22) goto b71; +b68: if (vkind != 21) goto b71; v85 = (u)zmkirfold; v86 = vic; v87 = vo; - v88 = (u)(*(u*)(va + 24) != *(u*)(vb + 24)); + v88 = (u)(*(u*)(va + 24) == *(u*)(vb + 24)); v89 = ((u(*)())v85)(v86, v87, v88); return v89; -b71: if (vkind != 23) goto b74; +b71: if (vkind != 22) goto b74; v90 = (u)zmkirfold; v91 = vic; v92 = vo; - v93 = (u)((s)*(u*)(va + 24) > (s)*(u*)(vb + 24)); + v93 = (u)(*(u*)(va + 24) != *(u*)(vb + 24)); v94 = ((u(*)())v90)(v91, v92, v93); return v94; -b74: if (vkind != 24) goto b77; +b74: if (vkind != 23) goto b77; v95 = (u)zmkirfold; v96 = vic; v97 = vo; - v98 = (u)((s)*(u*)(va + 24) >= (s)*(u*)(vb + 24)); + v98 = (u)((s)*(u*)(va + 24) > (s)*(u*)(vb + 24)); v99 = ((u(*)())v95)(v96, v97, v98); return v99; -b77: if (vkind != 25) goto b80; +b77: if (vkind != 24) goto b80; v100 = (u)zmkirfold; v101 = vic; v102 = vo; - v103 = (u)((s)*(u*)(va + 24) < (s)*(u*)(vb + 24)); + v103 = (u)((s)*(u*)(va + 24) >= (s)*(u*)(vb + 24)); v104 = ((u(*)())v100)(v101, v102, v103); return v104; -b80: if (vkind != 26) goto b1; +b80: if (vkind != 25) goto b83; v105 = (u)zmkirfold; v106 = vic; v107 = vo; - v108 = (u)((s)*(u*)(va + 24) <= (s)*(u*)(vb + 24)); + v108 = (u)((s)*(u*)(va + 24) < (s)*(u*)(vb + 24)); v109 = ((u(*)())v105)(v106, v107, v108); return v109; +b83: if (vkind != 26) goto b1; + v110 = (u)zmkirfold; + v111 = vic; + v112 = vo; + v113 = (u)((s)*(u*)(va + 24) <= (s)*(u*)(vb + 24)); + v114 = ((u(*)())v110)(v111, v112, v113); + return v114; b32: if (*(u*)vb == 3) goto b38; v33 = 1; goto b34; diff --git a/ir.om b/ir.om @@ -2256,6 +2256,8 @@ func irexpr_fold(ic: *irfunc, o: *irop): *irop { // Simplify binary operations if kind == IOP_ADD { return mkirfold(ic, o, a.n + b.n); + } else if kind == IOP_AND { + return mkirfold(ic, o, a.n & b.n); } else if kind == IOP_OR { return mkirfold(ic, o, a.n | b.n); } else if kind == IOP_XOR {