diff options
author | Mike Pall <mike> | 2012-05-23 22:21:33 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-05-23 22:22:10 +0200 |
commit | 10b9ed37e0f0605987ee2ce93542c7c44a5ec64e (patch) | |
tree | 629fd8c069b8a7e88ecdbc803492811b552ef455 /src | |
parent | 3a43ea50843e4f6db73b8edf637dfd209ffbe2ab (diff) | |
download | luajit-10b9ed37e0f0605987ee2ce93542c7c44a5ec64e.tar.gz luajit-10b9ed37e0f0605987ee2ce93542c7c44a5ec64e.tar.bz2 luajit-10b9ed37e0f0605987ee2ce93542c7c44a5ec64e.zip |
PPC/e500: Fix tailcall from fast function (esp. tostring).
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppcspe.dasc | 1 | ||||
-rw-r--r-- | src/buildvm_ppcspe.h | 343 |
2 files changed, 173 insertions, 171 deletions
diff --git a/src/buildvm_ppcspe.dasc b/src/buildvm_ppcspe.dasc index b9ee5b01..a7ef3ccd 100644 --- a/src/buildvm_ppcspe.dasc +++ b/src/buildvm_ppcspe.dasc | |||
@@ -1813,6 +1813,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
1813 | | bne >3 | 1813 | | bne >3 |
1814 | | lwz INS, -4(PC) | 1814 | | lwz INS, -4(PC) |
1815 | | decode_RA8 TMP1, INS | 1815 | | decode_RA8 TMP1, INS |
1816 | | addi TMP1, TMP1, 8 | ||
1816 | |3: | 1817 | |3: |
1817 | | sub TMP2, BASE, TMP1 | 1818 | | sub TMP2, BASE, TMP1 |
1818 | | b ->vm_call_dispatch // Resolve again for tailcall. | 1819 | | b ->vm_call_dispatch // Resolve again for tailcall. |
diff --git a/src/buildvm_ppcspe.h b/src/buildvm_ppcspe.h index 32571ebe..44fed683 100644 --- a/src/buildvm_ppcspe.h +++ b/src/buildvm_ppcspe.h | |||
@@ -12,7 +12,7 @@ | |||
12 | #define DASM_SECTION_CODE_OP 0 | 12 | #define DASM_SECTION_CODE_OP 0 |
13 | #define DASM_SECTION_CODE_SUB 1 | 13 | #define DASM_SECTION_CODE_SUB 1 |
14 | #define DASM_MAXSECTION 2 | 14 | #define DASM_MAXSECTION 2 |
15 | static const unsigned int build_actionlist[4995] = { | 15 | static const unsigned int build_actionlist[4996] = { |
16 | 0x00010001, | 16 | 0x00010001, |
17 | 0x00060014, | 17 | 0x00060014, |
18 | 0x72000000, | 18 | 0x72000000, |
@@ -2516,6 +2516,7 @@ static const unsigned int build_actionlist[4995] = { | |||
2516 | 0x00050803, | 2516 | 0x00050803, |
2517 | 0x80f0fffc, | 2517 | 0x80f0fffc, |
2518 | 0x54e8dd78, | 2518 | 0x54e8dd78, |
2519 | 0x39080008, | ||
2519 | 0x0006000d, | 2520 | 0x0006000d, |
2520 | 0x7d287050, | 2521 | 0x7d287050, |
2521 | 0x48000000, | 2522 | 0x48000000, |
@@ -5433,38 +5434,38 @@ static void build_subroutines(BuildCtx *ctx) | |||
5433 | dasm_put(Dst, 2417, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc)); | 5434 | dasm_put(Dst, 2417, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc)); |
5434 | dasm_put(Dst, 2496, FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); | 5435 | dasm_put(Dst, 2496, FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); |
5435 | #if LJ_HASJIT | 5436 | #if LJ_HASJIT |
5436 | dasm_put(Dst, 2538); | 5437 | dasm_put(Dst, 2539); |
5437 | #endif | 5438 | #endif |
5438 | dasm_put(Dst, 2540, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base)); | 5439 | dasm_put(Dst, 2541, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base)); |
5439 | dasm_put(Dst, 2587, GG_DISP2STATIC); | 5440 | dasm_put(Dst, 2588, GG_DISP2STATIC); |
5440 | #if LJ_HASJIT | 5441 | #if LJ_HASJIT |
5441 | dasm_put(Dst, 2605); | 5442 | dasm_put(Dst, 2606); |
5442 | #endif | 5443 | #endif |
5443 | dasm_put(Dst, 2607); | 5444 | dasm_put(Dst, 2608); |
5444 | #if LJ_HASJIT | 5445 | #if LJ_HASJIT |
5445 | dasm_put(Dst, 2610); | 5446 | dasm_put(Dst, 2611); |
5446 | #endif | 5447 | #endif |
5447 | dasm_put(Dst, 2613); | 5448 | dasm_put(Dst, 2614); |
5448 | #if LJ_HASJIT | 5449 | #if LJ_HASJIT |
5449 | dasm_put(Dst, 2615); | 5450 | dasm_put(Dst, 2616); |
5450 | #endif | 5451 | #endif |
5451 | dasm_put(Dst, 2618, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); | 5452 | dasm_put(Dst, 2619, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); |
5452 | #if LJ_HASJIT | 5453 | #if LJ_HASJIT |
5453 | dasm_put(Dst, 2640); | 5454 | dasm_put(Dst, 2641); |
5454 | #endif | 5455 | #endif |
5455 | dasm_put(Dst, 2642); | 5456 | dasm_put(Dst, 2643); |
5456 | #if LJ_HASJIT | 5457 | #if LJ_HASJIT |
5457 | dasm_put(Dst, 2644); | 5458 | dasm_put(Dst, 2645); |
5458 | #endif | 5459 | #endif |
5459 | dasm_put(Dst, 2646); | 5460 | dasm_put(Dst, 2647); |
5460 | #if LJ_HASJIT | 5461 | #if LJ_HASJIT |
5461 | dasm_put(Dst, 2730); | 5462 | dasm_put(Dst, 2731); |
5462 | #else | 5463 | #else |
5463 | dasm_put(Dst, 2753); | 5464 | dasm_put(Dst, 2754); |
5464 | #endif | 5465 | #endif |
5465 | dasm_put(Dst, 2756); | 5466 | dasm_put(Dst, 2757); |
5466 | #if LJ_HASFFI | 5467 | #if LJ_HASFFI |
5467 | dasm_put(Dst, 2819); | 5468 | dasm_put(Dst, 2820); |
5468 | #endif | 5469 | #endif |
5469 | } | 5470 | } |
5470 | 5471 | ||
@@ -5472,7 +5473,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
5472 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) | 5473 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) |
5473 | { | 5474 | { |
5474 | int vk = 0; | 5475 | int vk = 0; |
5475 | dasm_put(Dst, 2821, defop); | 5476 | dasm_put(Dst, 2822, defop); |
5476 | 5477 | ||
5477 | switch (op) { | 5478 | switch (op) { |
5478 | 5479 | ||
@@ -5481,118 +5482,118 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
5481 | /* Remember: all ops branch for a true comparison, fall through otherwise. */ | 5482 | /* Remember: all ops branch for a true comparison, fall through otherwise. */ |
5482 | 5483 | ||
5483 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: | 5484 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: |
5484 | dasm_put(Dst, 2823, -(BCBIAS_J*4 >> 16)); | 5485 | dasm_put(Dst, 2824, -(BCBIAS_J*4 >> 16)); |
5485 | if (op == BC_ISLE || op == BC_ISGT) { | 5486 | if (op == BC_ISLE || op == BC_ISGT) { |
5486 | dasm_put(Dst, 2837); | 5487 | dasm_put(Dst, 2838); |
5487 | } | 5488 | } |
5488 | if (op == BC_ISLT || op == BC_ISLE) { | 5489 | if (op == BC_ISLT || op == BC_ISLE) { |
5489 | dasm_put(Dst, 2840); | 5490 | dasm_put(Dst, 2841); |
5490 | } else { | 5491 | } else { |
5491 | dasm_put(Dst, 2842); | 5492 | dasm_put(Dst, 2843); |
5492 | } | 5493 | } |
5493 | dasm_put(Dst, 2844); | 5494 | dasm_put(Dst, 2845); |
5494 | break; | 5495 | break; |
5495 | 5496 | ||
5496 | case BC_ISEQV: case BC_ISNEV: | 5497 | case BC_ISEQV: case BC_ISNEV: |
5497 | vk = op == BC_ISEQV; | 5498 | vk = op == BC_ISEQV; |
5498 | dasm_put(Dst, 2855, -(BCBIAS_J*4 >> 16)); | 5499 | dasm_put(Dst, 2856, -(BCBIAS_J*4 >> 16)); |
5499 | if (vk) { | 5500 | if (vk) { |
5500 | dasm_put(Dst, 2869); | 5501 | dasm_put(Dst, 2870); |
5501 | } else { | 5502 | } else { |
5502 | dasm_put(Dst, 2871); | 5503 | dasm_put(Dst, 2872); |
5503 | } | 5504 | } |
5504 | dasm_put(Dst, 2873, ~LJ_TISPRI, ~LJ_TISTABUD); | 5505 | dasm_put(Dst, 2874, ~LJ_TISPRI, ~LJ_TISTABUD); |
5505 | if (vk) { | 5506 | if (vk) { |
5506 | dasm_put(Dst, 2895); | 5507 | dasm_put(Dst, 2896); |
5507 | } else { | 5508 | } else { |
5508 | dasm_put(Dst, 2897); | 5509 | dasm_put(Dst, 2898); |
5509 | } | 5510 | } |
5510 | dasm_put(Dst, 2899); | 5511 | dasm_put(Dst, 2900); |
5511 | if (vk) { | 5512 | if (vk) { |
5512 | dasm_put(Dst, 2901); | 5513 | dasm_put(Dst, 2902); |
5513 | } else { | 5514 | } else { |
5514 | dasm_put(Dst, 2903); | 5515 | dasm_put(Dst, 2904); |
5515 | } | 5516 | } |
5516 | dasm_put(Dst, 2905, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); | 5517 | dasm_put(Dst, 2906, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); |
5517 | break; | 5518 | break; |
5518 | 5519 | ||
5519 | case BC_ISEQS: case BC_ISNES: | 5520 | case BC_ISEQS: case BC_ISNES: |
5520 | vk = op == BC_ISEQS; | 5521 | vk = op == BC_ISEQS; |
5521 | dasm_put(Dst, 2926, 32-1, -(BCBIAS_J*4 >> 16)); | 5522 | dasm_put(Dst, 2927, 32-1, -(BCBIAS_J*4 >> 16)); |
5522 | if (vk) { | 5523 | if (vk) { |
5523 | dasm_put(Dst, 2940); | 5524 | dasm_put(Dst, 2941); |
5524 | } else { | 5525 | } else { |
5525 | dasm_put(Dst, 2942); | 5526 | dasm_put(Dst, 2943); |
5526 | } | 5527 | } |
5527 | dasm_put(Dst, 2944); | 5528 | dasm_put(Dst, 2945); |
5528 | break; | 5529 | break; |
5529 | 5530 | ||
5530 | case BC_ISEQN: case BC_ISNEN: | 5531 | case BC_ISEQN: case BC_ISNEN: |
5531 | vk = op == BC_ISEQN; | 5532 | vk = op == BC_ISEQN; |
5532 | dasm_put(Dst, 2955, -(BCBIAS_J*4 >> 16)); | 5533 | dasm_put(Dst, 2956, -(BCBIAS_J*4 >> 16)); |
5533 | if (vk) { | 5534 | if (vk) { |
5534 | dasm_put(Dst, 2969); | 5535 | dasm_put(Dst, 2970); |
5535 | } else { | 5536 | } else { |
5536 | dasm_put(Dst, 2972); | 5537 | dasm_put(Dst, 2973); |
5537 | } | 5538 | } |
5538 | dasm_put(Dst, 2974); | 5539 | dasm_put(Dst, 2975); |
5539 | if (!vk) { | 5540 | if (!vk) { |
5540 | dasm_put(Dst, 2986); | 5541 | dasm_put(Dst, 2987); |
5541 | } | 5542 | } |
5542 | break; | 5543 | break; |
5543 | 5544 | ||
5544 | case BC_ISEQP: case BC_ISNEP: | 5545 | case BC_ISEQP: case BC_ISNEP: |
5545 | vk = op == BC_ISEQP; | 5546 | vk = op == BC_ISEQP; |
5546 | dasm_put(Dst, 2992, 32-3, -(BCBIAS_J*4 >> 16)); | 5547 | dasm_put(Dst, 2993, 32-3, -(BCBIAS_J*4 >> 16)); |
5547 | if (vk) { | 5548 | if (vk) { |
5548 | dasm_put(Dst, 3004); | 5549 | dasm_put(Dst, 3005); |
5549 | } else { | 5550 | } else { |
5550 | dasm_put(Dst, 3006); | 5551 | dasm_put(Dst, 3007); |
5551 | } | 5552 | } |
5552 | dasm_put(Dst, 3008); | 5553 | dasm_put(Dst, 3009); |
5553 | break; | 5554 | break; |
5554 | 5555 | ||
5555 | /* -- Unary test and copy ops ------------------------------------------- */ | 5556 | /* -- Unary test and copy ops ------------------------------------------- */ |
5556 | 5557 | ||
5557 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: | 5558 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: |
5558 | dasm_put(Dst, 3019); | 5559 | dasm_put(Dst, 3020); |
5559 | if (op == BC_IST || op == BC_ISF) { | 5560 | if (op == BC_IST || op == BC_ISF) { |
5560 | dasm_put(Dst, 3025, -(BCBIAS_J*4 >> 16)); | 5561 | dasm_put(Dst, 3026, -(BCBIAS_J*4 >> 16)); |
5561 | if (op == BC_IST) { | 5562 | if (op == BC_IST) { |
5562 | dasm_put(Dst, 3030); | 5563 | dasm_put(Dst, 3031); |
5563 | } else { | 5564 | } else { |
5564 | dasm_put(Dst, 3032); | 5565 | dasm_put(Dst, 3033); |
5565 | } | 5566 | } |
5566 | } else { | 5567 | } else { |
5567 | if (op == BC_ISTC) { | 5568 | if (op == BC_ISTC) { |
5568 | dasm_put(Dst, 3034); | 5569 | dasm_put(Dst, 3035); |
5569 | } else { | 5570 | } else { |
5570 | dasm_put(Dst, 3037); | 5571 | dasm_put(Dst, 3038); |
5571 | } | 5572 | } |
5572 | dasm_put(Dst, 3040, -(BCBIAS_J*4 >> 16)); | 5573 | dasm_put(Dst, 3041, -(BCBIAS_J*4 >> 16)); |
5573 | } | 5574 | } |
5574 | dasm_put(Dst, 3047); | 5575 | dasm_put(Dst, 3048); |
5575 | break; | 5576 | break; |
5576 | 5577 | ||
5577 | /* -- Unary ops --------------------------------------------------------- */ | 5578 | /* -- Unary ops --------------------------------------------------------- */ |
5578 | 5579 | ||
5579 | case BC_MOV: | 5580 | case BC_MOV: |
5580 | dasm_put(Dst, 3058); | 5581 | dasm_put(Dst, 3059); |
5581 | break; | 5582 | break; |
5582 | case BC_NOT: | 5583 | case BC_NOT: |
5583 | dasm_put(Dst, 3071, LJ_TTRUE); | 5584 | dasm_put(Dst, 3072, LJ_TTRUE); |
5584 | break; | 5585 | break; |
5585 | case BC_UNM: | 5586 | case BC_UNM: |
5586 | dasm_put(Dst, 3087); | 5587 | dasm_put(Dst, 3088); |
5587 | break; | 5588 | break; |
5588 | case BC_LEN: | 5589 | case BC_LEN: |
5589 | dasm_put(Dst, 3104, Dt5(->len)); | 5590 | dasm_put(Dst, 3105, Dt5(->len)); |
5590 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 5591 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
5591 | dasm_put(Dst, 3128, Dt6(->metatable)); | 5592 | dasm_put(Dst, 3129, Dt6(->metatable)); |
5592 | #endif | 5593 | #endif |
5593 | dasm_put(Dst, 3135); | 5594 | dasm_put(Dst, 3136); |
5594 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 5595 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
5595 | dasm_put(Dst, 3141, Dt6(->nomm), 1<<MM_len); | 5596 | dasm_put(Dst, 3142, Dt6(->nomm), 1<<MM_len); |
5596 | #endif | 5597 | #endif |
5597 | break; | 5598 | break; |
5598 | 5599 | ||
@@ -5603,262 +5604,262 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
5603 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 5604 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
5604 | switch (vk) { | 5605 | switch (vk) { |
5605 | case 0: | 5606 | case 0: |
5606 | dasm_put(Dst, 3151); | 5607 | dasm_put(Dst, 3152); |
5607 | break; | 5608 | break; |
5608 | case 1: | 5609 | case 1: |
5609 | dasm_put(Dst, 3157); | 5610 | dasm_put(Dst, 3158); |
5610 | break; | 5611 | break; |
5611 | default: | 5612 | default: |
5612 | dasm_put(Dst, 3163); | 5613 | dasm_put(Dst, 3164); |
5613 | break; | 5614 | break; |
5614 | } | 5615 | } |
5615 | dasm_put(Dst, 3170); | 5616 | dasm_put(Dst, 3171); |
5616 | break; | 5617 | break; |
5617 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: | 5618 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: |
5618 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 5619 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
5619 | switch (vk) { | 5620 | switch (vk) { |
5620 | case 0: | 5621 | case 0: |
5621 | dasm_put(Dst, 3183); | 5622 | dasm_put(Dst, 3184); |
5622 | break; | 5623 | break; |
5623 | case 1: | 5624 | case 1: |
5624 | dasm_put(Dst, 3189); | 5625 | dasm_put(Dst, 3190); |
5625 | break; | 5626 | break; |
5626 | default: | 5627 | default: |
5627 | dasm_put(Dst, 3195); | 5628 | dasm_put(Dst, 3196); |
5628 | break; | 5629 | break; |
5629 | } | 5630 | } |
5630 | dasm_put(Dst, 3202); | 5631 | dasm_put(Dst, 3203); |
5631 | break; | 5632 | break; |
5632 | case BC_MULVN: case BC_MULNV: case BC_MULVV: | 5633 | case BC_MULVN: case BC_MULNV: case BC_MULVV: |
5633 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 5634 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
5634 | switch (vk) { | 5635 | switch (vk) { |
5635 | case 0: | 5636 | case 0: |
5636 | dasm_put(Dst, 3215); | 5637 | dasm_put(Dst, 3216); |
5637 | break; | 5638 | break; |
5638 | case 1: | 5639 | case 1: |
5639 | dasm_put(Dst, 3221); | 5640 | dasm_put(Dst, 3222); |
5640 | break; | 5641 | break; |
5641 | default: | 5642 | default: |
5642 | dasm_put(Dst, 3227); | 5643 | dasm_put(Dst, 3228); |
5643 | break; | 5644 | break; |
5644 | } | 5645 | } |
5645 | dasm_put(Dst, 3234); | 5646 | dasm_put(Dst, 3235); |
5646 | break; | 5647 | break; |
5647 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: | 5648 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: |
5648 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 5649 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
5649 | switch (vk) { | 5650 | switch (vk) { |
5650 | case 0: | 5651 | case 0: |
5651 | dasm_put(Dst, 3247); | 5652 | dasm_put(Dst, 3248); |
5652 | break; | 5653 | break; |
5653 | case 1: | 5654 | case 1: |
5654 | dasm_put(Dst, 3253); | 5655 | dasm_put(Dst, 3254); |
5655 | break; | 5656 | break; |
5656 | default: | 5657 | default: |
5657 | dasm_put(Dst, 3259); | 5658 | dasm_put(Dst, 3260); |
5658 | break; | 5659 | break; |
5659 | } | 5660 | } |
5660 | dasm_put(Dst, 3266); | 5661 | dasm_put(Dst, 3267); |
5661 | break; | 5662 | break; |
5662 | case BC_MODVN: | 5663 | case BC_MODVN: |
5663 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 5664 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
5664 | switch (vk) { | 5665 | switch (vk) { |
5665 | case 0: | 5666 | case 0: |
5666 | dasm_put(Dst, 3279); | 5667 | dasm_put(Dst, 3280); |
5667 | break; | 5668 | break; |
5668 | case 1: | 5669 | case 1: |
5669 | dasm_put(Dst, 3285); | 5670 | dasm_put(Dst, 3286); |
5670 | break; | 5671 | break; |
5671 | default: | 5672 | default: |
5672 | dasm_put(Dst, 3291); | 5673 | dasm_put(Dst, 3292); |
5673 | break; | 5674 | break; |
5674 | } | 5675 | } |
5675 | dasm_put(Dst, 3298); | 5676 | dasm_put(Dst, 3299); |
5676 | break; | 5677 | break; |
5677 | case BC_MODNV: case BC_MODVV: | 5678 | case BC_MODNV: case BC_MODVV: |
5678 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 5679 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
5679 | switch (vk) { | 5680 | switch (vk) { |
5680 | case 0: | 5681 | case 0: |
5681 | dasm_put(Dst, 3316); | 5682 | dasm_put(Dst, 3317); |
5682 | break; | 5683 | break; |
5683 | case 1: | 5684 | case 1: |
5684 | dasm_put(Dst, 3322); | 5685 | dasm_put(Dst, 3323); |
5685 | break; | 5686 | break; |
5686 | default: | 5687 | default: |
5687 | dasm_put(Dst, 3328); | 5688 | dasm_put(Dst, 3329); |
5688 | break; | 5689 | break; |
5689 | } | 5690 | } |
5690 | dasm_put(Dst, 3335); | 5691 | dasm_put(Dst, 3336); |
5691 | break; | 5692 | break; |
5692 | case BC_POW: | 5693 | case BC_POW: |
5693 | dasm_put(Dst, 3338); | 5694 | dasm_put(Dst, 3339); |
5694 | break; | 5695 | break; |
5695 | 5696 | ||
5696 | case BC_CAT: | 5697 | case BC_CAT: |
5697 | dasm_put(Dst, 3360, Dt1(->base), 32-3, Dt1(->base)); | 5698 | dasm_put(Dst, 3361, Dt1(->base), 32-3, Dt1(->base)); |
5698 | break; | 5699 | break; |
5699 | 5700 | ||
5700 | /* -- Constant ops ------------------------------------------------------ */ | 5701 | /* -- Constant ops ------------------------------------------------------ */ |
5701 | 5702 | ||
5702 | case BC_KSTR: | 5703 | case BC_KSTR: |
5703 | dasm_put(Dst, 3390, 32-1); | 5704 | dasm_put(Dst, 3391, 32-1); |
5704 | break; | 5705 | break; |
5705 | case BC_KCDATA: | 5706 | case BC_KCDATA: |
5706 | #if LJ_HASFFI | 5707 | #if LJ_HASFFI |
5707 | dasm_put(Dst, 3407, 32-1, LJ_TCDATA); | 5708 | dasm_put(Dst, 3408, 32-1, LJ_TCDATA); |
5708 | #endif | 5709 | #endif |
5709 | break; | 5710 | break; |
5710 | case BC_KSHORT: | 5711 | case BC_KSHORT: |
5711 | dasm_put(Dst, 3426, 32-3); | 5712 | dasm_put(Dst, 3427, 32-3); |
5712 | break; | 5713 | break; |
5713 | case BC_KNUM: | 5714 | case BC_KNUM: |
5714 | dasm_put(Dst, 3442); | 5715 | dasm_put(Dst, 3443); |
5715 | break; | 5716 | break; |
5716 | case BC_KPRI: | 5717 | case BC_KPRI: |
5717 | dasm_put(Dst, 3455, 32-3); | 5718 | dasm_put(Dst, 3456, 32-3); |
5718 | break; | 5719 | break; |
5719 | case BC_KNIL: | 5720 | case BC_KNIL: |
5720 | dasm_put(Dst, 3470); | 5721 | dasm_put(Dst, 3471); |
5721 | break; | 5722 | break; |
5722 | 5723 | ||
5723 | /* -- Upvalue and function ops ------------------------------------------ */ | 5724 | /* -- Upvalue and function ops ------------------------------------------ */ |
5724 | 5725 | ||
5725 | case BC_UGET: | 5726 | case BC_UGET: |
5726 | dasm_put(Dst, 3489, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); | 5727 | dasm_put(Dst, 3490, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); |
5727 | break; | 5728 | break; |
5728 | case BC_USETV: | 5729 | case BC_USETV: |
5729 | dasm_put(Dst, 3510, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); | 5730 | dasm_put(Dst, 3511, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); |
5730 | break; | 5731 | break; |
5731 | case BC_USETS: | 5732 | case BC_USETS: |
5732 | dasm_put(Dst, 3562, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_GC_WHITES, GG_DISP2G); | 5733 | dasm_put(Dst, 3563, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_GC_WHITES, GG_DISP2G); |
5733 | break; | 5734 | break; |
5734 | case BC_USETN: | 5735 | case BC_USETN: |
5735 | dasm_put(Dst, 3611, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); | 5736 | dasm_put(Dst, 3612, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); |
5736 | break; | 5737 | break; |
5737 | case BC_USETP: | 5738 | case BC_USETP: |
5738 | dasm_put(Dst, 3632, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v)); | 5739 | dasm_put(Dst, 3633, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v)); |
5739 | break; | 5740 | break; |
5740 | 5741 | ||
5741 | case BC_UCLO: | 5742 | case BC_UCLO: |
5742 | dasm_put(Dst, 3655, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); | 5743 | dasm_put(Dst, 3656, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); |
5743 | break; | 5744 | break; |
5744 | 5745 | ||
5745 | case BC_FNEW: | 5746 | case BC_FNEW: |
5746 | dasm_put(Dst, 3685, 32-1, Dt1(->base), Dt1(->base)); | 5747 | dasm_put(Dst, 3686, 32-1, Dt1(->base), Dt1(->base)); |
5747 | break; | 5748 | break; |
5748 | 5749 | ||
5749 | /* -- Table ops --------------------------------------------------------- */ | 5750 | /* -- Table ops --------------------------------------------------------- */ |
5750 | 5751 | ||
5751 | case BC_TNEW: | 5752 | case BC_TNEW: |
5752 | case BC_TDUP: | 5753 | case BC_TDUP: |
5753 | dasm_put(Dst, 3711, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); | 5754 | dasm_put(Dst, 3712, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); |
5754 | if (op == BC_TNEW) { | 5755 | if (op == BC_TNEW) { |
5755 | dasm_put(Dst, 3724); | 5756 | dasm_put(Dst, 3725); |
5756 | } else { | 5757 | } else { |
5757 | dasm_put(Dst, 3732, 32-1); | 5758 | dasm_put(Dst, 3733, 32-1); |
5758 | } | 5759 | } |
5759 | dasm_put(Dst, 3739, Dt1(->base)); | 5760 | dasm_put(Dst, 3740, Dt1(->base)); |
5760 | break; | 5761 | break; |
5761 | 5762 | ||
5762 | case BC_GGET: | 5763 | case BC_GGET: |
5763 | case BC_GSET: | 5764 | case BC_GSET: |
5764 | dasm_put(Dst, 3762, 32-1, Dt7(->env)); | 5765 | dasm_put(Dst, 3763, 32-1, Dt7(->env)); |
5765 | if (op == BC_GGET) { | 5766 | if (op == BC_GGET) { |
5766 | dasm_put(Dst, 3770); | 5767 | dasm_put(Dst, 3771); |
5767 | } else { | 5768 | } else { |
5768 | dasm_put(Dst, 3773); | 5769 | dasm_put(Dst, 3774); |
5769 | } | 5770 | } |
5770 | break; | 5771 | break; |
5771 | 5772 | ||
5772 | case BC_TGETV: | 5773 | case BC_TGETV: |
5773 | dasm_put(Dst, 3776, Dt6(->asize), Dt6(->array), 31-3, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 5774 | dasm_put(Dst, 3777, Dt6(->asize), Dt6(->array), 31-3, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
5774 | break; | 5775 | break; |
5775 | case BC_TGETS: | 5776 | case BC_TGETS: |
5776 | dasm_put(Dst, 3834, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 5777 | dasm_put(Dst, 3835, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
5777 | dasm_put(Dst, 3898); | 5778 | dasm_put(Dst, 3899); |
5778 | break; | 5779 | break; |
5779 | case BC_TGETB: | 5780 | case BC_TGETB: |
5780 | dasm_put(Dst, 3903, 32-3, Dt6(->asize), Dt6(->array), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 5781 | dasm_put(Dst, 3904, 32-3, Dt6(->asize), Dt6(->array), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
5781 | break; | 5782 | break; |
5782 | 5783 | ||
5783 | case BC_TSETV: | 5784 | case BC_TSETV: |
5784 | dasm_put(Dst, 3947, Dt6(->asize), Dt6(->array), 31-3, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex); | 5785 | dasm_put(Dst, 3948, Dt6(->asize), Dt6(->array), 31-3, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex); |
5785 | dasm_put(Dst, 4014, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 5786 | dasm_put(Dst, 4015, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
5786 | break; | 5787 | break; |
5787 | case BC_TSETS: | 5788 | case BC_TSETS: |
5788 | dasm_put(Dst, 4026, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), DtB(->val), LJ_GC_BLACK, DtB(->val), Dt6(->metatable)); | 5789 | dasm_put(Dst, 4027, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), DtB(->val), LJ_GC_BLACK, DtB(->val), Dt6(->metatable)); |
5789 | dasm_put(Dst, 4087, Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); | 5790 | dasm_put(Dst, 4088, Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); |
5790 | dasm_put(Dst, 4138, Dt6(->marked), Dt6(->gclist)); | 5791 | dasm_put(Dst, 4139, Dt6(->marked), Dt6(->gclist)); |
5791 | break; | 5792 | break; |
5792 | case BC_TSETB: | 5793 | case BC_TSETB: |
5793 | dasm_put(Dst, 4145, 32-3, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked)); | 5794 | dasm_put(Dst, 4146, 32-3, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked)); |
5794 | dasm_put(Dst, 4205, Dt6(->gclist)); | 5795 | dasm_put(Dst, 4206, Dt6(->gclist)); |
5795 | break; | 5796 | break; |
5796 | 5797 | ||
5797 | case BC_TSETM: | 5798 | case BC_TSETM: |
5798 | dasm_put(Dst, 4210, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 5799 | dasm_put(Dst, 4211, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
5799 | dasm_put(Dst, 4279); | 5800 | dasm_put(Dst, 4280); |
5800 | break; | 5801 | break; |
5801 | 5802 | ||
5802 | /* -- Calls and vararg handling ----------------------------------------- */ | 5803 | /* -- Calls and vararg handling ----------------------------------------- */ |
5803 | 5804 | ||
5804 | case BC_CALLM: | 5805 | case BC_CALLM: |
5805 | dasm_put(Dst, 4282); | 5806 | dasm_put(Dst, 4283); |
5806 | break; | 5807 | break; |
5807 | case BC_CALL: | 5808 | case BC_CALL: |
5808 | dasm_put(Dst, 4284, Dt7(->pc)); | 5809 | dasm_put(Dst, 4285, Dt7(->pc)); |
5809 | break; | 5810 | break; |
5810 | 5811 | ||
5811 | case BC_CALLMT: | 5812 | case BC_CALLMT: |
5812 | dasm_put(Dst, 4304); | 5813 | dasm_put(Dst, 4305); |
5813 | break; | 5814 | break; |
5814 | case BC_CALLT: | 5815 | case BC_CALLT: |
5815 | dasm_put(Dst, 4306, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); | 5816 | dasm_put(Dst, 4307, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); |
5816 | dasm_put(Dst, 4371, FRAME_TYPE); | 5817 | dasm_put(Dst, 4372, FRAME_TYPE); |
5817 | break; | 5818 | break; |
5818 | 5819 | ||
5819 | case BC_ITERC: | 5820 | case BC_ITERC: |
5820 | dasm_put(Dst, 4378, Dt7(->pc)); | 5821 | dasm_put(Dst, 4379, Dt7(->pc)); |
5821 | break; | 5822 | break; |
5822 | 5823 | ||
5823 | case BC_ITERN: | 5824 | case BC_ITERN: |
5824 | #if LJ_HASJIT | 5825 | #if LJ_HASJIT |
5825 | #endif | 5826 | #endif |
5826 | dasm_put(Dst, 4404, Dt6(->asize), Dt6(->array), 31-3, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, DtB(->key), -(BCBIAS_J*4 >> 16)); | 5827 | dasm_put(Dst, 4405, Dt6(->asize), Dt6(->array), 31-3, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, DtB(->key), -(BCBIAS_J*4 >> 16)); |
5827 | dasm_put(Dst, 4483); | 5828 | dasm_put(Dst, 4484); |
5828 | break; | 5829 | break; |
5829 | 5830 | ||
5830 | case BC_ISNEXT: | 5831 | case BC_ISNEXT: |
5831 | dasm_put(Dst, 4487, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); | 5832 | dasm_put(Dst, 4488, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); |
5832 | break; | 5833 | break; |
5833 | 5834 | ||
5834 | case BC_VARG: | 5835 | case BC_VARG: |
5835 | dasm_put(Dst, 4538, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); | 5836 | dasm_put(Dst, 4539, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); |
5836 | dasm_put(Dst, 4618); | 5837 | dasm_put(Dst, 4619); |
5837 | break; | 5838 | break; |
5838 | 5839 | ||
5839 | /* -- Returns ----------------------------------------------------------- */ | 5840 | /* -- Returns ----------------------------------------------------------- */ |
5840 | 5841 | ||
5841 | case BC_RETM: | 5842 | case BC_RETM: |
5842 | dasm_put(Dst, 4624); | 5843 | dasm_put(Dst, 4625); |
5843 | break; | 5844 | break; |
5844 | 5845 | ||
5845 | case BC_RET: | 5846 | case BC_RET: |
5846 | dasm_put(Dst, 4626, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); | 5847 | dasm_put(Dst, 4627, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); |
5847 | break; | 5848 | break; |
5848 | 5849 | ||
5849 | case BC_RET0: case BC_RET1: | 5850 | case BC_RET0: case BC_RET1: |
5850 | dasm_put(Dst, 4696, FRAME_TYPE, FRAME_VARG); | 5851 | dasm_put(Dst, 4697, FRAME_TYPE, FRAME_VARG); |
5851 | if (op == BC_RET1) { | 5852 | if (op == BC_RET1) { |
5852 | dasm_put(Dst, 4709); | 5853 | dasm_put(Dst, 4710); |
5853 | } | 5854 | } |
5854 | dasm_put(Dst, 4712, Dt7(->pc), PC2PROTO(k)); | 5855 | dasm_put(Dst, 4713, Dt7(->pc), PC2PROTO(k)); |
5855 | break; | 5856 | break; |
5856 | 5857 | ||
5857 | /* -- Loops and branches ------------------------------------------------ */ | 5858 | /* -- Loops and branches ------------------------------------------------ */ |
5858 | 5859 | ||
5859 | case BC_FORL: | 5860 | case BC_FORL: |
5860 | #if LJ_HASJIT | 5861 | #if LJ_HASJIT |
5861 | dasm_put(Dst, 4740); | 5862 | dasm_put(Dst, 4741); |
5862 | #endif | 5863 | #endif |
5863 | break; | 5864 | break; |
5864 | 5865 | ||
@@ -5870,35 +5871,35 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
5870 | case BC_FORI: | 5871 | case BC_FORI: |
5871 | case BC_IFORL: | 5872 | case BC_IFORL: |
5872 | vk = (op == BC_IFORL || op == BC_JFORL); | 5873 | vk = (op == BC_IFORL || op == BC_JFORL); |
5873 | dasm_put(Dst, 4742, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); | 5874 | dasm_put(Dst, 4743, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); |
5874 | if (!vk) { | 5875 | if (!vk) { |
5875 | dasm_put(Dst, 4750); | 5876 | dasm_put(Dst, 4751); |
5876 | } | 5877 | } |
5877 | if (vk) { | 5878 | if (vk) { |
5878 | dasm_put(Dst, 4758, FORL_IDX*8); | 5879 | dasm_put(Dst, 4759, FORL_IDX*8); |
5879 | } | 5880 | } |
5880 | dasm_put(Dst, 4762, FORL_EXT*8); | 5881 | dasm_put(Dst, 4763, FORL_EXT*8); |
5881 | if (op != BC_JFORL) { | 5882 | if (op != BC_JFORL) { |
5882 | dasm_put(Dst, 4770, 32-1); | 5883 | dasm_put(Dst, 4771, 32-1); |
5883 | if (op == BC_JFORI) { | 5884 | if (op == BC_JFORI) { |
5884 | dasm_put(Dst, 4774, -(BCBIAS_J*4 >> 16)); | 5885 | dasm_put(Dst, 4775, -(BCBIAS_J*4 >> 16)); |
5885 | } else { | 5886 | } else { |
5886 | dasm_put(Dst, 4777, -(BCBIAS_J*4 >> 16)); | 5887 | dasm_put(Dst, 4778, -(BCBIAS_J*4 >> 16)); |
5887 | } | 5888 | } |
5888 | } | 5889 | } |
5889 | if (op == BC_FORI) { | 5890 | if (op == BC_FORI) { |
5890 | dasm_put(Dst, 4780); | 5891 | dasm_put(Dst, 4781); |
5891 | } else if (op == BC_IFORL) { | 5892 | } else if (op == BC_IFORL) { |
5892 | dasm_put(Dst, 4782); | 5893 | dasm_put(Dst, 4783); |
5893 | } else { | 5894 | } else { |
5894 | dasm_put(Dst, 4784, BC_JLOOP); | 5895 | dasm_put(Dst, 4785, BC_JLOOP); |
5895 | } | 5896 | } |
5896 | dasm_put(Dst, 4787); | 5897 | dasm_put(Dst, 4788); |
5897 | break; | 5898 | break; |
5898 | 5899 | ||
5899 | case BC_ITERL: | 5900 | case BC_ITERL: |
5900 | #if LJ_HASJIT | 5901 | #if LJ_HASJIT |
5901 | dasm_put(Dst, 4802); | 5902 | dasm_put(Dst, 4803); |
5902 | #endif | 5903 | #endif |
5903 | break; | 5904 | break; |
5904 | 5905 | ||
@@ -5907,40 +5908,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
5907 | break; | 5908 | break; |
5908 | #endif | 5909 | #endif |
5909 | case BC_IITERL: | 5910 | case BC_IITERL: |
5910 | dasm_put(Dst, 4804); | 5911 | dasm_put(Dst, 4805); |
5911 | if (op == BC_JITERL) { | 5912 | if (op == BC_JITERL) { |
5912 | dasm_put(Dst, 4810); | 5913 | dasm_put(Dst, 4811); |
5913 | } else { | 5914 | } else { |
5914 | dasm_put(Dst, 4812, 32-1, -(BCBIAS_J*4 >> 16)); | 5915 | dasm_put(Dst, 4813, 32-1, -(BCBIAS_J*4 >> 16)); |
5915 | } | 5916 | } |
5916 | dasm_put(Dst, 4819); | 5917 | dasm_put(Dst, 4820); |
5917 | break; | 5918 | break; |
5918 | 5919 | ||
5919 | case BC_LOOP: | 5920 | case BC_LOOP: |
5920 | #if LJ_HASJIT | 5921 | #if LJ_HASJIT |
5921 | dasm_put(Dst, 4831); | 5922 | dasm_put(Dst, 4832); |
5922 | #endif | 5923 | #endif |
5923 | break; | 5924 | break; |
5924 | 5925 | ||
5925 | case BC_ILOOP: | 5926 | case BC_ILOOP: |
5926 | dasm_put(Dst, 4833); | 5927 | dasm_put(Dst, 4834); |
5927 | break; | 5928 | break; |
5928 | 5929 | ||
5929 | case BC_JLOOP: | 5930 | case BC_JLOOP: |
5930 | #if LJ_HASJIT | 5931 | #if LJ_HASJIT |
5931 | dasm_put(Dst, 4844); | 5932 | dasm_put(Dst, 4845); |
5932 | #endif | 5933 | #endif |
5933 | break; | 5934 | break; |
5934 | 5935 | ||
5935 | case BC_JMP: | 5936 | case BC_JMP: |
5936 | dasm_put(Dst, 4846, 32-1, -(BCBIAS_J*4 >> 16)); | 5937 | dasm_put(Dst, 4847, 32-1, -(BCBIAS_J*4 >> 16)); |
5937 | break; | 5938 | break; |
5938 | 5939 | ||
5939 | /* -- Function headers -------------------------------------------------- */ | 5940 | /* -- Function headers -------------------------------------------------- */ |
5940 | 5941 | ||
5941 | case BC_FUNCF: | 5942 | case BC_FUNCF: |
5942 | #if LJ_HASJIT | 5943 | #if LJ_HASJIT |
5943 | dasm_put(Dst, 4862); | 5944 | dasm_put(Dst, 4863); |
5944 | #endif | 5945 | #endif |
5945 | case BC_FUNCV: /* NYI: compiled vararg functions. */ | 5946 | case BC_FUNCV: /* NYI: compiled vararg functions. */ |
5946 | break; | 5947 | break; |
@@ -5950,38 +5951,38 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
5950 | break; | 5951 | break; |
5951 | #endif | 5952 | #endif |
5952 | case BC_IFUNCF: | 5953 | case BC_IFUNCF: |
5953 | dasm_put(Dst, 4864, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); | 5954 | dasm_put(Dst, 4865, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); |
5954 | if (op == BC_JFUNCF) { | 5955 | if (op == BC_JFUNCF) { |
5955 | dasm_put(Dst, 4882); | 5956 | dasm_put(Dst, 4883); |
5956 | } else { | 5957 | } else { |
5957 | dasm_put(Dst, 4884); | 5958 | dasm_put(Dst, 4885); |
5958 | } | 5959 | } |
5959 | dasm_put(Dst, 4893); | 5960 | dasm_put(Dst, 4894); |
5960 | break; | 5961 | break; |
5961 | 5962 | ||
5962 | case BC_JFUNCV: | 5963 | case BC_JFUNCV: |
5963 | #if !LJ_HASJIT | 5964 | #if !LJ_HASJIT |
5964 | break; | 5965 | break; |
5965 | #endif | 5966 | #endif |
5966 | dasm_put(Dst, 4899); | 5967 | dasm_put(Dst, 4900); |
5967 | break; /* NYI: compiled vararg functions. */ | 5968 | break; /* NYI: compiled vararg functions. */ |
5968 | 5969 | ||
5969 | case BC_IFUNCV: | 5970 | case BC_IFUNCV: |
5970 | dasm_put(Dst, 4901, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams)); | 5971 | dasm_put(Dst, 4902, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams)); |
5971 | break; | 5972 | break; |
5972 | 5973 | ||
5973 | case BC_FUNCC: | 5974 | case BC_FUNCC: |
5974 | case BC_FUNCCW: | 5975 | case BC_FUNCCW: |
5975 | if (op == BC_FUNCC) { | 5976 | if (op == BC_FUNCC) { |
5976 | dasm_put(Dst, 4951, Dt8(->f)); | 5977 | dasm_put(Dst, 4952, Dt8(->f)); |
5977 | } else { | 5978 | } else { |
5978 | dasm_put(Dst, 4954, DISPATCH_GL(wrapf)); | 5979 | dasm_put(Dst, 4955, DISPATCH_GL(wrapf)); |
5979 | } | 5980 | } |
5980 | dasm_put(Dst, 4957, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); | 5981 | dasm_put(Dst, 4958, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); |
5981 | if (op == BC_FUNCCW) { | 5982 | if (op == BC_FUNCCW) { |
5982 | dasm_put(Dst, 4970, Dt8(->f)); | 5983 | dasm_put(Dst, 4971, Dt8(->f)); |
5983 | } | 5984 | } |
5984 | dasm_put(Dst, 4973, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); | 5985 | dasm_put(Dst, 4974, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); |
5985 | break; | 5986 | break; |
5986 | 5987 | ||
5987 | /* ---------------------------------------------------------------------- */ | 5988 | /* ---------------------------------------------------------------------- */ |
@@ -6001,7 +6002,7 @@ static int build_backend(BuildCtx *ctx) | |||
6001 | 6002 | ||
6002 | build_subroutines(ctx); | 6003 | build_subroutines(ctx); |
6003 | 6004 | ||
6004 | dasm_put(Dst, 4994); | 6005 | dasm_put(Dst, 4995); |
6005 | for (op = 0; op < BC__MAX; op++) | 6006 | for (op = 0; op < BC__MAX; op++) |
6006 | build_ins(ctx, (BCOp)op, op); | 6007 | build_ins(ctx, (BCOp)op, op); |
6007 | 6008 | ||