diff options
| -rw-r--r-- | src/buildvm_x86.dasc | 59 | ||||
| -rw-r--r-- | src/buildvm_x86.h | 22 |
2 files changed, 54 insertions, 27 deletions
diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index 58767c1e..65e9be1d 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc | |||
| @@ -19,10 +19,14 @@ | |||
| 19 | |// Fixed register assignments for the interpreter. | 19 | |// Fixed register assignments for the interpreter. |
| 20 | |// This is very fragile and has many dependencies. Caveat emptor. | 20 | |// This is very fragile and has many dependencies. Caveat emptor. |
| 21 | |.define BASE, edx // Not C callee-save, refetched anyway. | 21 | |.define BASE, edx // Not C callee-save, refetched anyway. |
| 22 | |.if not X64 or X64WIN | 22 | |.if not X64 |
| 23 | |.define KBASE, edi // Must be C callee-save. | 23 | |.define KBASE, edi // Must be C callee-save. |
| 24 | |.define KBASEa, KBASE | 24 | |.define KBASEa, KBASE |
| 25 | |.define PC, esi // Must be C callee-save. | 25 | |.define PC, esi // Must be C callee-save. |
| 26 | |.elif X64WIN | ||
| 27 | |.define KBASE, edi // Must be C callee-save. | ||
| 28 | |.define KBASEa, rdi | ||
| 29 | |.define PC, esi // Must be C callee-save. | ||
| 26 | |.else | 30 | |.else |
| 27 | |.define KBASE, r15d // Must be C callee-save. | 31 | |.define KBASE, r15d // Must be C callee-save. |
| 28 | |.define KBASEa, r15 | 32 | |.define KBASEa, r15 |
| @@ -136,7 +140,9 @@ | |||
| 136 | |.define FPARG1, qword [esp] | 140 | |.define FPARG1, qword [esp] |
| 137 | |// TMPQ overlaps TMP1/TMP2. ARG5/NRESULTS overlap TMP1/TMP2 (and TMPQ). | 141 | |// TMPQ overlaps TMP1/TMP2. ARG5/NRESULTS overlap TMP1/TMP2 (and TMPQ). |
| 138 | |.define TMPQ, qword [esp+aword*4] | 142 | |.define TMPQ, qword [esp+aword*4] |
| 143 | |.define TMP3, ARG4 | ||
| 139 | |.define ARG5, TMP1 | 144 | |.define ARG5, TMP1 |
| 145 | |.define TMPa, TMP1 | ||
| 140 | |.define NRESULTS, TMP2 | 146 | |.define NRESULTS, TMP2 |
| 141 | | | 147 | | |
| 142 | |// Arguments for vm_call and vm_pcall. | 148 | |// Arguments for vm_call and vm_pcall. |
| @@ -183,7 +189,9 @@ | |||
| 183 | |// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ). | 189 | |// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ). |
| 184 | |.define TMPQ, qword [rsp+aword*10] | 190 | |.define TMPQ, qword [rsp+aword*10] |
| 185 | |.define NRESULTS, TMP2 | 191 | |.define NRESULTS, TMP2 |
| 192 | |.define TMPa, ARG5 | ||
| 186 | |.define ARG5d, dword [rsp+aword*4] | 193 | |.define ARG5d, dword [rsp+aword*4] |
| 194 | |.define TMP3, ARG5d | ||
| 187 | | | 195 | | |
| 188 | |//----------------------------------------------------------------------- | 196 | |//----------------------------------------------------------------------- |
| 189 | |.else // x64/POSIX stack layout | 197 | |.else // x64/POSIX stack layout |
| @@ -205,7 +213,7 @@ | |||
| 205 | |.define SAVE_R2, aword [rsp+aword*6] | 213 | |.define SAVE_R2, aword [rsp+aword*6] |
| 206 | |.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves. | 214 | |.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves. |
| 207 | |.define SAVE_CFRAME, aword [rsp+aword*4] | 215 | |.define SAVE_CFRAME, aword [rsp+aword*4] |
| 208 | |.define UNUSED1, aword [rsp+aword*3] | 216 | |.define TMPa, aword [rsp+aword*3] |
| 209 | |//----- ^^^ awords above, vvv dwords below | 217 | |//----- ^^^ awords above, vvv dwords below |
| 210 | |.define SAVE_PC, dword [rsp+dword*5] | 218 | |.define SAVE_PC, dword [rsp+dword*5] |
| 211 | |.define SAVE_L, dword [rsp+dword*4] | 219 | |.define SAVE_L, dword [rsp+dword*4] |
| @@ -217,6 +225,7 @@ | |||
| 217 | | | 225 | | |
| 218 | |// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ). | 226 | |// TMPQ overlaps TMP1/TMP2. NRESULTS overlaps TMP2 (and TMPQ). |
| 219 | |.define TMPQ, qword [rsp] | 227 | |.define TMPQ, qword [rsp] |
| 228 | |.define TMP3, dword [rsp+aword*3] | ||
| 220 | |.define NRESULTS, TMP2 | 229 | |.define NRESULTS, TMP2 |
| 221 | | | 230 | | |
| 222 | |.endif | 231 | |.endif |
| @@ -900,9 +909,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 900 | | cvtsi2sd xmm0, RC | 909 | | cvtsi2sd xmm0, RC |
| 901 | | movsd TMPQ, xmm0 | 910 | | movsd TMPQ, xmm0 |
| 902 | } else { | 911 | } else { |
| 912 | |.if not X64 | ||
| 903 | | mov ARG4, RC | 913 | | mov ARG4, RC |
| 904 | | fild ARG4 | 914 | | fild ARG4 |
| 905 | | fstp TMPQ | 915 | | fstp TMPQ |
| 916 | |.endif | ||
| 906 | } | 917 | } |
| 907 | | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. | 918 | | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. |
| 908 | | jmp >1 | 919 | | jmp >1 |
| @@ -971,9 +982,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 971 | | cvtsi2sd xmm0, RC | 982 | | cvtsi2sd xmm0, RC |
| 972 | | movsd TMPQ, xmm0 | 983 | | movsd TMPQ, xmm0 |
| 973 | } else { | 984 | } else { |
| 985 | |.if not X64 | ||
| 974 | | mov ARG4, RC | 986 | | mov ARG4, RC |
| 975 | | fild ARG4 | 987 | | fild ARG4 |
| 976 | | fstp TMPQ | 988 | | fstp TMPQ |
| 989 | |.endif | ||
| 977 | } | 990 | } |
| 978 | | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. | 991 | | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. |
| 979 | | jmp >1 | 992 | | jmp >1 |
| @@ -2182,8 +2195,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2182 | | cvtsd2si RC, qword [RA+8] | 2195 | | cvtsd2si RC, qword [RA+8] |
| 2183 | | mov ARG3, RC | 2196 | | mov ARG3, RC |
| 2184 | } else { | 2197 | } else { |
| 2198 | |.if not X64 | ||
| 2185 | | fld qword [RA+8] | 2199 | | fld qword [RA+8] |
| 2186 | | fistp ARG3 | 2200 | | fistp ARG3 |
| 2201 | |.endif | ||
| 2187 | } | 2202 | } |
| 2188 | | mov RC, TMP2 | 2203 | | mov RC, TMP2 |
| 2189 | | cmp RB, RC // len < end? (unsigned compare) | 2204 | | cmp RB, RC // len < end? (unsigned compare) |
| @@ -2324,7 +2339,9 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2324 | if (sse) { | 2339 | if (sse) { |
| 2325 | | cvtsi2sd xmm0, RC; jmp ->fff_resxmm0 | 2340 | | cvtsi2sd xmm0, RC; jmp ->fff_resxmm0 |
| 2326 | } else { | 2341 | } else { |
| 2342 | |.if not X64 | ||
| 2327 | | mov ARG1, RC; fild ARG1; jmp ->fff_resn | 2343 | | mov ARG1, RC; fild ARG1; jmp ->fff_resn |
| 2344 | |.endif | ||
| 2328 | } | 2345 | } |
| 2329 | | | 2346 | | |
| 2330 | |//-- Bit library -------------------------------------------------------- | 2347 | |//-- Bit library -------------------------------------------------------- |
| @@ -2339,12 +2356,14 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2339 | | cvtsi2sd xmm0, RB | 2356 | | cvtsi2sd xmm0, RB |
| 2340 | | jmp ->fff_resxmm0 | 2357 | | jmp ->fff_resxmm0 |
| 2341 | } else { | 2358 | } else { |
| 2359 | |.if not X64 | ||
| 2342 | |.ffunc_n bit_tobit | 2360 | |.ffunc_n bit_tobit |
| 2343 | | mov TMP1, TOBIT_BIAS | 2361 | | mov TMP1, TOBIT_BIAS |
| 2344 | | fadd TMP1 | 2362 | | fadd TMP1 |
| 2345 | | fstp FPARG1 // 64 bit FP store. | 2363 | | fstp FPARG1 // 64 bit FP store. |
| 2346 | | fild ARG1 // 32 bit integer load (s2lfwd ok). | 2364 | | fild ARG1 // 32 bit integer load (s2lfwd ok). |
| 2347 | | jmp ->fff_resn | 2365 | | jmp ->fff_resn |
| 2366 | |.endif | ||
| 2348 | } | 2367 | } |
| 2349 | | | 2368 | | |
| 2350 | |.macro .ffunc_bit, name | 2369 | |.macro .ffunc_bit, name |
| @@ -2354,11 +2373,13 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2354 | | addsd xmm0, xmm1 | 2373 | | addsd xmm0, xmm1 |
| 2355 | | movd RB, xmm0 | 2374 | | movd RB, xmm0 |
| 2356 | ||} else { | 2375 | ||} else { |
| 2376 | |.if not X64 | ||
| 2357 | | .ffunc_n name | 2377 | | .ffunc_n name |
| 2358 | | mov TMP1, TOBIT_BIAS | 2378 | | mov TMP1, TOBIT_BIAS |
| 2359 | | fadd TMP1 | 2379 | | fadd TMP1 |
| 2360 | | fstp FPARG1 | 2380 | | fstp FPARG1 |
| 2361 | | mov RB, ARG1 | 2381 | | mov RB, ARG1 |
| 2382 | |.endif | ||
| 2362 | ||} | 2383 | ||} |
| 2363 | |.endmacro | 2384 | |.endmacro |
| 2364 | | | 2385 | | |
| @@ -2409,11 +2430,13 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2409 | | mov BASE, TMP1 | 2430 | | mov BASE, TMP1 |
| 2410 | | jmp ->fff_resxmm0 | 2431 | | jmp ->fff_resxmm0 |
| 2411 | } else { | 2432 | } else { |
| 2433 | |.if not X64 | ||
| 2412 | |->fff_resbit: | 2434 | |->fff_resbit: |
| 2413 | |->fff_resbit_op: | 2435 | |->fff_resbit_op: |
| 2414 | | mov ARG1, RB | 2436 | | mov ARG1, RB |
| 2415 | | fild ARG1 | 2437 | | fild ARG1 |
| 2416 | | jmp ->fff_resn | 2438 | | jmp ->fff_resn |
| 2439 | |.endif | ||
| 2417 | } | 2440 | } |
| 2418 | | | 2441 | | |
| 2419 | |->fff_fallback_bit_op: | 2442 | |->fff_fallback_bit_op: |
| @@ -2433,6 +2456,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2433 | | movd RB, xmm0 | 2456 | | movd RB, xmm0 |
| 2434 | | movd RA, xmm1 | 2457 | | movd RA, xmm1 |
| 2435 | ||} else { | 2458 | ||} else { |
| 2459 | |.if not X64 | ||
| 2436 | | .ffunc_nn name | 2460 | | .ffunc_nn name |
| 2437 | | mov TMP1, TOBIT_BIAS | 2461 | | mov TMP1, TOBIT_BIAS |
| 2438 | | fadd TMP1 | 2462 | | fadd TMP1 |
| @@ -2442,6 +2466,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2442 | | mov RC, RA // Assumes RA is ecx. | 2466 | | mov RC, RA // Assumes RA is ecx. |
| 2443 | | mov RA, ARG3 | 2467 | | mov RA, ARG3 |
| 2444 | | mov RB, ARG1 | 2468 | | mov RB, ARG1 |
| 2469 | |.endif | ||
| 2445 | ||} | 2470 | ||} |
| 2446 | | ins RB, cl | 2471 | | ins RB, cl |
| 2447 | | mov RA, RC | 2472 | | mov RA, RC |
| @@ -2467,7 +2492,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2467 | | sub BASE, RA | 2492 | | sub BASE, RA |
| 2468 | | mov [RA-4], PC | 2493 | | mov [RA-4], PC |
| 2469 | | mov SAVE_PC, PC // Redundant (but a defined value). | 2494 | | mov SAVE_PC, PC // Redundant (but a defined value). |
| 2470 | | mov ARG3, BASE // Save old BASE (relative). | 2495 | | mov TMP1, BASE // Save old BASE (relative). |
| 2471 | | mov L:RB->base, RA | 2496 | | mov L:RB->base, RA |
| 2472 | | lea RC, [RA+NARGS:RC*8-8] | 2497 | | lea RC, [RA+NARGS:RC*8-8] |
| 2473 | | mov ARG1, L:RB | 2498 | | mov ARG1, L:RB |
| @@ -2486,7 +2511,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2486 | | shr RC, 3 | 2511 | | shr RC, 3 |
| 2487 | | add NARGS:RC, 1 | 2512 | | add NARGS:RC, 1 |
| 2488 | | mov LFUNC:RB, [RA-8] | 2513 | | mov LFUNC:RB, [RA-8] |
| 2489 | | mov BASE, ARG3 // Restore old BASE. | 2514 | | mov BASE, TMP1 // Restore old BASE. |
| 2490 | | add BASE, RA | 2515 | | add BASE, RA |
| 2491 | | cmp [RA-4], PC; jne >2 // Callable modified by handler? | 2516 | | cmp [RA-4], PC; jne >2 // Callable modified by handler? |
| 2492 | | jmp aword LFUNC:RB->gate // Retry the call. | 2517 | | jmp aword LFUNC:RB->gate // Retry the call. |
| @@ -2509,11 +2534,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2509 | | | 2534 | | |
| 2510 | |->fff_gcstep: // Call GC step function. | 2535 | |->fff_gcstep: // Call GC step function. |
| 2511 | | // RA = new base, RC = nargs+1 | 2536 | | // RA = new base, RC = nargs+1 |
| 2512 | | pop RB // Must keep stack at same level. | 2537 | | pop RBa // Must keep stack at same level. |
| 2513 | | mov ARG3, RB // Save return address | 2538 | | mov TMPa, RBa // Save return address |
| 2514 | | mov L:RB, SAVE_L | 2539 | | mov L:RB, SAVE_L |
| 2515 | | sub BASE, RA | 2540 | | sub BASE, RA |
| 2516 | | mov ARG2, BASE // Save old BASE (relative). | 2541 | | mov TMP2, BASE // Save old BASE (relative). |
| 2517 | | mov [RA-4], PC | 2542 | | mov [RA-4], PC |
| 2518 | | mov SAVE_PC, PC // Redundant (but a defined value). | 2543 | | mov SAVE_PC, PC // Redundant (but a defined value). |
| 2519 | | mov L:RB->base, RA | 2544 | | mov L:RB->base, RA |
| @@ -2531,10 +2556,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | |||
| 2531 | | shr RC, 3 | 2556 | | shr RC, 3 |
| 2532 | | add NARGS:RC, 1 | 2557 | | add NARGS:RC, 1 |
| 2533 | | mov PC, [RA-4] | 2558 | | mov PC, [RA-4] |
| 2534 | | mov BASE, ARG2 // Restore old BASE. | 2559 | | mov BASE, TMP2 // Restore old BASE. |
| 2535 | | add BASE, RA | 2560 | | add BASE, RA |
| 2536 | | mov RB, ARG3 | 2561 | | mov RBa, TMPa |
| 2537 | | push RB // Restore return address. | 2562 | | push RBa // Restore return address. |
| 2538 | | mov LFUNC:RB, [RA-8] | 2563 | | mov LFUNC:RB, [RA-8] |
| 2539 | | ret | 2564 | | ret |
| 2540 | | | 2565 | | |
| @@ -3369,9 +3394,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | |||
| 3369 | | cvtsi2sd xmm0, RC | 3394 | | cvtsi2sd xmm0, RC |
| 3370 | | mov BASE, RB // Restore BASE. | 3395 | | mov BASE, RB // Restore BASE. |
| 3371 | } else { | 3396 | } else { |
| 3397 | |.if not X64 | ||
| 3372 | | mov ARG1, RC | 3398 | | mov ARG1, RC |
| 3373 | | mov BASE, RB // Restore BASE. | 3399 | | mov BASE, RB // Restore BASE. |
| 3374 | | fild ARG1 | 3400 | | fild ARG1 |
| 3401 | |.endif | ||
| 3375 | } | 3402 | } |
| 3376 | | movzx RA, PC_RA | 3403 | | movzx RA, PC_RA |
| 3377 | | jmp <1 | 3404 | | jmp <1 |
| @@ -3994,7 +4021,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | |||
| 3994 | | mov TMP1, STR:RC | 4021 | | mov TMP1, STR:RC |
| 3995 | | mov TMP2, LJ_TSTR | 4022 | | mov TMP2, LJ_TSTR |
| 3996 | | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. | 4023 | | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. |
| 3997 | | mov ARG4, TAB:RB // Save TAB:RB for us. | 4024 | | mov TMP3, TAB:RB // Save TAB:RB for us. |
| 3998 | | mov ARG2, TAB:RB | 4025 | | mov ARG2, TAB:RB |
| 3999 | | mov L:RB, SAVE_L | 4026 | | mov L:RB, SAVE_L |
| 4000 | | mov ARG3, RC | 4027 | | mov ARG3, RC |
| @@ -4004,7 +4031,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | |||
| 4004 | | call extern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k) | 4031 | | call extern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k) |
| 4005 | | // Handles write barrier for the new key. TValue * returned in eax (RC). | 4032 | | // Handles write barrier for the new key. TValue * returned in eax (RC). |
| 4006 | | mov BASE, L:RB->base | 4033 | | mov BASE, L:RB->base |
| 4007 | | mov TAB:RB, ARG4 // Need TAB:RB for barrier. | 4034 | | mov TAB:RB, TMP3 // Need TAB:RB for barrier. |
| 4008 | | mov RA, eax | 4035 | | mov RA, eax |
| 4009 | | jmp <2 // Must check write barrier for value. | 4036 | | jmp <2 // Must check write barrier for value. |
| 4010 | | | 4037 | | |
| @@ -4211,7 +4238,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | |||
| 4211 | | lea RA, [BASE+RA*8] | 4238 | | lea RA, [BASE+RA*8] |
| 4212 | | mov PROTO:RC, LFUNC:RC->pt | 4239 | | mov PROTO:RC, LFUNC:RC->pt |
| 4213 | | movzx RC, byte PROTO:RC->numparams | 4240 | | movzx RC, byte PROTO:RC->numparams |
| 4214 | | mov ARG3, KBASE // Need one more free register. | 4241 | | mov TMP1, KBASE // Need one more free register. |
| 4215 | | lea KBASE, [BASE+RC*8+(8+FRAME_VARG)] | 4242 | | lea KBASE, [BASE+RC*8+(8+FRAME_VARG)] |
| 4216 | | sub KBASE, [BASE-4] | 4243 | | sub KBASE, [BASE-4] |
| 4217 | | // Note: KBASE may now be even _above_ BASE if nargs was < numparams. | 4244 | | // Note: KBASE may now be even _above_ BASE if nargs was < numparams. |
| @@ -4237,7 +4264,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | |||
| 4237 | | cmp RA, RB | 4264 | | cmp RA, RB |
| 4238 | | jb <2 | 4265 | | jb <2 |
| 4239 | |3: | 4266 | |3: |
| 4240 | | mov KBASE, ARG3 | 4267 | | mov KBASE, TMP1 |
| 4241 | | ins_next | 4268 | | ins_next |
| 4242 | | | 4269 | | |
| 4243 | |5: // Copy all varargs. | 4270 | |5: // Copy all varargs. |
| @@ -4496,11 +4523,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | |||
| 4496 | | ins_AD // RA = base (ignored), RD = traceno | 4523 | | ins_AD // RA = base (ignored), RD = traceno |
| 4497 | | mov RA, [DISPATCH+DISPATCH_J(trace)] | 4524 | | mov RA, [DISPATCH+DISPATCH_J(trace)] |
| 4498 | | mov TRACE:RD, [RA+RD*4] | 4525 | | mov TRACE:RD, [RA+RD*4] |
| 4499 | | mov RD, TRACE:RD->mcode | 4526 | | mov RDa, TRACE:RD->mcode |
| 4500 | | mov L:RB, SAVE_L | 4527 | | mov L:RB, SAVE_L |
| 4501 | | mov [DISPATCH+DISPATCH_GL(jit_base)], BASE | 4528 | | mov [DISPATCH+DISPATCH_GL(jit_base)], BASE |
| 4502 | | mov [DISPATCH+DISPATCH_GL(jit_L)], L:RB | 4529 | | mov [DISPATCH+DISPATCH_GL(jit_L)], L:RB |
| 4503 | | jmp RD | 4530 | | jmp RDa |
| 4504 | #endif | 4531 | #endif |
| 4505 | break; | 4532 | break; |
| 4506 | 4533 | ||
diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index feb94924..4f3e6c93 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h | |||
| @@ -407,17 +407,17 @@ static const unsigned char build_actionlist[14716] = { | |||
| 407 | 216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44, | 407 | 216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44, |
| 408 | 36,255,211,205,137,193,252,233,244,129,248,116,184,237,252,233,244,54,248, | 408 | 36,255,211,205,137,193,252,233,244,129,248,116,184,237,252,233,244,54,248, |
| 409 | 118,184,237,248,54,139,108,36,48,41,202,137,113,252,252,137,116,36,24,137, | 409 | 118,184,237,248,54,139,108,36,48,41,202,137,113,252,252,137,116,36,24,137, |
| 410 | 84,36,8,137,141,233,141,68,193,252,248,137,44,36,141,144,233,137,133,233, | 410 | 84,36,16,137,141,233,141,68,193,252,248,137,44,36,141,144,233,137,133,233, |
| 411 | 139,73,252,248,59,149,233,15,135,244,251,252,255,145,233,133,192,15,133,244, | 411 | 139,73,252,248,59,149,233,15,135,244,251,252,255,145,233,133,192,15,133,244, |
| 412 | 249,248,1,139,141,233,255,139,133,233,41,200,193,232,3,131,192,1,139,105, | 412 | 249,248,1,139,141,233,255,139,133,233,41,200,193,232,3,131,192,1,139,105, |
| 413 | 252,248,139,84,36,8,1,202,57,113,252,252,15,133,244,248,252,255,165,233,248, | 413 | 252,248,139,84,36,16,1,202,57,113,252,252,15,133,244,248,252,255,165,233, |
| 414 | 2,129,121,253,252,252,239,15,133,244,29,252,255,165,233,248,3,139,141,233, | 414 | 248,2,129,121,253,252,252,239,15,133,244,29,252,255,165,233,248,3,139,141, |
| 415 | 139,84,36,8,1,202,252,233,244,68,248,5,199,68,36,4,237,232,251,1,0,252,233, | 415 | 233,139,84,36,8,1,202,252,233,244,68,248,5,199,68,36,4,237,232,251,1,0,252, |
| 416 | 244,1,248,65,93,137,108,36,8,139,108,36,48,41,202,137,84,36,4,137,113,252, | 416 | 233,244,1,248,65,93,137,108,36,16,139,108,36,48,41,202,137,84,36,20,137,113, |
| 417 | 252,137,116,36,24,137,141,233,141,68,193,252,248,137,44,36,137,133,233,255, | 417 | 252,252,137,116,36,24,137,141,233,141,68,193,252,248,137,44,36,137,133,233, |
| 418 | 232,251,1,19,139,141,233,139,133,233,41,200,193,232,3,131,192,1,139,113,252, | 418 | 255,232,251,1,19,139,141,233,139,133,233,41,200,193,232,3,131,192,1,139,113, |
| 419 | 252,139,84,36,4,1,202,139,108,36,8,85,139,105,252,248,195,248,136,255,15, | 419 | 252,252,139,84,36,20,1,202,139,108,36,16,85,139,105,252,248,195,248,136,255, |
| 420 | 182,131,233,168,235,15,133,244,251,168,235,15,133,244,247,168,235,15,132, | 420 | 15,182,131,233,168,235,15,133,244,251,168,235,15,133,244,247,168,235,15,132, |
| 421 | 244,247,252,255,139,233,252,233,244,247,255,248,137,15,182,131,233,168,235, | 421 | 244,247,252,255,139,233,252,233,244,247,255,248,137,15,182,131,233,168,235, |
| 422 | 15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132,244,247,168, | 422 | 15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132,244,247,168, |
| 423 | 235,15,132,244,251,248,1,139,108,36,48,139,68,36,20,137,68,36,8,137,149,233, | 423 | 235,15,132,244,251,248,1,139,108,36,48,139,68,36,20,137,68,36,8,137,149,233, |
| @@ -685,11 +685,11 @@ static const unsigned char build_actionlist[14716] = { | |||
| 685 | 236,137,41,137,65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139, | 685 | 236,137,41,137,65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139, |
| 686 | 105,224,139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,3,0, | 686 | 105,224,139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,3,0, |
| 687 | 0,0,15,133,244,29,252,255,165,233,255,15,182,252,236,139,66,252,248,141,12, | 687 | 0,0,15,133,244,29,252,255,165,233,255,15,182,252,236,139,66,252,248,141,12, |
| 688 | 202,139,128,233,15,182,128,233,137,124,36,8,141,188,253,194,233,43,122,252, | 688 | 202,139,128,233,15,182,128,233,137,124,36,16,141,188,253,194,233,43,122,252, |
| 689 | 252,133,252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244, | 689 | 252,133,252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244, |
| 690 | 248,248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193, | 690 | 248,248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193, |
| 691 | 8,57,252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131,193, | 691 | 8,57,252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131,193, |
| 692 | 8,57,252,233,15,130,244,2,248,3,139,124,36,8,139,6,15,182,204,15,182,232, | 692 | 8,57,252,233,15,130,244,2,248,3,139,124,36,16,139,6,15,182,204,15,182,232, |
| 693 | 131,198,4,193,232,16,252,255,36,171,248,5,199,68,36,20,1,0,0,0,137,208,41, | 693 | 131,198,4,193,232,16,252,255,36,171,248,5,199,68,36,20,1,0,0,0,137,208,41, |
| 694 | 252,248,15,134,244,3,255,137,197,193,252,237,3,137,108,36,4,131,197,1,137, | 694 | 252,248,15,134,244,3,255,137,197,193,252,237,3,137,108,36,4,131,197,1,137, |
| 695 | 108,36,20,139,108,36,48,1,200,59,133,233,15,135,244,253,248,6,139,71,252, | 695 | 108,36,20,139,108,36,48,1,200,59,133,233,15,135,244,253,248,6,139,71,252, |
