内联小函数。豫
yuyan · 276 行 · 15016 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
寻观「标准库」之书。
寻观「编译器核心」之「网页汇编核心」之「模块结构」之书。
寻观「裸机后端」之「降级公用」之书。
「:文言:小叶函数之内联:降级之前,于整数网页汇编之层,凡调用无调用之小函数(指令至多四十,一结果)者,展其体于调用之处:实参依次弹入新局部,被调者之余局部补零,体包于一结果之块,局部之号整体平移,返回化为跳出此块(依当下之嵌套深度);体内原有之跳转深度不变,盖函数之级即此块也。可信之函数(号不小于导出“预编起号”者)与执行器之函数不相内联,免执行器之码失其界检。局部总数逾上限则不内联。执行器之小助函数(栈槽址、位图之算、且、爻整之类)调用极频,其序言与尾声之费甚于其体。汉语:小叶函数内联:降级之前,在整数 Wasm 层面,把对“不再调用其他函数、指令不超过 40 条、有 1 个结果”的函数的调用展开成函数体:实参依次弹进新分配的局部变量,被调函数自己的局部变量补零,函数体包进一个带 1 个结果的块,局部变量号整体平移,返回改成跳出这个块(按当前嵌套深度);函数体里原有的跳转深度不用改,因为函数级的块就是这个块。可信函数(函数号不小于导出“预编起号”的预编函数)与执行器函数之间不互相内联,免得执行器代码失去边界检查。局部变量总数会超过上限时不内联。执行器的小助手函数(栈槽址、位图计算、且、爻整等)调用极其频繁,序言与尾声的开销比函数体还大。:」
「内联指令上限」者「四零」也。
「内列转数组」乃
承「甲」而
化「甲」而
化(「列」于「甲」)而
(「数组引用类」于「甲」)
也。
「内列转数组」者受「甲」而会「初」而会「项」而
虑「表」者
「新数组引用」授以「甲」
于「初」
于(若「大于」于(「长度」授以「甲」于「项」)于「零」则「长度」授以「甲」于「项」否则「一」)而
递归虑「填」其化(「列」于「甲」)而化「整数」而「有」者会「余」而会「位」而
鉴「余」而
有「罄」则「元」
或有「缀」于「首」于「尾」则
((「写数组引用」授以「甲」于「表」于「位」于「首」);
「填」于「尾」于(「加」于「位」于「一」))
而
虑「无」者「填」于「项」于「零」而
「表」
也。
「是调用令」乃化「网页指令」而「爻」也。
「是调用令」者会「令」而
鉴「令」而
有「网页调用」于「号」则「阳」
或有「其他」则「阴」
也。
「:文言:叶函可内联否:无调用,指令至多上限,结果为一。汉语:函数能否内联:函数体里没有调用、指令条数不超过上限、签名的结果个数为 1。:」
「叶函可内联」乃化(「数组引用类」于「网页签名」)而化「网页函数」而「爻」也。
「叶函可内联」者会「签们」而会「函」而
虑「签」者「读数组引用」授以「网页签名」于「签们」于(「函」中「零」)而
「且」
于(「等于」于(「签」中「一」)于「一」)
于(「且」
于(「不大于」于(「长度」授以「网页指令」于(「函」中「二」))于「内联指令上限」)
于(「非」于(「存在吗」授以「网页指令」于「是调用令」于(「函」中「二」))))
也。
「:文言:转写被调者之体:局部平移,返回化为跳出,逆序积之。深者,当下于被调体内之嵌套深度。汉语:改写被调函数体:局部变量号加上基数,返回改成跳到包裹块(深度为当前在函数体内的嵌套深度);结果按逆序累积。:」
「内联转体」乃
化「整数」而
化(「列」于「网页指令」)而
化「整数」而
化(「列」于「网页指令」)而
(「列」于「网页指令」)
也。
「内联转体」者会「基」而会「令们」而会「深」而会「逆」而
鉴「令们」而
有「罄」则「逆」
或有「缀」于「令」于「余」则
虑「新深」者
(
鉴「令」而
有「网页块」于「数」则
「加」于「深」于「一」
或有「网页循环」于「数」则
「加」于「深」于「一」
或有「网页条件」于「数」则
「加」于「深」于「一」
或有「网页结束」则
「减」于「深」于「一」
或有「其他」则「深」
)
而
虑「新令」者
(
鉴「令」而
有「网页返回」则「网页跳转」于「深」
或有「网页局部读取」于「号」则
「网页局部读取」
于(「加」于「基」于「号」)
或有「网页局部写入」于「号」则
「网页局部写入」
于(「加」于「基」于「号」)
或有「网页局部暂存」于「号」则
「网页局部暂存」于(「加」于「基」于「号」)
或有「其他」则「令」
)
而
「内联转体」于「基」于「余」于「新深」于(「缀」于「新令」于「逆」)
也。
「:文言:展一调用:实参逆序弹入局部,余局部补零,体包于块。汉语:展开一次调用:实参按逆序写进新局部(栈顶是最后一个参数),其余局部清零,函数体包进一个带 1 个结果的块。:」
「内联展开」乃
化「整数」而
化「整数」而
化「整数」而
化「网页函数」而
(「列」于「网页指令」)
也。
「内联展开」者会「基」而会「参数数」而会「局数」而会「函」而
虑「弹参」者
「态射」授以「整数」授以「网页指令」
于(「整数范围」于「零」于「参数数」)
于(会「序」而「网页局部写入」于(「加」于「基」于(「减」于(「减」于「参数数」于「一」)于「序」)))
而
虑「清局」者
「串联」授以「网页指令」
于(「态射」授以「整数」授以(「列」于「网页指令」)
于(「整数范围」于「零」于「局数」)
于(会「序」而「列」【「网页常量」于「零」,「网页局部写入」于(「加」于「基」于(「加」于「参数数」于「序」))】))
而
「串联」授以「网页指令」
于(「列」【
「弹参」,
「清局」,
「列」【「网页块」于「一」】,
「反转」授以「网页指令」于(「内联转体」于「基」于(「函」中「二」)于「零」于(「罄」授以「网页指令」)),
「列」【「网页结束」】
】)
也。
「:文言:改写一函数之体:遇可内联之调用则展之。诸展开之局部同居一段(自基起),盖展开之体用毕即死,前后不相叠,各于其首自清其局部;段长取诸展开所需之最大。逾上限者不展。汉语:改写一个函数体:遇到可以内联的调用就展开。所有展开共用同一段新局部(从基数起):展开体用完即死,前后不会重叠,每次展开开头自己把用到的局部清零;段长取各次展开所需的最大值,免得序言清零的局部越积越多。局部总数会超过上限的调用不展开。返回(新指令列,段长)。:」
「内联改写段」乃
化(「数组引用类」于「网页签名」)而
化(「数组引用类」于「网页函数」)而
化(「数组引用类」于「爻」)而
化「整数」而
化「整数」而
化「爻」而
化「整数」而
化「整数」而
化「整数」而
化(「列」于「网页指令」)而
化(「列」于「网页指令」)而
((「列」于「网页指令」)合「整数」)
也。
「内联改写段」者
会「签们」而
会「函们」而
会「可们」而
会「导入数」而
会「信任起」而
会「己信」而
会「上限」而
会「基」而
会「最大」而
会「令们」而
会「逆」而
鉴「令们」而
有「罄」则(「反转」授以「网页指令」于「逆」)与「最大」
或有「缀」于「令」于「余」则
鉴「令」而
有「网页调用」于「号」则
若「且」
于(「不小于」于「号」于「导入数」)
于(「且」
于(「读数组引用」授以「爻」于「可们」于「号」)
于(「等于」于(若「己信」则「一」否则「零」)于(
若「不小于」于「号」于「信任起」则「一」否则「零」)))则
虑「函」者
「读数组引用」授以「网页函数」
于「函们」
于(「减」于「号」于「导入数」)
而
虑「签」者
「读数组引用」授以「网页签名」于「签们」于(「函」中「零」)
而
虑「需」者「加」于(「签」中「零」)于(「函」中「一」)
而
若「大于」于(「加」于「基」于「需」)于「上限」则
「内联改写段」
于「签们」
于「函们」
于「可们」
于「导入数」
于「信任起」
于「己信」
于「上限」于「基」于「最大」于「余」
于(「缀」于「令」于「逆」)
否则
「内联改写段」
于「签们」
于「函们」
于「可们」
于「导入数」
于「信任起」
于「己信」
于「上限」
于「基」
于(若「大于」于「需」于「最大」则「需」否则「最大」)
于「余」
于(「附加」授以「网页指令」
于(「反转」授以「网页指令」
于(「内联展开」于「基」于(「签」中「零」)于(「函」中「一」)于「函」))
于「逆」)
否则
「内联改写段」
于「签们」
于「函们」
于「可们」
于「导入数」
于「信任起」
于「己信」
于「上限」
于「基」于「最大」于「余」
于(「缀」于「令」于「逆」)
或有「其他」则
「内联改写段」
于「签们」
于「函们」
于「可们」
于「导入数」
于「信任起」
于「己信」
于「上限」于「基」于「最大」于「余」
于(「缀」于「令」于「逆」)
也。
「内联信任起」乃化(「列」于「网页导出」)而「整数」也。
「内联信任起」者会「导出们」而
鉴「导出们」而
有「罄」则「二一四七四八三六四七」
或有「缀」于「首」于「尾」则
若「串相等」于(「首」中「零」)于『预编起号』则「首」中「一」否则「内联信任起」于「尾」
也。
「:文言:内联小叶函数于一模块。上限者,每函数局部(含参数)之至多。汉语:对整个模块做小叶函数内联。上限是每个函数局部变量(含参数)的最多个数(降级器的栈帧槽上限)。返回新模块(签名、导入、导出不变)。:」
「内联小叶函数」乃化「网页模块」而化「整数」而「网页模块」也。
「内联小叶函数」者会「模」而会「上限」而
虑「签们」者
「内列转数组」授以「网页签名」于(「零」与「零」)于(「模」中「零」)而
虑「导入数」者「长度」授以「网页导入」于(「模」中「一」)而
虑「函列」者「模」中「二」而
虑「函们」者
「内列转数组」授以「网页函数」
于(「零」与「零」与(「罄」授以「网页指令」))于「函列」而
虑「函数数」者「长度」授以「网页函数」于「函列」而
虑「可们」者
「新数组引用」授以「爻」
于「阴」
于(「加」于「导入数」于(「加」于「函数数」于「一」))而
虑「无」者
「态射序号」授以「网页函数」授以「有」
于(会「序」而会「函」而
「写数组引用」授以「爻」
于「可们」
于(「加」于「导入数」于「序」)
于(「叶函可内联」于「签们」于「函」))
于「函列」
而
虑「信任起」者「内联信任起」于(「模」中「三」)而
虑「新函们」者
「态射序号」授以「网页函数」授以「网页函数」
于(会「序」而会「函」而
虑「签」者
「读数组引用」授以「网页签名」于「签们」于(「函」中「零」)而
虑「基」者「加」于(「签」中「零」)于(「函」中「一」)而
虑「果」者
「内联改写段」
于「签们」
于「函们」
于「可们」
于「导入数」
于「信任起」
于(「不小于」于(「加」于「导入数」于「序」)于「信任起」)
于「上限」
于「基」
于「零」
于(「函」中「二」)
于(「罄」授以「网页指令」)
而
(「函」中「零」)与(「加」于(「函」中「一」)于(「果」中「一」))与(「果」中「零」))
于「函列」
而
(「模」中「零」)与(「模」中「一」)与「新函们」与(「模」中「三」)
也。