Hotcounts are decremented by 2 for loops and by 1 for calls.
|
#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto))
|
-|.macro hotcheck
+|.macro hotcheck, delta
| lsr CARG1, PC, #1
| and CARG1, CARG1, #126
| sub CARG1, CARG1, #-GG_DISP2HOT
| ldrh CARG2, [DISPATCH, CARG1]
-| subs CARG2, CARG2, #1
+| subs CARG2, CARG2, #delta
| strh CARG2, [DISPATCH, CARG1]
|.endmacro
|
|.macro hotloop
-| hotcheck
-| beq ->vm_hotloop
+| hotcheck HOTCOUNT_LOOP
+| blo ->vm_hotloop
|.endmacro
|
|.macro hotcall
-| hotcheck
-| beq ->vm_hotcall
+| hotcheck HOTCOUNT_CALL
+| blo ->vm_hotcall
|.endmacro
|
|// Set current VM state.
#define DASM_SECTION_CODE_OP 0
#define DASM_SECTION_CODE_SUB 1
#define DASM_MAXSECTION 2
-static const unsigned int build_actionlist[5702] = {
+static const unsigned int build_actionlist[5706] = {
0x00010001,
0x00060014,
0xe3160000,
0xe2400000,
0x000a0000,
0xe19710b0,
-0xe2511001,
+0xe2511000,
+0x000a0000,
0xe18710b0,
-0x0a000000,
+0x3a000000,
0x00050091,
0x00000000,
0xe1aa00d9,
0xe2400000,
0x000a0000,
0xe19710b0,
-0xe2511001,
+0xe2511000,
+0x000a0000,
0xe18710b0,
-0x0a000000,
+0x3a000000,
0x00050091,
0x00000000,
0xe1aa00d9,
0xe2400000,
0x000a0000,
0xe19710b0,
-0xe2511001,
+0xe2511000,
+0x000a0000,
0xe18710b0,
-0x0a000000,
+0x3a000000,
0x00050091,
0x00000000,
0xe5d6c000,
0xe2400000,
0x000a0000,
0xe19710b0,
-0xe2511001,
+0xe2511000,
+0x000a0000,
0xe18710b0,
-0x0a000000,
+0x3a000000,
0x00050093,
0x00000000,
0xe5180000,
case BC_FORL:
#if LJ_HASJIT
- dasm_put(Dst, 5363, -GG_DISP2HOT);
+ dasm_put(Dst, 5363, -GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_FORI:
case BC_IFORL:
vk = (op == BC_IFORL || op == BC_JFORL);
- dasm_put(Dst, 5373);
+ dasm_put(Dst, 5374);
if (op != BC_JFORL) {
- dasm_put(Dst, 5375);
+ dasm_put(Dst, 5376);
}
if (!vk) {
- dasm_put(Dst, 5377, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 5378, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 5395, -LJ_TISNUM);
+ dasm_put(Dst, 5396, -LJ_TISNUM);
if (op == BC_IFORL) {
- dasm_put(Dst, 5403);
+ dasm_put(Dst, 5404);
} else {
- dasm_put(Dst, 5405);
+ dasm_put(Dst, 5406);
}
- dasm_put(Dst, 5408);
+ dasm_put(Dst, 5409);
}
- dasm_put(Dst, 5413);
+ dasm_put(Dst, 5414);
if (op == BC_FORI) {
- dasm_put(Dst, 5415);
+ dasm_put(Dst, 5416);
} else if (op == BC_JFORI) {
- dasm_put(Dst, 5417);
+ dasm_put(Dst, 5418);
} else if (op == BC_IFORL) {
- dasm_put(Dst, 5420);
+ dasm_put(Dst, 5421);
}
if (vk) {
- dasm_put(Dst, 5422);
+ dasm_put(Dst, 5423);
}
- dasm_put(Dst, 5424);
+ dasm_put(Dst, 5425);
if (op == BC_JFORI || op == BC_JFORL) {
- dasm_put(Dst, 5429, BC_JLOOP);
+ dasm_put(Dst, 5430, BC_JLOOP);
}
- dasm_put(Dst, 5432);
+ dasm_put(Dst, 5433);
if (!vk) {
- dasm_put(Dst, 5439);
+ dasm_put(Dst, 5440);
} else {
- dasm_put(Dst, 5441);
+ dasm_put(Dst, 5442);
}
- dasm_put(Dst, 5443);
+ dasm_put(Dst, 5444);
if (!vk) {
- dasm_put(Dst, 5447, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 5448, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 5459);
+ dasm_put(Dst, 5460);
}
- dasm_put(Dst, 5468);
+ dasm_put(Dst, 5469);
if (op == BC_FORI) {
- dasm_put(Dst, 5472);
+ dasm_put(Dst, 5473);
} else if (op == BC_JFORI) {
- dasm_put(Dst, 5474, BC_JLOOP);
+ dasm_put(Dst, 5475, BC_JLOOP);
} else if (op == BC_IFORL) {
- dasm_put(Dst, 5479);
+ dasm_put(Dst, 5480);
} else {
- dasm_put(Dst, 5481, BC_JLOOP);
+ dasm_put(Dst, 5482, BC_JLOOP);
}
- dasm_put(Dst, 5484);
+ dasm_put(Dst, 5485);
if (vk) {
- dasm_put(Dst, 5490);
+ dasm_put(Dst, 5491);
}
- dasm_put(Dst, 5495);
+ dasm_put(Dst, 5496);
break;
case BC_ITERL:
#if LJ_HASJIT
- dasm_put(Dst, 5501, -GG_DISP2HOT);
+ dasm_put(Dst, 5502, -GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
break;
#endif
case BC_IITERL:
- dasm_put(Dst, 5511);
+ dasm_put(Dst, 5513);
if (op == BC_JITERL) {
- dasm_put(Dst, 5513, -LJ_TNIL, BC_JLOOP);
+ dasm_put(Dst, 5515, -LJ_TNIL, BC_JLOOP);
} else {
- dasm_put(Dst, 5519, -LJ_TNIL);
+ dasm_put(Dst, 5521, -LJ_TNIL);
}
- dasm_put(Dst, 5525);
+ dasm_put(Dst, 5527);
break;
case BC_LOOP:
#if LJ_HASJIT
- dasm_put(Dst, 5532, -GG_DISP2HOT);
+ dasm_put(Dst, 5534, -GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_ILOOP:
- dasm_put(Dst, 5542);
+ dasm_put(Dst, 5545);
break;
case BC_JLOOP:
#if LJ_HASJIT
- dasm_put(Dst, 5549, DISPATCH_J(trace), DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
+ dasm_put(Dst, 5552, DISPATCH_J(trace), DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
#endif
break;
case BC_JMP:
- dasm_put(Dst, 5563);
+ dasm_put(Dst, 5566);
break;
/* -- Function headers -------------------------------------------------- */
case BC_FUNCF:
#if LJ_HASJIT
- dasm_put(Dst, 5572, -GG_DISP2HOT);
+ dasm_put(Dst, 5575, -GG_DISP2HOT, HOTCOUNT_CALL);
#endif
case BC_FUNCV: /* NYI: compiled vararg functions. */
break;
break;
#endif
case BC_IFUNCF:
- dasm_put(Dst, 5582, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
+ dasm_put(Dst, 5586, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
if (op != BC_JFUNCF) {
- dasm_put(Dst, 5592);
+ dasm_put(Dst, 5596);
}
- dasm_put(Dst, 5595, ~LJ_TNIL);
+ dasm_put(Dst, 5599, ~LJ_TNIL);
if (op == BC_JFUNCF) {
- dasm_put(Dst, 5602, BC_JLOOP);
+ dasm_put(Dst, 5606, BC_JLOOP);
} else {
- dasm_put(Dst, 5606);
+ dasm_put(Dst, 5610);
}
- dasm_put(Dst, 5611);
+ dasm_put(Dst, 5615);
break;
case BC_JFUNCV:
#if !LJ_HASJIT
break;
#endif
- dasm_put(Dst, 5617);
+ dasm_put(Dst, 5621);
break; /* NYI: compiled vararg functions. */
case BC_IFUNCV:
- dasm_put(Dst, 5619, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
+ dasm_put(Dst, 5623, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
break;
case BC_FUNCC:
case BC_FUNCCW:
if (op == BC_FUNCC) {
- dasm_put(Dst, 5660, Dt8(->f));
+ dasm_put(Dst, 5664, Dt8(->f));
} else {
- dasm_put(Dst, 5663, DISPATCH_GL(wrapf));
+ dasm_put(Dst, 5667, DISPATCH_GL(wrapf));
}
- dasm_put(Dst, 5666, Dt1(->maxstack), Dt1(->base), Dt1(->top));
+ dasm_put(Dst, 5670, Dt1(->maxstack), Dt1(->base), Dt1(->top));
if (op == BC_FUNCCW) {
- dasm_put(Dst, 5676, Dt8(->f));
+ dasm_put(Dst, 5680, Dt8(->f));
}
- dasm_put(Dst, 5679, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
+ dasm_put(Dst, 5683, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
break;
/* ---------------------------------------------------------------------- */
build_subroutines(ctx);
- dasm_put(Dst, 5701);
+ dasm_put(Dst, 5705);
for (op = 0; op < BC__MAX; op++)
build_ins(ctx, (BCOp)op, op);
182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,6,255,65,199,71,252,
252,237,65,131,199,8,255,199,68,194,252,244,237,255,131,192,1,252,233,244,
5,248,7,141,171,233,252,247,197,237,15,133,244,14,41,252,234,255,1,252,233,
- 255,137,221,209,252,237,129,229,239,102,65,131,172,253,46,233,1,15,132,244,
- 148,255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,129,121,253,12,
- 239,15,133,244,60,129,121,253,20,239,15,133,244,60,139,41,131,121,16,0,15,
- 140,244,251,255,129,121,253,12,239,15,133,244,165,129,121,253,20,239,15,133,
- 244,165,255,139,105,16,133,252,237,15,136,244,251,3,41,15,128,244,247,137,
- 41,255,59,105,8,199,65,28,237,137,105,24,255,15,142,244,253,248,1,248,6,141,
- 156,253,131,233,255,141,156,253,131,233,15,183,67,252,254,15,142,245,248,
- 1,248,6,255,15,143,244,253,248,6,141,156,253,131,233,248,1,255,248,7,139,
- 3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,5,
- 255,3,41,15,128,244,1,137,41,255,15,141,244,7,255,141,156,253,131,233,15,
+ 255,137,221,209,252,237,129,229,239,102,65,129,172,253,46,233,238,15,130,
+ 244,148,255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,129,121,253,
+ 12,239,15,133,244,60,129,121,253,20,239,15,133,244,60,139,41,131,121,16,0,
+ 15,140,244,251,255,129,121,253,12,239,15,133,244,165,129,121,253,20,239,15,
+ 133,244,165,255,139,105,16,133,252,237,15,136,244,251,3,41,15,128,244,247,
+ 137,41,255,59,105,8,199,65,28,237,137,105,24,255,15,142,244,253,248,1,248,
+ 6,141,156,253,131,233,255,141,156,253,131,233,15,183,67,252,254,15,142,245,
+ 248,1,248,6,255,15,143,244,253,248,6,141,156,253,131,233,248,1,255,248,7,
+ 139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,
+ 5,255,3,41,15,128,244,1,137,41,255,15,141,244,7,255,141,156,253,131,233,15,
183,67,252,254,15,141,245,255,15,140,244,7,255,252,233,244,6,248,9,255,129,
121,253,4,239,255,15,131,244,60,129,121,253,12,239,15,131,244,60,255,129,
121,253,12,239,15,131,244,165,129,121,253,20,239,15,131,244,165,255,139,105,
139,4,129,72,139,128,233,139,108,36,24,65,137,150,233,65,137,174,233,76,137,
36,36,76,137,108,36,8,72,131,252,236,16,252,255,224,255,141,156,253,131,233,
139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,
- 137,221,209,252,237,129,229,239,102,65,131,172,253,46,233,1,15,132,244,150,
- 255,68,139,187,233,139,108,36,24,141,12,202,59,141,233,15,135,244,24,15,182,
- 139,233,57,200,15,134,244,249,248,2,255,15,183,67,252,254,252,233,245,255,
- 248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,2,
- 255,141,44,197,237,141,4,194,68,139,122,252,248,137,104,252,252,68,137,120,
- 252,248,139,108,36,24,141,12,200,59,141,233,15,135,244,23,137,209,137,194,
- 15,182,171,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244,
- 249,68,139,121,252,248,68,137,56,68,139,121,252,252,68,137,120,4,131,192,
- 8,199,65,252,252,237,131,252,237,1,15,133,244,1,248,2,255,68,139,187,233,
- 139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,
- 248,3,199,64,4,237,131,192,8,131,252,237,1,15,133,244,3,252,233,244,2,255,
- 139,106,252,248,76,139,189,233,139,108,36,24,141,68,194,252,248,137,149,233,
- 141,136,233,59,141,233,137,133,233,255,76,137,252,254,137,252,239,255,15,
- 135,244,22,65,199,134,233,237,255,65,252,255,215,255,65,252,255,150,233,255,
- 65,199,134,233,237,139,149,233,141,12,194,252,247,217,3,141,233,139,90,252,
- 252,252,233,244,12,255,254,0
+ 137,221,209,252,237,129,229,239,102,65,129,172,253,46,233,238,15,130,244,
+ 150,255,68,139,187,233,139,108,36,24,141,12,202,59,141,233,15,135,244,24,
+ 15,182,139,233,57,200,15,134,244,249,248,2,255,15,183,67,252,254,252,233,
+ 245,255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,
+ 244,2,255,141,44,197,237,141,4,194,68,139,122,252,248,137,104,252,252,68,
+ 137,120,252,248,139,108,36,24,141,12,200,59,141,233,15,135,244,23,137,209,
+ 137,194,15,182,171,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209,
+ 15,131,244,249,68,139,121,252,248,68,137,56,68,139,121,252,252,68,137,120,
+ 4,131,192,8,199,65,252,252,237,131,252,237,1,15,133,244,1,248,2,255,68,139,
+ 187,233,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
+ 238,255,248,3,199,64,4,237,131,192,8,131,252,237,1,15,133,244,3,252,233,244,
+ 2,255,139,106,252,248,76,139,189,233,139,108,36,24,141,68,194,252,248,137,
+ 149,233,141,136,233,59,141,233,137,133,233,255,76,137,252,254,137,252,239,
+ 255,15,135,244,22,65,199,134,233,237,255,65,252,255,215,255,65,252,255,150,
+ 233,255,65,199,134,233,237,139,149,233,141,12,194,252,247,217,3,141,233,139,
+ 90,252,252,252,233,244,12,255,254,0
};
enum {
case BC_FORL:
#if LJ_HASJIT
- dasm_put(Dst, 15309, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15309, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_ITERL:
#if LJ_HASJIT
- dasm_put(Dst, 15309, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15309, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_LOOP:
#if LJ_HASJIT
- dasm_put(Dst, 15309, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15309, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_FUNCF:
#if LJ_HASJIT
- dasm_put(Dst, 15842, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15842, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
#endif
case BC_FUNCV: /* NYI: compiled vararg functions. */
break;
36,252,235,248,6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,
237,255,131,192,1,252,233,244,5,248,7,141,174,233,252,247,197,237,15,133,
244,14,41,252,234,255,1,252,233,255,137,252,245,209,252,237,129,229,239,102,
- 131,172,253,43,233,1,15,132,244,148,255,141,12,202,255,129,121,253,4,239,
+ 129,172,253,43,233,238,15,130,244,148,255,141,12,202,255,129,121,253,4,239,
15,133,244,255,255,129,121,253,12,239,15,133,244,60,129,121,253,20,239,15,
133,244,60,139,41,131,121,16,0,15,140,244,251,255,129,121,253,12,239,15,133,
244,165,129,121,253,20,239,15,133,244,165,255,139,105,16,133,252,237,15,136,
15,127,153,233,102,68,15,127,161,233,102,68,15,127,169,233,102,68,15,127,
177,233,102,68,15,127,185,233,252,255,224,255,141,180,253,134,233,139,6,15,
182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,137,252,245,
- 209,252,237,129,229,239,102,131,172,253,43,233,1,15,132,244,150,255,139,190,
- 233,139,108,36,96,141,12,202,59,141,233,15,135,244,24,15,182,142,233,57,200,
- 15,134,244,249,248,2,255,15,183,70,252,254,252,233,245,255,248,3,199,68,194,
- 252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,2,255,141,44,197,237,
- 141,4,194,139,122,252,248,137,104,252,252,137,120,252,248,139,108,36,96,141,
- 12,200,59,141,233,15,135,244,23,137,209,137,194,15,182,174,233,133,252,237,
- 15,132,244,248,248,1,131,193,8,57,209,15,131,244,249,139,121,252,248,137,
- 56,139,121,252,252,137,120,4,131,192,8,199,65,252,252,237,131,252,237,1,15,
- 133,244,1,248,2,255,139,190,233,139,6,15,182,204,15,182,232,131,198,4,193,
- 232,16,252,255,36,252,235,255,248,3,199,64,4,237,131,192,8,131,252,237,1,
- 15,133,244,3,252,233,244,2,255,139,106,252,248,72,139,189,233,139,108,36,
- 96,141,68,194,252,248,137,149,233,141,136,233,59,141,233,137,133,233,255,
- 72,137,252,250,137,252,233,255,15,135,244,22,199,131,233,237,255,252,255,
- 215,255,252,255,147,233,255,199,131,233,237,139,149,233,141,12,194,252,247,
- 217,3,141,233,139,114,252,252,252,233,244,12,255,254,0
+ 209,252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,150,255,139,
+ 190,233,139,108,36,96,141,12,202,59,141,233,15,135,244,24,15,182,142,233,
+ 57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233,245,255,248,3,199,
+ 68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,2,255,141,44,
+ 197,237,141,4,194,139,122,252,248,137,104,252,252,137,120,252,248,139,108,
+ 36,96,141,12,200,59,141,233,15,135,244,23,137,209,137,194,15,182,174,233,
+ 133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244,249,139,121,
+ 252,248,137,56,139,121,252,252,137,120,4,131,192,8,199,65,252,252,237,131,
+ 252,237,1,15,133,244,1,248,2,255,139,190,233,139,6,15,182,204,15,182,232,
+ 131,198,4,193,232,16,252,255,36,252,235,255,248,3,199,64,4,237,131,192,8,
+ 131,252,237,1,15,133,244,3,252,233,244,2,255,139,106,252,248,72,139,189,233,
+ 139,108,36,96,141,68,194,252,248,137,149,233,141,136,233,59,141,233,137,133,
+ 233,255,72,137,252,250,137,252,233,255,15,135,244,22,199,131,233,237,255,
+ 252,255,215,255,252,255,147,233,255,199,131,233,237,139,149,233,141,12,194,
+ 252,247,217,3,141,233,139,114,252,252,252,233,244,12,255,254,0
};
enum {
case BC_FORL:
#if LJ_HASJIT
- dasm_put(Dst, 15111, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15111, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_ITERL:
#if LJ_HASJIT
- dasm_put(Dst, 15111, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15111, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_LOOP:
#if LJ_HASJIT
- dasm_put(Dst, 15111, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15111, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_FUNCF:
#if LJ_HASJIT
- dasm_put(Dst, 15710, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 15710, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
#endif
case BC_FUNCV: /* NYI: compiled vararg functions. */
break;
| mov reg, PC
| shr reg, 1
| and reg, HOTCOUNT_PCMASK
-| sub word [DISPATCH+reg+GG_DISP2HOT], 1
-| jz ->vm_hotloop
+| sub word [DISPATCH+reg+GG_DISP2HOT], HOTCOUNT_LOOP
+| jb ->vm_hotloop
|.endmacro
|
|.macro hotcall, reg
| mov reg, PC
| shr reg, 1
| and reg, HOTCOUNT_PCMASK
-| sub word [DISPATCH+reg+GG_DISP2HOT], 1
-| jz ->vm_hotcall
+| sub word [DISPATCH+reg+GG_DISP2HOT], HOTCOUNT_CALL
+| jb ->vm_hotcall
|.endmacro
|
|// Set current VM state.
204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,6,255,199,71,252,252,
237,131,199,8,255,199,68,194,252,244,237,255,131,192,1,252,233,244,5,248,
7,141,174,233,252,247,197,237,15,133,244,14,41,252,234,255,1,252,233,255,
- 137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,15,132,244,148,
- 255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,129,121,253,12,239,
- 15,133,244,60,129,121,253,20,239,15,133,244,60,139,41,131,121,16,0,15,140,
- 244,251,255,129,121,253,12,239,15,133,244,165,129,121,253,20,239,15,133,244,
- 165,255,139,105,16,133,252,237,15,136,244,251,3,41,15,128,244,247,137,41,
- 255,59,105,8,199,65,28,237,137,105,24,255,15,142,244,253,248,1,248,6,141,
+ 137,252,245,209,252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,
+ 148,255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,129,121,253,12,
+ 239,15,133,244,60,129,121,253,20,239,15,133,244,60,139,41,131,121,16,0,15,
+ 140,244,251,255,129,121,253,12,239,15,133,244,165,129,121,253,20,239,15,133,
+ 244,165,255,139,105,16,133,252,237,15,136,244,251,3,41,15,128,244,247,137,
+ 41,255,59,105,8,199,65,28,237,137,105,24,255,15,142,244,253,248,1,248,6,141,
180,253,134,233,255,141,180,253,134,233,15,183,70,252,254,15,142,245,248,
1,248,6,255,15,143,244,253,248,6,141,180,253,134,233,248,1,255,248,7,139,
6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,5,255,3,41,
134,233,139,1,137,105,252,252,137,65,252,248,255,139,139,233,139,4,129,139,
128,233,139,108,36,48,137,147,233,137,171,233,252,255,224,255,141,180,253,
134,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,
- 137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,15,132,244,150,
- 255,139,190,233,139,108,36,48,141,12,202,59,141,233,15,135,244,24,15,182,
- 142,233,57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233,245,255,
- 248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,2,
- 255,141,44,197,237,141,4,194,139,122,252,248,137,104,252,252,137,120,252,
+ 137,252,245,209,252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,
+ 150,255,139,190,233,139,108,36,48,141,12,202,59,141,233,15,135,244,24,15,
+ 182,142,233,57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233,245,
+ 255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,
+ 2,255,141,44,197,237,141,4,194,139,122,252,248,137,104,252,252,137,120,252,
248,139,108,36,48,141,12,200,59,141,233,15,135,244,23,137,209,137,194,15,
182,174,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244,
249,139,121,252,248,137,56,139,121,252,252,137,120,4,131,192,8,199,65,252,
case BC_FORL:
#if LJ_HASJIT
- dasm_put(Dst, 16297, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 16297, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_ITERL:
#if LJ_HASJIT
- dasm_put(Dst, 16297, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 16297, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_LOOP:
#if LJ_HASJIT
- dasm_put(Dst, 16297, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 16297, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_FUNCF:
#if LJ_HASJIT
- dasm_put(Dst, 16808, HOTCOUNT_PCMASK, GG_DISP2HOT);
+ dasm_put(Dst, 16808, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
#endif
case BC_FUNCV: /* NYI: compiled vararg functions. */
break;
/* Initialize hotcount table. */
void lj_dispatch_init_hotcount(global_State *g)
{
- HotCount start = (HotCount)G2J(g)->param[JIT_P_hotloop];
+ int32_t hotloop = G2J(g)->param[JIT_P_hotloop];
+ HotCount start = (HotCount)(hotloop*HOTCOUNT_LOOP - 1);
HotCount *hotcount = G2GG(g)->hotcount;
uint32_t i;
for (i = 0; i < HOTCOUNT_SIZE; i++)
#define HOTCOUNT_SIZE 64
#define HOTCOUNT_PCMASK ((HOTCOUNT_SIZE-1)*sizeof(HotCount))
+/* Hotcount decrements. */
+#define HOTCOUNT_LOOP 2
+#define HOTCOUNT_CALL 1
+
/* This solves a circular dependency problem -- bump as needed. Sigh. */
#define GG_NUM_ASMFF 62
} HotPenalty;
#define PENALTY_SLOTS 64 /* Penalty cache slot. Must be a power of 2. */
-#define PENALTY_MIN 36 /* Minimum penalty value. */
+#define PENALTY_MIN (36*2) /* Minimum penalty value. */
#define PENALTY_MAX 60000 /* Maximum penalty value. */
#define PENALTY_RNDBITS 4 /* # of random bits to add to penalty value. */
/* A hotcount triggered. Start recording a root trace. */
void LJ_FASTCALL lj_trace_hot(jit_State *J, const BCIns *pc)
{
- ERRNO_SAVE
/* Note: pc is the interpreter bytecode PC here. It's offset by 1. */
- hotcount_set(J2GG(J), pc, J->param[JIT_P_hotloop]+1); /* Reset hotcount. */
+ ERRNO_SAVE
+ /* Reset hotcount. */
+ hotcount_set(J2GG(J), pc, J->param[JIT_P_hotloop]*HOTCOUNT_LOOP);
/* Only start a new trace if not recording or inside __gc call or vmevent. */
if (J->state == LJ_TRACE_IDLE &&
!(J2G(J)->hookmask & (HOOK_GC|HOOK_VMEVENT))) {