aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-10-18 16:12:27 +0200
committerMike Pall <mike>2010-10-18 16:12:27 +0200
commit65dec38e44b4d5cb5f834cd4c06bf9a79ab4a92a (patch)
treea8b46f3f5c08e0d24847053a1cd4cfe5b33cc1db /src
parent5391a5f5b19b5b8713a12b3ccc3a8257e87317b7 (diff)
downloadluajit-65dec38e44b4d5cb5f834cd4c06bf9a79ab4a92a.tar.gz
luajit-65dec38e44b4d5cb5f834cd4c06bf9a79ab4a92a.tar.bz2
luajit-65dec38e44b4d5cb5f834cd4c06bf9a79ab4a92a.zip
PPC: Preserve RD during array resizing in BC_TSETM.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc2
-rw-r--r--src/buildvm_ppcspe.h106
2 files changed, 56 insertions, 52 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index e2c61564..870e061d 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -2948,8 +2948,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2948 | stw BASE, L->base 2948 | stw BASE, L->base
2949 | mr CARG1, L 2949 | mr CARG1, L
2950 | stw PC, SAVE_PC 2950 | stw PC, SAVE_PC
2951 | mr SAVE0, RD
2951 | bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) 2952 | bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize)
2952 | // Must not reallocate the stack. 2953 | // Must not reallocate the stack.
2954 | mr RD, SAVE0
2953 | b <1 2955 | b <1
2954 | 2956 |
2955 |7: // Possible table write barrier for any value. Skip valiswhite check. 2957 |7: // Possible table write barrier for any value. Skip valiswhite check.
diff --git a/src/buildvm_ppcspe.h b/src/buildvm_ppcspe.h
index 8e1c81af..0cedee2c 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
15static const unsigned int build_actionlist[4905] = { 15static const unsigned int build_actionlist[4907] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180x72000000, 180x72000000,
@@ -4187,8 +4187,10 @@ static const unsigned int build_actionlist[4905] = {
41870x00098200, 41870x00098200,
41880x7e439378, 41880x7e439378,
41890x9201000c, 41890x9201000c,
41900x7d956378,
41900x48000001, 41910x48000001,
41910x0003002e, 41920x0003002e,
41930x7eacab78,
41920x48000000, 41940x48000000,
41930x0005000b, 41950x0005000b,
41940x00060011, 41960x00060011,
@@ -5674,69 +5676,69 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
5674 5676
5675 case BC_TSETM: 5677 case BC_TSETM:
5676 dasm_put(Dst, 4122, 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)); 5678 dasm_put(Dst, 4122, 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));
5677 dasm_put(Dst, 4189); 5679 dasm_put(Dst, 4191);
5678 break; 5680 break;
5679 5681
5680 /* -- Calls and vararg handling ----------------------------------------- */ 5682 /* -- Calls and vararg handling ----------------------------------------- */
5681 5683
5682 case BC_CALLM: 5684 case BC_CALLM:
5683 dasm_put(Dst, 4192); 5685 dasm_put(Dst, 4194);
5684 break; 5686 break;
5685 case BC_CALL: 5687 case BC_CALL:
5686 dasm_put(Dst, 4194, Dt7(->pc)); 5688 dasm_put(Dst, 4196, Dt7(->pc));
5687 break; 5689 break;
5688 5690
5689 case BC_CALLMT: 5691 case BC_CALLMT:
5690 dasm_put(Dst, 4214); 5692 dasm_put(Dst, 4216);
5691 break; 5693 break;
5692 case BC_CALLT: 5694 case BC_CALLT:
5693 dasm_put(Dst, 4216, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 5695 dasm_put(Dst, 4218, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
5694 dasm_put(Dst, 4281, FRAME_TYPE); 5696 dasm_put(Dst, 4283, FRAME_TYPE);
5695 break; 5697 break;
5696 5698
5697 case BC_ITERC: 5699 case BC_ITERC:
5698 dasm_put(Dst, 4288, Dt7(->pc)); 5700 dasm_put(Dst, 4290, Dt7(->pc));
5699 break; 5701 break;
5700 5702
5701 case BC_ITERN: 5703 case BC_ITERN:
5702#if LJ_HASJIT 5704#if LJ_HASJIT
5703#endif 5705#endif
5704 dasm_put(Dst, 4314, Dt6(->asize), Dt6(->array), 31-3, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, DtB(->key), -(BCBIAS_J*4 >> 16)); 5706 dasm_put(Dst, 4316, Dt6(->asize), Dt6(->array), 31-3, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, DtB(->key), -(BCBIAS_J*4 >> 16));
5705 dasm_put(Dst, 4393); 5707 dasm_put(Dst, 4395);
5706 break; 5708 break;
5707 5709
5708 case BC_ISNEXT: 5710 case BC_ISNEXT:
5709 dasm_put(Dst, 4397, 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)); 5711 dasm_put(Dst, 4399, 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));
5710 break; 5712 break;
5711 5713
5712 case BC_VARG: 5714 case BC_VARG:
5713 dasm_put(Dst, 4448, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); 5715 dasm_put(Dst, 4450, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base));
5714 dasm_put(Dst, 4528); 5716 dasm_put(Dst, 4530);
5715 break; 5717 break;
5716 5718
5717 /* -- Returns ----------------------------------------------------------- */ 5719 /* -- Returns ----------------------------------------------------------- */
5718 5720
5719 case BC_RETM: 5721 case BC_RETM:
5720 dasm_put(Dst, 4534); 5722 dasm_put(Dst, 4536);
5721 break; 5723 break;
5722 5724
5723 case BC_RET: 5725 case BC_RET:
5724 dasm_put(Dst, 4536, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 5726 dasm_put(Dst, 4538, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
5725 break; 5727 break;
5726 5728
5727 case BC_RET0: case BC_RET1: 5729 case BC_RET0: case BC_RET1:
5728 dasm_put(Dst, 4606, FRAME_TYPE, FRAME_VARG); 5730 dasm_put(Dst, 4608, FRAME_TYPE, FRAME_VARG);
5729 if (op == BC_RET1) { 5731 if (op == BC_RET1) {
5730 dasm_put(Dst, 4619); 5732 dasm_put(Dst, 4621);
5731 } 5733 }
5732 dasm_put(Dst, 4622, Dt7(->pc), PC2PROTO(k)); 5734 dasm_put(Dst, 4624, Dt7(->pc), PC2PROTO(k));
5733 break; 5735 break;
5734 5736
5735 /* -- Loops and branches ------------------------------------------------ */ 5737 /* -- Loops and branches ------------------------------------------------ */
5736 5738
5737 case BC_FORL: 5739 case BC_FORL:
5738#if LJ_HASJIT 5740#if LJ_HASJIT
5739 dasm_put(Dst, 4650); 5741 dasm_put(Dst, 4652);
5740#endif 5742#endif
5741 break; 5743 break;
5742 5744
@@ -5748,35 +5750,35 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
5748 case BC_FORI: 5750 case BC_FORI:
5749 case BC_IFORL: 5751 case BC_IFORL:
5750 vk = (op == BC_IFORL || op == BC_JFORL); 5752 vk = (op == BC_IFORL || op == BC_JFORL);
5751 dasm_put(Dst, 4652, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); 5753 dasm_put(Dst, 4654, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8);
5752 if (!vk) { 5754 if (!vk) {
5753 dasm_put(Dst, 4660); 5755 dasm_put(Dst, 4662);
5754 } 5756 }
5755 if (vk) { 5757 if (vk) {
5756 dasm_put(Dst, 4668, FORL_IDX*8); 5758 dasm_put(Dst, 4670, FORL_IDX*8);
5757 } 5759 }
5758 dasm_put(Dst, 4672, FORL_EXT*8); 5760 dasm_put(Dst, 4674, FORL_EXT*8);
5759 if (op != BC_JFORL) { 5761 if (op != BC_JFORL) {
5760 dasm_put(Dst, 4680, 32-1); 5762 dasm_put(Dst, 4682, 32-1);
5761 if (op == BC_JFORI) { 5763 if (op == BC_JFORI) {
5762 dasm_put(Dst, 4684, -(BCBIAS_J*4 >> 16)); 5764 dasm_put(Dst, 4686, -(BCBIAS_J*4 >> 16));
5763 } else { 5765 } else {
5764 dasm_put(Dst, 4687, -(BCBIAS_J*4 >> 16)); 5766 dasm_put(Dst, 4689, -(BCBIAS_J*4 >> 16));
5765 } 5767 }
5766 } 5768 }
5767 if (op == BC_FORI) { 5769 if (op == BC_FORI) {
5768 dasm_put(Dst, 4690);
5769 } else if (op == BC_IFORL) {
5770 dasm_put(Dst, 4692); 5770 dasm_put(Dst, 4692);
5771 } else if (op == BC_IFORL) {
5772 dasm_put(Dst, 4694);
5771 } else { 5773 } else {
5772 dasm_put(Dst, 4694, BC_JLOOP); 5774 dasm_put(Dst, 4696, BC_JLOOP);
5773 } 5775 }
5774 dasm_put(Dst, 4697); 5776 dasm_put(Dst, 4699);
5775 break; 5777 break;
5776 5778
5777 case BC_ITERL: 5779 case BC_ITERL:
5778#if LJ_HASJIT 5780#if LJ_HASJIT
5779 dasm_put(Dst, 4712); 5781 dasm_put(Dst, 4714);
5780#endif 5782#endif
5781 break; 5783 break;
5782 5784
@@ -5785,40 +5787,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
5785 break; 5787 break;
5786#endif 5788#endif
5787 case BC_IITERL: 5789 case BC_IITERL:
5788 dasm_put(Dst, 4714); 5790 dasm_put(Dst, 4716);
5789 if (op == BC_JITERL) { 5791 if (op == BC_JITERL) {
5790 dasm_put(Dst, 4720); 5792 dasm_put(Dst, 4722);
5791 } else { 5793 } else {
5792 dasm_put(Dst, 4722, 32-1, -(BCBIAS_J*4 >> 16)); 5794 dasm_put(Dst, 4724, 32-1, -(BCBIAS_J*4 >> 16));
5793 } 5795 }
5794 dasm_put(Dst, 4729); 5796 dasm_put(Dst, 4731);
5795 break; 5797 break;
5796 5798
5797 case BC_LOOP: 5799 case BC_LOOP:
5798#if LJ_HASJIT 5800#if LJ_HASJIT
5799 dasm_put(Dst, 4741); 5801 dasm_put(Dst, 4743);
5800#endif 5802#endif
5801 break; 5803 break;
5802 5804
5803 case BC_ILOOP: 5805 case BC_ILOOP:
5804 dasm_put(Dst, 4743); 5806 dasm_put(Dst, 4745);
5805 break; 5807 break;
5806 5808
5807 case BC_JLOOP: 5809 case BC_JLOOP:
5808#if LJ_HASJIT 5810#if LJ_HASJIT
5809 dasm_put(Dst, 4754); 5811 dasm_put(Dst, 4756);
5810#endif 5812#endif
5811 break; 5813 break;
5812 5814
5813 case BC_JMP: 5815 case BC_JMP:
5814 dasm_put(Dst, 4756, 32-1, -(BCBIAS_J*4 >> 16)); 5816 dasm_put(Dst, 4758, 32-1, -(BCBIAS_J*4 >> 16));
5815 break; 5817 break;
5816 5818
5817 /* -- Function headers -------------------------------------------------- */ 5819 /* -- Function headers -------------------------------------------------- */
5818 5820
5819 case BC_FUNCF: 5821 case BC_FUNCF:
5820#if LJ_HASJIT 5822#if LJ_HASJIT
5821 dasm_put(Dst, 4772); 5823 dasm_put(Dst, 4774);
5822#endif 5824#endif
5823 case BC_FUNCV: /* NYI: compiled vararg functions. */ 5825 case BC_FUNCV: /* NYI: compiled vararg functions. */
5824 break; 5826 break;
@@ -5828,38 +5830,38 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
5828 break; 5830 break;
5829#endif 5831#endif
5830 case BC_IFUNCF: 5832 case BC_IFUNCF:
5831 dasm_put(Dst, 4774, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); 5833 dasm_put(Dst, 4776, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3);
5832 if (op == BC_JFUNCF) { 5834 if (op == BC_JFUNCF) {
5833 dasm_put(Dst, 4792);
5834 } else {
5835 dasm_put(Dst, 4794); 5835 dasm_put(Dst, 4794);
5836 } else {
5837 dasm_put(Dst, 4796);
5836 } 5838 }
5837 dasm_put(Dst, 4803); 5839 dasm_put(Dst, 4805);
5838 break; 5840 break;
5839 5841
5840 case BC_JFUNCV: 5842 case BC_JFUNCV:
5841#if !LJ_HASJIT 5843#if !LJ_HASJIT
5842 break; 5844 break;
5843#endif 5845#endif
5844 dasm_put(Dst, 4809); 5846 dasm_put(Dst, 4811);
5845 break; /* NYI: compiled vararg functions. */ 5847 break; /* NYI: compiled vararg functions. */
5846 5848
5847 case BC_IFUNCV: 5849 case BC_IFUNCV:
5848 dasm_put(Dst, 4811, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams)); 5850 dasm_put(Dst, 4813, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams));
5849 break; 5851 break;
5850 5852
5851 case BC_FUNCC: 5853 case BC_FUNCC:
5852 case BC_FUNCCW: 5854 case BC_FUNCCW:
5853 if (op == BC_FUNCC) { 5855 if (op == BC_FUNCC) {
5854 dasm_put(Dst, 4861, Dt8(->f)); 5856 dasm_put(Dst, 4863, Dt8(->f));
5855 } else { 5857 } else {
5856 dasm_put(Dst, 4864, DISPATCH_GL(wrapf)); 5858 dasm_put(Dst, 4866, DISPATCH_GL(wrapf));
5857 } 5859 }
5858 dasm_put(Dst, 4867, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); 5860 dasm_put(Dst, 4869, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
5859 if (op == BC_FUNCCW) { 5861 if (op == BC_FUNCCW) {
5860 dasm_put(Dst, 4880, Dt8(->f)); 5862 dasm_put(Dst, 4882, Dt8(->f));
5861 } 5863 }
5862 dasm_put(Dst, 4883, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); 5864 dasm_put(Dst, 4885, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate));
5863 break; 5865 break;
5864 5866
5865 /* ---------------------------------------------------------------------- */ 5867 /* ---------------------------------------------------------------------- */
@@ -5879,7 +5881,7 @@ static int build_backend(BuildCtx *ctx)
5879 5881
5880 build_subroutines(ctx); 5882 build_subroutines(ctx);
5881 5883
5882 dasm_put(Dst, 4904); 5884 dasm_put(Dst, 4906);
5883 for (op = 0; op < BC__MAX; op++) 5885 for (op = 0; op < BC__MAX; op++)
5884 build_ins(ctx, (BCOp)op, op); 5886 build_ins(ctx, (BCOp)op, op);
5885 5887