|
17 | 17 | [FREE_MEMORY_START] // [windex, rindex]
|
18 | 18 |
|
19 | 19 | 0x01 // [flag, windex, rindex]
|
20 |
| - FLAG_READ_BYTES32() // [windex, rindex] |
| 20 | + READ_FLAG() // [windex, rindex] |
21 | 21 | }
|
22 | 22 |
|
23 | 23 | #define macro ADDRESSES_NUM() = takes (0) returns (1) {
|
|
84 | 84 | // output stack: [num + 1]
|
85 | 85 | }
|
86 | 86 |
|
| 87 | +#define jumptable__packed FLAG_TABLE { |
| 88 | + FLAG_READ_BYTES32_0_BYTES |
| 89 | + FLAG_READ_BYTES32_1_BYTES |
| 90 | + FLAG_READ_BYTES32_2_BYTES |
| 91 | + FLAG_READ_BYTES32_3_BYTES |
| 92 | + FLAG_READ_BYTES32_4_BYTES |
| 93 | + FLAG_READ_BYTES32_5_BYTES |
| 94 | + FLAG_READ_BYTES32_6_BYTES |
| 95 | + FLAG_READ_BYTES32_7_BYTES |
| 96 | + FLAG_READ_BYTES32_8_BYTES |
| 97 | + FLAG_READ_BYTES32_9_BYTES |
| 98 | + FLAG_READ_BYTES32_10_BYTES |
| 99 | + FLAG_READ_BYTES32_11_BYTES |
| 100 | + FLAG_READ_BYTES32_12_BYTES |
| 101 | + FLAG_READ_BYTES32_13_BYTES |
| 102 | + FLAG_READ_BYTES32_14_BYTES |
| 103 | + FLAG_READ_BYTES32_15_BYTES |
| 104 | + FLAG_READ_BYTES32_16_BYTES |
| 105 | + FLAG_READ_BYTES32_17_BYTES |
| 106 | + FLAG_READ_BYTES32_18_BYTES |
| 107 | + FLAG_READ_BYTES32_19_BYTES |
| 108 | + FLAG_READ_BYTES32_20_BYTES |
| 109 | + FLAG_READ_BYTES32_21_BYTES |
| 110 | + FLAG_READ_BYTES32_22_BYTES |
| 111 | + FLAG_READ_BYTES32_23_BYTES |
| 112 | + FLAG_READ_BYTES32_24_BYTES |
| 113 | + FLAG_READ_BYTES32_25_BYTES |
| 114 | + FLAG_READ_BYTES32_26_BYTES |
| 115 | + FLAG_READ_BYTES32_27_BYTES |
| 116 | + FLAG_READ_BYTES32_28_BYTES |
| 117 | + FLAG_READ_BYTES32_29_BYTES |
| 118 | + FLAG_READ_BYTES32_30_BYTES |
| 119 | + FLAG_READ_BYTES32_31_BYTES |
| 120 | + FLAG_READ_BYTES32_32_BYTES |
| 121 | + JUMP_SAVE_ADDRESS // 0x00 |
| 122 | + JUMP_SAVE_BYTES32 // 0x01 |
| 123 | + JUMP_READ_ADDRESS_2 // 0x02 |
| 124 | + JUMP_READ_ADDRESS_3 // 0x03 |
| 125 | + JUMP_READ_ADDRESS_4 // 0x04 |
| 126 | + JUMP_READ_ADDRESS_5 // 0x05 |
| 127 | + JUMP_READ_BYTES32_2 // 0x06 |
| 128 | + JUMP_READ_BYTES32_3 // 0x07 |
| 129 | + JUMP_READ_BYTES32_4 // 0x08 |
| 130 | + JUMP_READ_BYTES32_5 // 0x09 |
| 131 | + JUMP_READ_N_BYTES // 0x0a |
| 132 | + JUMP_READ_POWER_OF_2 // 0x0b |
| 133 | +} |
| 134 | + |
| 135 | +#define macro READ_FLAG(nested_read_flag_jump) = takes (2) returns (2) { |
| 136 | + // input stack: [windex, rindex] |
| 137 | + |
| 138 | + dup2 // [rindex, windex, rindex] |
| 139 | + calldataload // [cdata[rindex], windex, rindex] |
| 140 | + 0x00 byte // [flag, windex, rindex] |
| 141 | + |
| 142 | + swap3 // [rindex, windex, flag] |
| 143 | + 0x01 add // [rindex + 1, windex, flag] |
| 144 | + swap3 // [flag, windex, rindex + 1] |
| 145 | + |
| 146 | + __tablesize(FLAG_TABLE) // [table_size, flag, windex, rindex + 1] |
| 147 | + __tablestart(FLAG_TABLE) // [table_start, table_size, flag, windex, rindex + 1] |
| 148 | + 0x00 // [0x00, table_start, table_size, flag, windex, rindex + 1] |
| 149 | + codecopy // [flag, windex, rindex + 1] |
| 150 | + |
| 151 | + dup1 // [flag, flag, windex, rindex + 1] |
| 152 | + 0x0b lt // [0x0b < flag, flag, windex, rindex + 1] |
| 153 | + default jumpi // [flag, windex, rindex + 1] |
| 154 | + |
| 155 | + dup1 // [flag, flag, windex, rindex + 1] |
| 156 | + mload 0xf0 shr // [dst, flag, windex, rindex + 1] |
| 157 | + jump // [flag, windex, rindex + 1] |
| 158 | + |
| 159 | + FLAG_READ_BYTES32_0_BYTES: |
| 160 | + READ_BYTES32() // [windex, rindex] |
| 161 | + jump end |
| 162 | + FLAG_READ_BYTES32_1_BYTES: |
| 163 | + READ_BYTES32() // [windex, rindex] |
| 164 | + jump end |
| 165 | + FLAG_READ_BYTES32_2_BYTES: |
| 166 | + READ_BYTES32() // [windex, rindex] |
| 167 | + jump end |
| 168 | + FLAG_READ_BYTES32_3_BYTES: |
| 169 | + READ_BYTES32() // [windex, rindex] |
| 170 | + jump end |
| 171 | + FLAG_READ_BYTES32_4_BYTES: |
| 172 | + READ_BYTES32() // [windex, rindex] |
| 173 | + jump end |
| 174 | + FLAG_READ_BYTES32_5_BYTES: |
| 175 | + READ_BYTES32() // [windex, rindex] |
| 176 | + jump end |
| 177 | + FLAG_READ_BYTES32_6_BYTES: |
| 178 | + READ_BYTES32() // [windex, rindex] |
| 179 | + jump end |
| 180 | + FLAG_READ_BYTES32_7_BYTES: |
| 181 | + READ_BYTES32() // [windex, rindex] |
| 182 | + jump end |
| 183 | + FLAG_READ_BYTES32_8_BYTES: |
| 184 | + READ_BYTES32() // [windex, rindex] |
| 185 | + jump end |
| 186 | + FLAG_READ_BYTES32_9_BYTES: |
| 187 | + READ_BYTES32() // [windex, rindex] |
| 188 | + jump end |
| 189 | + FLAG_READ_BYTES32_10_BYTES: |
| 190 | + READ_BYTES32() // [windex, rindex] |
| 191 | + jump end |
| 192 | + FLAG_READ_BYTES32_11_BYTES: |
| 193 | + READ_BYTES32() // [windex, rindex] |
| 194 | + jump end |
| 195 | + FLAG_READ_BYTES32_12_BYTES: |
| 196 | + READ_BYTES32() // [windex, rindex] |
| 197 | + jump end |
| 198 | + FLAG_READ_BYTES32_13_BYTES: |
| 199 | + READ_BYTES32() // [windex, rindex] |
| 200 | + jump end |
| 201 | + FLAG_READ_BYTES32_14_BYTES: |
| 202 | + READ_BYTES32() // [windex, rindex] |
| 203 | + jump end |
| 204 | + FLAG_READ_BYTES32_15_BYTES: |
| 205 | + READ_BYTES32() // [windex, rindex] |
| 206 | + jump end |
| 207 | + FLAG_READ_BYTES32_16_BYTES: |
| 208 | + READ_BYTES32() // [windex, rindex] |
| 209 | + jump end |
| 210 | + FLAG_READ_BYTES32_17_BYTES: |
| 211 | + READ_BYTES32() // [windex, rindex] |
| 212 | + jump end |
| 213 | + FLAG_READ_BYTES32_18_BYTES: |
| 214 | + READ_BYTES32() // [windex, rindex] |
| 215 | + jump end |
| 216 | + FLAG_READ_BYTES32_19_BYTES: |
| 217 | + READ_BYTES32() // [windex, rindex] |
| 218 | + jump end |
| 219 | + FLAG_READ_BYTES32_20_BYTES: |
| 220 | + READ_BYTES32() // [windex, rindex] |
| 221 | + jump end |
| 222 | + FLAG_READ_BYTES32_21_BYTES: |
| 223 | + READ_BYTES32() // [windex, rindex] |
| 224 | + jump end |
| 225 | + FLAG_READ_BYTES32_22_BYTES: |
| 226 | + READ_BYTES32() // [windex, rindex] |
| 227 | + jump end |
| 228 | + FLAG_READ_BYTES32_23_BYTES: |
| 229 | + READ_BYTES32() // [windex, rindex] |
| 230 | + jump end |
| 231 | + FLAG_READ_BYTES32_24_BYTES: |
| 232 | + READ_BYTES32() // [windex, rindex] |
| 233 | + jump end |
| 234 | + FLAG_READ_BYTES32_25_BYTES: |
| 235 | + READ_BYTES32() // [windex, rindex] |
| 236 | + jump end |
| 237 | + FLAG_READ_BYTES32_26_BYTES: |
| 238 | + READ_BYTES32() // [windex, rindex] |
| 239 | + jump end |
| 240 | + FLAG_READ_BYTES32_27_BYTES: |
| 241 | + READ_BYTES32() // [windex, rindex] |
| 242 | + jump end |
| 243 | + FLAG_READ_BYTES32_28_BYTES: |
| 244 | + READ_BYTES32() // [windex, rindex] |
| 245 | + jump end |
| 246 | + FLAG_READ_BYTES32_29_BYTES: |
| 247 | + READ_BYTES32() // [windex, rindex] |
| 248 | + jump end |
| 249 | + FLAG_READ_BYTES32_30_BYTES: |
| 250 | + READ_BYTES32() // [windex, rindex] |
| 251 | + jump end |
| 252 | + FLAG_READ_BYTES32_31_BYTES: |
| 253 | + READ_BYTES32() // [windex, rindex] |
| 254 | + jump end |
| 255 | + FLAG_READ_BYTES32_32_BYTES: |
| 256 | + READ_BYTES32() // [windex, rindex] |
| 257 | + jump end |
| 258 | + |
| 259 | + JUMP_SAVE_ADDRESS: |
| 260 | + SAVE_ADDRESS() // [windex, rindex] |
| 261 | + jump end |
| 262 | + |
| 263 | + JUMP_SAVE_BYTES32: |
| 264 | + SAVE_BYTES32() // [windex, rindex] |
| 265 | + jump end |
| 266 | + |
| 267 | + JUMP_READ_ADDRESS_2: |
| 268 | + JUMP_READ_ADDRESS_3: |
| 269 | + JUMP_READ_ADDRESS_4: |
| 270 | + JUMP_READ_ADDRESS_5: |
| 271 | + READ_ADDRESS_STORAGE() // [windex, rindex] |
| 272 | + jump end |
| 273 | + |
| 274 | + JUMP_READ_BYTES32_2: |
| 275 | + JUMP_READ_BYTES32_3: |
| 276 | + JUMP_READ_BYTES32_4: |
| 277 | + JUMP_READ_BYTES32_5: |
| 278 | + READ_BYTES32_STORAGE() // [windex, rindex] |
| 279 | + jump end |
| 280 | + |
| 281 | + JUMP_READ_N_BYTES: |
| 282 | + READ_N_BYTES() // [windex, rindex] |
| 283 | + jump end |
| 284 | + |
| 285 | + JUMP_READ_POWER_OF_2: |
| 286 | + READ_POWER_OF_2() // [windex, rindex] |
| 287 | + jump end |
| 288 | + |
| 289 | + default: |
| 290 | + |
| 291 | + end: |
| 292 | +} |
| 293 | + |
87 | 294 | #define test TEST_NUMS() = {
|
88 | 295 | ADDRESSES_NUM() // [num]
|
89 | 296 | 0x00 eq ASSERT() // []
|
|
116 | 323 | 0x01 eq ASSERT() // []
|
117 | 324 | }
|
118 | 325 |
|
119 |
| -#define macro FLAG_READ_BYTES32() = takes (3) returns (2) { |
| 326 | +#define macro READ_BYTES32() = takes (3) returns (2) { |
120 | 327 | // input stack: [flag, windex, rindex, initial]
|
121 | 328 |
|
122 | 329 | 0x20 // [0x20, flag, windex, rindex, initial]
|
|
145 | 352 |
|
146 | 353 | 0x02 // [flag, windex, rindex]
|
147 | 354 |
|
148 |
| - FLAG_READ_BYTES32() // [windex, rindex] |
| 355 | + READ_BYTES32() // [windex, rindex] |
149 | 356 |
|
150 | 357 | 0x22 eq ASSERT() // [rindex]
|
151 | 358 | 0x03 eq ASSERT() // []
|
|
158 | 365 | eq ASSERT() // []
|
159 | 366 | }
|
160 | 367 |
|
161 |
| -#define macro FLAG_SAVE_ADDRESS() = takes (3) returns (2) { |
| 368 | +#define macro SAVE_ADDRESS() = takes (3) returns (2) { |
162 | 369 | // input stack: [flag, windex, rindex]
|
163 | 370 |
|
164 | 371 | pop // [windex, rindex]
|
|
191 | 398 |
|
192 | 399 | // 0xd10eb37ef5838bb835ea71bbd4053daf8de7bd8e
|
193 | 400 | #[calldata("0xb2d10eb37ef5838bb835ea71bbd4053daf8de7bd8ecdf638451a2bc966a145a8"), value(0x01)]
|
194 |
| -#define test TEST_FLAG_SAVE_ADDRESS() = { |
| 401 | +#define test TEST_SAVE_ADDRESS() = { |
195 | 402 | 0x01 // [rindex]
|
196 | 403 | 0x20 // [windex, rindex]
|
197 | 404 |
|
198 | 405 | 0x02 // [flag, windex, rindex]
|
199 | 406 |
|
200 |
| - FLAG_SAVE_ADDRESS() // [windex, rindex] |
| 407 | + SAVE_ADDRESS() // [windex, rindex] |
201 | 408 |
|
202 | 409 | 0x40 eq ASSERT() // [rindex]
|
203 | 410 | 0x21 eq ASSERT() // []
|
|
217 | 424 | ADDRESSES_NUM() 0x01 eq ASSERT() // []
|
218 | 425 | }
|
219 | 426 |
|
220 |
| -#define macro FLAG_SAVE_BYTES32() = takes (3) returns (2) { |
| 427 | +#define macro SAVE_BYTES32() = takes (3) returns (2) { |
221 | 428 | // input stack: [flag, windex, rindex]
|
222 | 429 |
|
223 | 430 | pop // [windex, rindex]
|
|
245 | 452 | }
|
246 | 453 |
|
247 | 454 | #[calldata("0xb2d10eb37ef5838bb835ea71bbd4053daf8de7bd8ecdf638451a2bc966a145a899"), value(0x01)]
|
248 |
| -#define test TEST_FLAG_SAVE_BYTES32() = { |
| 455 | +#define test TEST_SAVE_BYTES32() = { |
249 | 456 | 0x01 // [rindex]
|
250 | 457 | 0x20 // [windex, rindex]
|
251 | 458 |
|
252 | 459 | 0x02 // [flag, windex, rindex]
|
253 | 460 |
|
254 |
| - FLAG_SAVE_BYTES32() // [windex, rindex] |
| 461 | + SAVE_BYTES32() // [windex, rindex] |
255 | 462 |
|
256 | 463 | 0x40 eq ASSERT() // []
|
257 | 464 | 0x21 eq ASSERT() // [rindex]
|
|
272 | 479 | }
|
273 | 480 |
|
274 | 481 | // Reads a stored bytes32 using a 2 to 5 bytes pointer index
|
275 |
| -#define macro READ_BYTES32() = takes (3) returns (2) { |
| 482 | +#define macro READ_BYTES32_STORAGE() = takes (3) returns (2) { |
276 | 483 | READ_STORAGE(READ_BYTES32_X_BYTES_FLAG_OFFSET, BYTES32_SMV, shl)
|
277 | 484 | }
|
278 | 485 |
|
279 |
| -#define macro READ_ADDRESS() = takes (3) returns (2) { |
| 486 | +#define macro READ_ADDRESS_STORAGE() = takes (3) returns (2) { |
280 | 487 | READ_STORAGE(READ_ADDRESS_X_BYTES_FLAG_OFFSET, ADDRESS_SMV, add)
|
281 | 488 | }
|
282 | 489 |
|
|
320 | 527 | 0x00 // [windex, rindex]
|
321 | 528 | [FLAG_READ_BYTES32_2_BYTES] // [flag, windex, rindex]
|
322 | 529 |
|
323 |
| - READ_BYTES32() // [windex, rindex] |
| 530 | + READ_BYTES32_STORAGE() // [windex, rindex] |
324 | 531 |
|
325 | 532 | 0x20 eq ASSERT() // [rindex]
|
326 | 533 | 0x02 eq ASSERT() // []
|
|
332 | 539 | 0x20 // [windex, rindex]
|
333 | 540 | [FLAG_READ_BYTES32_2_BYTES] 0x02 add // [flag, windex, rindex]
|
334 | 541 |
|
335 |
| - READ_BYTES32() // [windex, rindex] |
| 542 | + READ_BYTES32_STORAGE() // [windex, rindex] |
336 | 543 |
|
337 | 544 | 0x40 eq ASSERT() // [rindex]
|
338 | 545 | 0x06 eq ASSERT() // []
|
|
345 | 552 |
|
346 | 553 | [FLAG_READ_BYTES32_2_BYTES] 0x03 add // [flag, windex, rindex]
|
347 | 554 |
|
348 |
| - READ_BYTES32() // [windex, rindex] |
| 555 | + READ_BYTES32_STORAGE() // [windex, rindex] |
349 | 556 |
|
350 | 557 | 0x30 eq ASSERT() // [rindex]
|
351 | 558 | 0x0b eq ASSERT() // []
|
|
371 | 578 | 0x00 // [windex, rindex]
|
372 | 579 | [FLAG_READ_ADDRESS_2_BYTES] // [flag, windex, rindex]
|
373 | 580 |
|
374 |
| - READ_ADDRESS() // [windex, rindex] |
| 581 | + READ_ADDRESS_STORAGE() // [windex, rindex] |
375 | 582 |
|
376 | 583 | 0x20 eq ASSERT() // [rindex]
|
377 | 584 | 0x02 eq ASSERT() // []
|
|
383 | 590 | 0x20 // [windex, rindex]
|
384 | 591 | [FLAG_READ_ADDRESS_2_BYTES] 0x02 add // [flag, windex, rindex]
|
385 | 592 |
|
386 |
| - READ_ADDRESS() // [windex, rindex] |
| 593 | + READ_ADDRESS_STORAGE() // [windex, rindex] |
387 | 594 |
|
388 | 595 | 0x40 eq ASSERT() // [rindex]
|
389 | 596 | 0x06 eq ASSERT() // []
|
|
396 | 603 |
|
397 | 604 | [FLAG_READ_ADDRESS_2_BYTES] 0x03 add // [flag, windex, rindex]
|
398 | 605 |
|
399 |
| - READ_ADDRESS() // [windex, rindex] |
| 606 | + READ_ADDRESS_STORAGE() // [windex, rindex] |
400 | 607 |
|
401 | 608 | 0x30 eq ASSERT() // [rindex]
|
402 | 609 | 0x0b eq ASSERT() // []
|
|
0 commit comments