aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2012-03-29 01:12:54 +0200
committerMike Pall <mike>2012-03-29 01:14:24 +0200
commit1980ee95b0d5343822d6c92abf9f8feb15ac9764 (patch)
tree9b0a85ee294d2b1004118a7edc1356a9dedbfbdf
parenta53a5497742c5249a6cad7e3e25075b8e679ba85 (diff)
downloadluajit-1980ee95b0d5343822d6c92abf9f8feb15ac9764.tar.gz
luajit-1980ee95b0d5343822d6c92abf9f8feb15ac9764.tar.bz2
luajit-1980ee95b0d5343822d6c92abf9f8feb15ac9764.zip
PPC: Use builtin D-Cache/I-Cache sync code.
-rw-r--r--src/buildvm_ppc.dasc25
-rw-r--r--src/buildvm_ppc.h830
-rw-r--r--src/lj_mcode.c20
-rw-r--r--src/lj_vm.h3
4 files changed, 458 insertions, 420 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 132242d8..027e75b0 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -2533,6 +2533,31 @@ static void build_subroutines(BuildCtx *ctx)
2533 |//-- Miscellaneous functions -------------------------------------------- 2533 |//-- Miscellaneous functions --------------------------------------------
2534 |//----------------------------------------------------------------------- 2534 |//-----------------------------------------------------------------------
2535 | 2535 |
2536 |// void lj_vm_cachesync(void *start, void *end)
2537 |// Flush D-Cache and invalidate I-Cache. Assumes 32 byte cache line size.
2538 |// This is a good lower bound, except for very ancient PPC models.
2539 |->vm_cachesync:
2540 | // Compute start of first cache line and number of cache lines.
2541 | rlwinm CARG1, CARG1, 0, 0, 26
2542 | sub CARG2, CARG2, CARG1
2543 | addi CARG2, CARG2, 31
2544 | rlwinm. CARG2, CARG2, 27, 5, 31
2545 | beqlr
2546 | mtctr CARG2
2547 | mr CARG3, CARG1
2548 |1: // Flush D-Cache.
2549 | dcbst r0, CARG1
2550 | addi CARG1, CARG1, 32
2551 | bdnz <1
2552 | sync
2553 | mtctr CARG2
2554 |1: // Invalidate I-Cache.
2555 | icbi r0, CARG3
2556 | addi CARG3, CARG3, 32
2557 | bdnz <1
2558 | isync
2559 | blr
2560 |
2536 |//----------------------------------------------------------------------- 2561 |//-----------------------------------------------------------------------
2537 |//-- FFI helper functions ----------------------------------------------- 2562 |//-- FFI helper functions -----------------------------------------------
2538 |//----------------------------------------------------------------------- 2563 |//-----------------------------------------------------------------------
diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h
index c8d76fda..81285d63 100644
--- a/src/buildvm_ppc.h
+++ b/src/buildvm_ppc.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[7740] = { 15static const unsigned int build_actionlist[7762] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180x72000000, 180x72000000,
@@ -4103,6 +4103,28 @@ static const unsigned int build_actionlist[7740] = {
41030x7c810808, 41030x7c810808,
41040x00000000, 41040x00000000,
41050x0006009e, 41050x0006009e,
41060x54630034,
41070x7c832050,
41080x3884001f,
41090x5484d97f,
41100x4d820020,
41110x7c8903a6,
41120x7c651b78,
41130x0006000b,
41140x7c00186c,
41150x38630020,
41160x42000000,
41170x0005080b,
41180x7c0004ac,
41190x7c8903a6,
41200x0006000b,
41210x7c002fac,
41220x38a50020,
41230x42000000,
41240x0005080b,
41250x4c00012c,
41260x4e800020,
41270x0006009f,
41060x00000000, 41280x00000000,
41070x9421fef0, 41290x9421fef0,
41080x91c10000, 41300x91c10000,
@@ -4286,7 +4308,7 @@ static const unsigned int build_actionlist[7740] = {
42860x48000000, 43080x48000000,
42870x0005001a, 43090x0005001a,
42880x00000000, 43100x00000000,
42890x0006009f, 43110x000600a0,
42900x00000000, 43120x00000000,
42910x81030000, 43130x81030000,
42920x00098200, 43140x00098200,
@@ -4522,10 +4544,10 @@ static const unsigned int build_actionlist[7740] = {
45220x00098200, 45440x00098200,
45230x00000000, 45450x00000000,
45240x409d0000, 45460x409d0000,
45250x000508a0, 45470x000508a1,
45260x00000000, 45480x00000000,
45270x409d0000, 45490x409d0000,
45280x000508a1, 45500x000508a2,
45290x00000000, 45510x00000000,
45300x7c14706e, 45520x7c14706e,
45310x81300000, 45530x81300000,
@@ -4696,10 +4718,10 @@ static const unsigned int build_actionlist[7740] = {
46960x3d290000, 47180x3d290000,
46970x00098200, 47190x00098200,
46980x00000000, 47200x00000000,
46990x000600a0,
47000x00000000,
47010x000600a1, 47210x000600a1,
47020x00000000, 47220x00000000,
47230x000600a2,
47240x00000000,
47030x40820000, 47250x40820000,
47040x00050807, 47260x00050807,
47050x40860000, 47270x40860000,
@@ -4707,10 +4729,10 @@ static const unsigned int build_actionlist[7740] = {
47070x7c042800, 47290x7c042800,
47080x0006000e, 47300x0006000e,
47090x00000000, 47310x00000000,
47100x000600a0,
47110x00000000,
47120x000600a1, 47320x000600a1,
47130x00000000, 47330x00000000,
47340x000600a2,
47350x00000000,
47140x7c0ea02e, 47360x7c0ea02e,
47150x3a100004, 47370x3a100004,
47160x7c0ea4ae, 47380x7c0ea4ae,
@@ -5550,7 +5572,7 @@ static const unsigned int build_actionlist[7740] = {
55500x40800000, 55720x40800000,
55510x00050842, 55730x00050842,
55520x00000000, 55740x00000000,
55530x000600a2, 55750x000600a3,
55540xfc2e7824, 55760xfc2e7824,
55550x48000001, 55770x48000001,
55560x00030010, 55780x00030010,
@@ -5606,7 +5628,7 @@ static const unsigned int build_actionlist[7740] = {
56060x40800000, 56280x40800000,
56070x00050840, 56290x00050840,
56080x00000000, 56300x00000000,
56090x000600a2, 56310x000600a3,
56100xfc2e7824, 56320xfc2e7824,
56110x48000001, 56330x48000001,
56120x00030010, 56340x00030010,
@@ -5699,7 +5721,7 @@ static const unsigned int build_actionlist[7740] = {
56990x00050842, 57210x00050842,
57000x00000000, 57220x00000000,
57010x48000000, 57230x48000000,
57020x000500a2, 57240x000500a3,
57030x00000000, 57250x00000000,
57040x7d0e502e, 57260x7d0e502e,
57050x00000000, 57270x00000000,
@@ -5746,7 +5768,7 @@ static const unsigned int build_actionlist[7740] = {
57460x00050840, 57680x00050840,
57470x00000000, 57690x00000000,
57480x48000000, 57700x48000000,
57490x000500a2, 57710x000500a3,
57500x00000000, 57720x00000000,
57510x7d0e502e, 57730x7d0e502e,
57520x7c2e54ae, 57740x7c2e54ae,
@@ -6226,10 +6248,10 @@ static const unsigned int build_actionlist[7740] = {
62260x7d6f402e, 62480x7d6f402e,
62270x00000000, 62490x00000000,
62280x48000000, 62500x48000000,
62290x000500a3, 62510x000500a4,
62300x00000000, 62520x00000000,
62310x48000000, 62530x48000000,
62320x000500a4, 62540x000500a5,
62330x00000000, 62550x00000000,
62340x7c6a706e, 62560x7c6a706e,
62350x7c8b706e, 62570x7c8b706e,
@@ -6315,7 +6337,7 @@ static const unsigned int build_actionlist[7740] = {
63150x816b0004, 63370x816b0004,
63160x00000000, 63380x00000000,
63170x48000000, 63390x48000000,
63180x000500a3, 63400x000500a4,
63190x00000000, 63410x00000000,
63200x7c6a706e, 63420x7c6a706e,
63210x5568007e, 63430x5568007e,
@@ -6327,7 +6349,7 @@ static const unsigned int build_actionlist[7740] = {
63270x7d6f402e, 63490x7d6f402e,
63280x40820000, 63500x40820000,
63290x0005082d, 63510x0005082d,
63300x000600a3, 63520x000600a4,
63310x800a0000, 63530x800a0000,
63320x00098200, 63540x00098200,
63330x810b0000, 63550x810b0000,
@@ -6537,7 +6559,7 @@ static const unsigned int build_actionlist[7740] = {
65370x816b0004, 65590x816b0004,
65380x00000000, 65600x00000000,
65390x48000000, 65610x48000000,
65400x000500a4, 65620x000500a5,
65410x00060011, 65630x00060011,
65420x80110000, 65640x80110000,
65430x00098200, 65650x00098200,
@@ -6561,7 +6583,7 @@ static const unsigned int build_actionlist[7740] = {
65610x7d6f402e, 65830x7d6f402e,
65620x40820000, 65840x40820000,
65630x00050831, 65850x00050831,
65640x000600a4, 65860x000600a5,
65650x800a0000, 65870x800a0000,
65660x00098200, 65880x00098200,
65670x810b0000, 65890x810b0000,
@@ -7189,7 +7211,7 @@ static const unsigned int build_actionlist[7740] = {
71890x6a080000, 72110x6a080000,
71900x00090200, 72120x00090200,
71910x40820000, 72130x40820000,
71920x000508a5, 72140x000508a6,
71930x00060017, 72150x00060017,
71940x80f0fffc, 72160x80f0fffc,
71950x2c0c0008, 72170x2c0c0008,
@@ -7240,7 +7262,7 @@ static const unsigned int build_actionlist[7740] = {
72400x7ee9412e, 72620x7ee9412e,
72410x48000000, 72630x48000000,
72420x0005000f, 72640x0005000f,
72430x000600a5, 72650x000600a6,
72440x71090000, 72660x71090000,
72450x00090200, 72670x00090200,
72460x40820000, 72680x40820000,
@@ -7258,7 +7280,7 @@ static const unsigned int build_actionlist[7740] = {
72580x6a080000, 72800x6a080000,
72590x00090200, 72810x00090200,
72600x40a20000, 72820x40a20000,
72610x000508a5, 72830x000508a6,
72620x80f0fffc, 72840x80f0fffc,
72630x392efff8, 72850x392efff8,
72640x54ea5d78, 72860x54ea5d78,
@@ -7894,6 +7916,7 @@ enum {
7894 GLOB_vm_trunc, 7916 GLOB_vm_trunc,
7895 GLOB_vm_modi, 7917 GLOB_vm_modi,
7896 GLOB_vm_foldarith, 7918 GLOB_vm_foldarith,
7919 GLOB_vm_cachesync,
7897 GLOB_vm_ffi_callback, 7920 GLOB_vm_ffi_callback,
7898 GLOB_vm_ffi_call, 7921 GLOB_vm_ffi_call,
7899 GLOB_BC_ISEQN_Z, 7922 GLOB_BC_ISEQN_Z,
@@ -8043,6 +8066,7 @@ static const char *const globnames[] = {
8043 "vm_trunc", 8066 "vm_trunc",
8044 "vm_modi", 8067 "vm_modi",
8045 "vm_foldarith", 8068 "vm_foldarith",
8069 "vm_cachesync",
8046 "vm_ffi_callback", 8070 "vm_ffi_callback",
8047 "vm_ffi_call", 8071 "vm_ffi_call",
8048 "BC_ISEQN_Z", 8072 "BC_ISEQN_Z",
@@ -8528,19 +8552,19 @@ static void build_subroutines(BuildCtx *ctx)
8528 dasm_put(Dst, 4089); 8552 dasm_put(Dst, 4089);
8529#if LJ_HASFFI 8553#if LJ_HASFFI
8530#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) 8554#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
8531 dasm_put(Dst, 4091, 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8); 8555 dasm_put(Dst, 4113, 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8);
8532 dasm_put(Dst, 4139, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1]), DtE(->cb.gpr[2])); 8556 dasm_put(Dst, 4161, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1]), DtE(->cb.gpr[2]));
8533 dasm_put(Dst, 4186, DtE(->cb.fpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[3]), DtE(->cb.gpr[4]), DtE(->cb.fpr[4]), DtE(->cb.gpr[5]), DtE(->cb.fpr[5]), DtE(->cb.gpr[6]), DtE(->cb.fpr[6]), DtE(->cb.gpr[7]), DtE(->cb.fpr[7]), 272+8, DtE(->cb.stack), Dt1(->base), LJ_TISNUM, Dt1(->top), LJ_TNIL, ~LJ_VMST_INTERP, DISPATCH_GL(vmstate), Dt7(->pc)); 8557 dasm_put(Dst, 4208, DtE(->cb.fpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[3]), DtE(->cb.gpr[4]), DtE(->cb.fpr[4]), DtE(->cb.gpr[5]), DtE(->cb.fpr[5]), DtE(->cb.gpr[6]), DtE(->cb.fpr[6]), DtE(->cb.gpr[7]), DtE(->cb.fpr[7]), 272+8, DtE(->cb.stack), Dt1(->base), LJ_TISNUM, Dt1(->top), LJ_TNIL, ~LJ_VMST_INTERP, DISPATCH_GL(vmstate), Dt7(->pc));
8534#endif 8558#endif
8535 dasm_put(Dst, 4250); 8559 dasm_put(Dst, 4272);
8536#if LJ_HASFFI 8560#if LJ_HASFFI
8537 dasm_put(Dst, 4252, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1])); 8561 dasm_put(Dst, 4274, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]));
8538#endif 8562#endif
8539 dasm_put(Dst, 4273); 8563 dasm_put(Dst, 4295);
8540#if LJ_HASFFI 8564#if LJ_HASFFI
8541#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) 8565#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
8542 dasm_put(Dst, 4275, DtF(->spadj), DtF(->nsp), DtF(->nfpr), DtF(->stack), 31-2, DtF(->fpr[0]), DtF(->fpr[1]), DtF(->fpr[2]), DtF(->fpr[3]), DtF(->fpr[4]), DtF(->fpr[5]), DtF(->fpr[6]), DtF(->fpr[7]), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2])); 8566 dasm_put(Dst, 4297, DtF(->spadj), DtF(->nsp), DtF(->nfpr), DtF(->stack), 31-2, DtF(->fpr[0]), DtF(->fpr[1]), DtF(->fpr[2]), DtF(->fpr[3]), DtF(->fpr[4]), DtF(->fpr[5]), DtF(->fpr[6]), DtF(->fpr[7]), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]));
8543 dasm_put(Dst, 4332, DtF(->gpr[3]), DtF(->gpr[4]), DtF(->gpr[5]), DtF(->gpr[6]), DtF(->gpr[7]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->fpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3])); 8567 dasm_put(Dst, 4354, DtF(->gpr[3]), DtF(->gpr[4]), DtF(->gpr[5]), DtF(->gpr[6]), DtF(->gpr[7]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->fpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]));
8544#endif 8568#endif
8545} 8569}
8546 8570
@@ -8548,7 +8572,7 @@ static void build_subroutines(BuildCtx *ctx)
8548static void build_ins(BuildCtx *ctx, BCOp op, int defop) 8572static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8549{ 8573{
8550 int vk = 0; 8574 int vk = 0;
8551 dasm_put(Dst, 4364, defop); 8575 dasm_put(Dst, 4386, defop);
8552 8576
8553 switch (op) { 8577 switch (op) {
8554 8578
@@ -8558,224 +8582,224 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8558 8582
8559 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 8583 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
8560 if (LJ_DUALNUM) { 8584 if (LJ_DUALNUM) {
8561 dasm_put(Dst, 4366, -(BCBIAS_J*4 >> 16)); 8585 dasm_put(Dst, 4388, -(BCBIAS_J*4 >> 16));
8562 if (op == BC_ISLT) { 8586 if (op == BC_ISLT) {
8563 dasm_put(Dst, 4383); 8587 dasm_put(Dst, 4405);
8564 } else if (op == BC_ISGE) { 8588 } else if (op == BC_ISGE) {
8565 dasm_put(Dst, 4386); 8589 dasm_put(Dst, 4408);
8566 } else if (op == BC_ISLE) { 8590 } else if (op == BC_ISLE) {
8567 dasm_put(Dst, 4389); 8591 dasm_put(Dst, 4411);
8568 } else { 8592 } else {
8569 dasm_put(Dst, 4392); 8593 dasm_put(Dst, 4414);
8570 } 8594 }
8571 dasm_put(Dst, 4395); 8595 dasm_put(Dst, 4417);
8572 if (op == BC_ISLT) { 8596 if (op == BC_ISLT) {
8573 dasm_put(Dst, 4434); 8597 dasm_put(Dst, 4456);
8574 } else if (op == BC_ISGE) { 8598 } else if (op == BC_ISGE) {
8575 dasm_put(Dst, 4437); 8599 dasm_put(Dst, 4459);
8576 } else if (op == BC_ISLE) { 8600 } else if (op == BC_ISLE) {
8577 dasm_put(Dst, 4440); 8601 dasm_put(Dst, 4462);
8578 } else { 8602 } else {
8579 dasm_put(Dst, 4444); 8603 dasm_put(Dst, 4466);
8580 } 8604 }
8581 dasm_put(Dst, 4448); 8605 dasm_put(Dst, 4470);
8582 } else { 8606 } else {
8583 dasm_put(Dst, 4451, -(BCBIAS_J*4 >> 16)); 8607 dasm_put(Dst, 4473, -(BCBIAS_J*4 >> 16));
8584 if (op == BC_ISLT) { 8608 if (op == BC_ISLT) {
8585 dasm_put(Dst, 4468); 8609 dasm_put(Dst, 4490);
8586 } else if (op == BC_ISGE) { 8610 } else if (op == BC_ISGE) {
8587 dasm_put(Dst, 4471); 8611 dasm_put(Dst, 4493);
8588 } else if (op == BC_ISLE) { 8612 } else if (op == BC_ISLE) {
8589 dasm_put(Dst, 4474); 8613 dasm_put(Dst, 4496);
8590 } else { 8614 } else {
8591 dasm_put(Dst, 4478); 8615 dasm_put(Dst, 4500);
8592 } 8616 }
8593 dasm_put(Dst, 4482); 8617 dasm_put(Dst, 4504);
8594 } 8618 }
8595 break; 8619 break;
8596 8620
8597 case BC_ISEQV: case BC_ISNEV: 8621 case BC_ISEQV: case BC_ISNEV:
8598 vk = op == BC_ISEQV; 8622 vk = op == BC_ISEQV;
8599 if (LJ_DUALNUM) { 8623 if (LJ_DUALNUM) {
8600 dasm_put(Dst, 4495, -(BCBIAS_J*4 >> 16)); 8624 dasm_put(Dst, 4517, -(BCBIAS_J*4 >> 16));
8601 if (vk) { 8625 if (vk) {
8602 dasm_put(Dst, 4508); 8626 dasm_put(Dst, 4530);
8603 } else { 8627 } else {
8604 dasm_put(Dst, 4511); 8628 dasm_put(Dst, 4533);
8605 } 8629 }
8606 } else { 8630 } else {
8607 dasm_put(Dst, 4514, -(BCBIAS_J*4 >> 16)); 8631 dasm_put(Dst, 4536, -(BCBIAS_J*4 >> 16));
8608 if (vk) { 8632 if (vk) {
8609 dasm_put(Dst, 4531); 8633 dasm_put(Dst, 4553);
8610 } else { 8634 } else {
8611 dasm_put(Dst, 4535); 8635 dasm_put(Dst, 4557);
8612 } 8636 }
8613 dasm_put(Dst, 4539); 8637 dasm_put(Dst, 4561);
8614 } 8638 }
8615 dasm_put(Dst, 4551); 8639 dasm_put(Dst, 4573);
8616 if (!LJ_DUALNUM) { 8640 if (!LJ_DUALNUM) {
8617 dasm_put(Dst, 4553); 8641 dasm_put(Dst, 4575);
8618 } 8642 }
8619 if (LJ_HASFFI) { 8643 if (LJ_HASFFI) {
8620 dasm_put(Dst, 4556, LJ_TCDATA, LJ_TCDATA); 8644 dasm_put(Dst, 4578, LJ_TCDATA, LJ_TCDATA);
8621 } 8645 }
8622 dasm_put(Dst, 4561, ~LJ_TISPRI); 8646 dasm_put(Dst, 4583, ~LJ_TISPRI);
8623 if (LJ_HASFFI) { 8647 if (LJ_HASFFI) {
8624 dasm_put(Dst, 4566); 8648 dasm_put(Dst, 4588);
8625 } 8649 }
8626 dasm_put(Dst, 4568, ~LJ_TISTABUD); 8650 dasm_put(Dst, 4590, ~LJ_TISTABUD);
8627 if (LJ_HASFFI) { 8651 if (LJ_HASFFI) {
8628 dasm_put(Dst, 4571); 8652 dasm_put(Dst, 4593);
8629 } 8653 }
8630 dasm_put(Dst, 4574); 8654 dasm_put(Dst, 4596);
8631 if (vk) { 8655 if (vk) {
8632 dasm_put(Dst, 4582); 8656 dasm_put(Dst, 4604);
8633 } else { 8657 } else {
8634 dasm_put(Dst, 4587); 8658 dasm_put(Dst, 4609);
8635 } 8659 }
8636 if (LJ_DUALNUM) { 8660 if (LJ_DUALNUM) {
8637 dasm_put(Dst, 4592); 8661 dasm_put(Dst, 4614);
8638 } else { 8662 } else {
8639 dasm_put(Dst, 4607); 8663 dasm_put(Dst, 4629);
8640 } 8664 }
8641 dasm_put(Dst, 4610, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); 8665 dasm_put(Dst, 4632, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq);
8642 break; 8666 break;
8643 8667
8644 case BC_ISEQS: case BC_ISNES: 8668 case BC_ISEQS: case BC_ISNES:
8645 vk = op == BC_ISEQS; 8669 vk = op == BC_ISEQS;
8646 dasm_put(Dst, 4629, 32-1); 8670 dasm_put(Dst, 4651, 32-1);
8647 if (LJ_HASFFI) { 8671 if (LJ_HASFFI) {
8648 dasm_put(Dst, 4637, LJ_TCDATA); 8672 dasm_put(Dst, 4659, LJ_TCDATA);
8649 } 8673 }
8650 dasm_put(Dst, 4640, LJ_TSTR); 8674 dasm_put(Dst, 4662, LJ_TSTR);
8651 if (LJ_HASFFI) { 8675 if (LJ_HASFFI) {
8652 dasm_put(Dst, 4644); 8676 dasm_put(Dst, 4666);
8653 } 8677 }
8654 dasm_put(Dst, 4647, -(BCBIAS_J*4 >> 16)); 8678 dasm_put(Dst, 4669, -(BCBIAS_J*4 >> 16));
8655 if (vk) { 8679 if (vk) {
8656 dasm_put(Dst, 4655); 8680 dasm_put(Dst, 4677);
8657 } else { 8681 } else {
8658 dasm_put(Dst, 4657); 8682 dasm_put(Dst, 4679);
8659 } 8683 }
8660 dasm_put(Dst, 4659); 8684 dasm_put(Dst, 4681);
8661 break; 8685 break;
8662 8686
8663 case BC_ISEQN: case BC_ISNEN: 8687 case BC_ISEQN: case BC_ISNEN:
8664 vk = op == BC_ISEQN; 8688 vk = op == BC_ISEQN;
8665 if (LJ_DUALNUM) { 8689 if (LJ_DUALNUM) {
8666 dasm_put(Dst, 4671, -(BCBIAS_J*4 >> 16)); 8690 dasm_put(Dst, 4693, -(BCBIAS_J*4 >> 16));
8667 if (vk) { 8691 if (vk) {
8668 dasm_put(Dst, 4683); 8692 dasm_put(Dst, 4705);
8669 } else { 8693 } else {
8670 dasm_put(Dst, 4685); 8694 dasm_put(Dst, 4707);
8671 } 8695 }
8672 dasm_put(Dst, 4687); 8696 dasm_put(Dst, 4709);
8673 } else { 8697 } else {
8674 if (vk) { 8698 if (vk) {
8675 dasm_put(Dst, 4694); 8699 dasm_put(Dst, 4716);
8676 } else { 8700 } else {
8677 dasm_put(Dst, 4696); 8701 dasm_put(Dst, 4718);
8678 } 8702 }
8679 dasm_put(Dst, 4698, -(BCBIAS_J*4 >> 16)); 8703 dasm_put(Dst, 4720, -(BCBIAS_J*4 >> 16));
8680 } 8704 }
8681 if (vk) { 8705 if (vk) {
8682 dasm_put(Dst, 4711); 8706 dasm_put(Dst, 4733);
8683 if (!LJ_HASFFI) { 8707 if (!LJ_HASFFI) {
8684 dasm_put(Dst, 4716); 8708 dasm_put(Dst, 4738);
8685 } 8709 }
8686 } else { 8710 } else {
8687 dasm_put(Dst, 4718); 8711 dasm_put(Dst, 4740);
8688 if (!LJ_HASFFI) { 8712 if (!LJ_HASFFI) {
8689 dasm_put(Dst, 4722); 8713 dasm_put(Dst, 4744);
8690 } 8714 }
8691 dasm_put(Dst, 4724); 8715 dasm_put(Dst, 4746);
8692 } 8716 }
8693 dasm_put(Dst, 4727); 8717 dasm_put(Dst, 4749);
8694 if (LJ_HASFFI) { 8718 if (LJ_HASFFI) {
8695 dasm_put(Dst, 4738, LJ_TCDATA); 8719 dasm_put(Dst, 4760, LJ_TCDATA);
8696 } 8720 }
8697 if (LJ_DUALNUM) { 8721 if (LJ_DUALNUM) {
8698 dasm_put(Dst, 4746); 8722 dasm_put(Dst, 4768);
8699 } 8723 }
8700 break; 8724 break;
8701 8725
8702 case BC_ISEQP: case BC_ISNEP: 8726 case BC_ISEQP: case BC_ISNEP:
8703 vk = op == BC_ISEQP; 8727 vk = op == BC_ISEQP;
8704 dasm_put(Dst, 4770, 32-3); 8728 dasm_put(Dst, 4792, 32-3);
8705 if (LJ_HASFFI) { 8729 if (LJ_HASFFI) {
8706 dasm_put(Dst, 4777, LJ_TCDATA); 8730 dasm_put(Dst, 4799, LJ_TCDATA);
8707 } 8731 }
8708 dasm_put(Dst, 4780); 8732 dasm_put(Dst, 4802);
8709 if (LJ_HASFFI) { 8733 if (LJ_HASFFI) {
8710 dasm_put(Dst, 4782); 8734 dasm_put(Dst, 4804);
8711 } 8735 }
8712 dasm_put(Dst, 4785, -(BCBIAS_J*4 >> 16)); 8736 dasm_put(Dst, 4807, -(BCBIAS_J*4 >> 16));
8713 if (vk) { 8737 if (vk) {
8714 dasm_put(Dst, 4791); 8738 dasm_put(Dst, 4813);
8715 } else { 8739 } else {
8716 dasm_put(Dst, 4793); 8740 dasm_put(Dst, 4815);
8717 } 8741 }
8718 dasm_put(Dst, 4795); 8742 dasm_put(Dst, 4817);
8719 break; 8743 break;
8720 8744
8721 /* -- Unary test and copy ops ------------------------------------------- */ 8745 /* -- Unary test and copy ops ------------------------------------------- */
8722 8746
8723 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 8747 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
8724 dasm_put(Dst, 4807); 8748 dasm_put(Dst, 4829);
8725 if (op == BC_IST || op == BC_ISF) { 8749 if (op == BC_IST || op == BC_ISF) {
8726 dasm_put(Dst, 4811, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); 8750 dasm_put(Dst, 4833, LJ_TTRUE, -(BCBIAS_J*4 >> 16));
8727 if (op == BC_IST) { 8751 if (op == BC_IST) {
8728 dasm_put(Dst, 4818); 8752 dasm_put(Dst, 4840);
8729 } else { 8753 } else {
8730 dasm_put(Dst, 4820); 8754 dasm_put(Dst, 4842);
8731 } 8755 }
8732 dasm_put(Dst, 4822); 8756 dasm_put(Dst, 4844);
8733 } else { 8757 } else {
8734 dasm_put(Dst, 4824, LJ_TFALSE); 8758 dasm_put(Dst, 4846, LJ_TFALSE);
8735 if (op == BC_ISTC) { 8759 if (op == BC_ISTC) {
8736 dasm_put(Dst, 4829); 8760 dasm_put(Dst, 4851);
8737 } else { 8761 } else {
8738 dasm_put(Dst, 4832); 8762 dasm_put(Dst, 4854);
8739 } 8763 }
8740 dasm_put(Dst, 4835, -(BCBIAS_J*4 >> 16)); 8764 dasm_put(Dst, 4857, -(BCBIAS_J*4 >> 16));
8741 } 8765 }
8742 dasm_put(Dst, 4842); 8766 dasm_put(Dst, 4864);
8743 break; 8767 break;
8744 8768
8745 /* -- Unary ops --------------------------------------------------------- */ 8769 /* -- Unary ops --------------------------------------------------------- */
8746 8770
8747 case BC_MOV: 8771 case BC_MOV:
8748 dasm_put(Dst, 4853); 8772 dasm_put(Dst, 4875);
8749 break; 8773 break;
8750 case BC_NOT: 8774 case BC_NOT:
8751 dasm_put(Dst, 4866, LJ_TTRUE); 8775 dasm_put(Dst, 4888, LJ_TTRUE);
8752 break; 8776 break;
8753 case BC_UNM: 8777 case BC_UNM:
8754 dasm_put(Dst, 4882); 8778 dasm_put(Dst, 4904);
8755 if (LJ_DUALNUM) { 8779 if (LJ_DUALNUM) {
8756 dasm_put(Dst, 4886); 8780 dasm_put(Dst, 4908);
8757 } 8781 }
8758 dasm_put(Dst, 4914); 8782 dasm_put(Dst, 4936);
8759 if (LJ_DUALNUM) { 8783 if (LJ_DUALNUM) {
8760 dasm_put(Dst, 4924); 8784 dasm_put(Dst, 4946);
8761 } else { 8785 } else {
8762 dasm_put(Dst, 4927); 8786 dasm_put(Dst, 4949);
8763 } 8787 }
8764 break; 8788 break;
8765 case BC_LEN: 8789 case BC_LEN:
8766 dasm_put(Dst, 4936, LJ_TSTR, Dt5(->len)); 8790 dasm_put(Dst, 4958, LJ_TSTR, Dt5(->len));
8767 if (LJ_DUALNUM) { 8791 if (LJ_DUALNUM) {
8768 dasm_put(Dst, 4946); 8792 dasm_put(Dst, 4968);
8769 } else { 8793 } else {
8770 dasm_put(Dst, 4951); 8794 dasm_put(Dst, 4973);
8771 } 8795 }
8772 dasm_put(Dst, 4958, LJ_TTAB); 8796 dasm_put(Dst, 4980, LJ_TTAB);
8773#ifdef LUAJIT_ENABLE_LUA52COMPAT 8797#ifdef LUAJIT_ENABLE_LUA52COMPAT
8774 dasm_put(Dst, 4972, Dt6(->metatable)); 8798 dasm_put(Dst, 4994, Dt6(->metatable));
8775#endif 8799#endif
8776 dasm_put(Dst, 4979); 8800 dasm_put(Dst, 5001);
8777#ifdef LUAJIT_ENABLE_LUA52COMPAT 8801#ifdef LUAJIT_ENABLE_LUA52COMPAT
8778 dasm_put(Dst, 4985, Dt6(->nomm), 1<<MM_len); 8802 dasm_put(Dst, 5007, Dt6(->nomm), 1<<MM_len);
8779#endif 8803#endif
8780 break; 8804 break;
8781 8805
@@ -8787,77 +8811,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8787 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8811 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8788 switch (vk) { 8812 switch (vk) {
8789 case 0: 8813 case 0:
8790 dasm_put(Dst, 4995); 8814 dasm_put(Dst, 5017);
8791 break; 8815 break;
8792 case 1: 8816 case 1:
8793 dasm_put(Dst, 5001); 8817 dasm_put(Dst, 5023);
8794 break; 8818 break;
8795 default: 8819 default:
8796 dasm_put(Dst, 5007); 8820 dasm_put(Dst, 5029);
8797 break; 8821 break;
8798 } 8822 }
8799 dasm_put(Dst, 5013); 8823 dasm_put(Dst, 5035);
8800 switch (vk) { 8824 switch (vk) {
8801 case 0: 8825 case 0:
8802 dasm_put(Dst, 5040); 8826 dasm_put(Dst, 5062);
8803 break; 8827 break;
8804 case 1: 8828 case 1:
8805 dasm_put(Dst, 5043); 8829 dasm_put(Dst, 5065);
8806 break; 8830 break;
8807 default: 8831 default:
8808 dasm_put(Dst, 5046); 8832 dasm_put(Dst, 5068);
8809 break; 8833 break;
8810 } 8834 }
8811 dasm_put(Dst, 5049); 8835 dasm_put(Dst, 5071);
8812 if (vk == 1) { 8836 if (vk == 1) {
8813 dasm_put(Dst, 5051); 8837 dasm_put(Dst, 5073);
8814 } else { 8838 } else {
8815 dasm_put(Dst, 5055); 8839 dasm_put(Dst, 5077);
8816 } 8840 }
8817 switch (vk) { 8841 switch (vk) {
8818 case 0: 8842 case 0:
8819 dasm_put(Dst, 5059); 8843 dasm_put(Dst, 5081);
8820 break; 8844 break;
8821 case 1: 8845 case 1:
8822 dasm_put(Dst, 5062); 8846 dasm_put(Dst, 5084);
8823 break; 8847 break;
8824 default: 8848 default:
8825 dasm_put(Dst, 5065); 8849 dasm_put(Dst, 5087);
8826 break; 8850 break;
8827 } 8851 }
8828 dasm_put(Dst, 5068); 8852 dasm_put(Dst, 5090);
8829 } else { 8853 } else {
8830 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8854 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8831 switch (vk) { 8855 switch (vk) {
8832 case 0: 8856 case 0:
8833 dasm_put(Dst, 5075); 8857 dasm_put(Dst, 5097);
8834 if (LJ_DUALNUM) { 8858 if (LJ_DUALNUM) {
8835 dasm_put(Dst, 5077); 8859 dasm_put(Dst, 5099);
8836 } 8860 }
8837 dasm_put(Dst, 5079); 8861 dasm_put(Dst, 5101);
8838 if (LJ_DUALNUM) { 8862 if (LJ_DUALNUM) {
8839 dasm_put(Dst, 5082); 8863 dasm_put(Dst, 5104);
8840 } else { 8864 } else {
8841 dasm_put(Dst, 5088); 8865 dasm_put(Dst, 5110);
8842 } 8866 }
8843 break; 8867 break;
8844 case 1: 8868 case 1:
8845 dasm_put(Dst, 5092); 8869 dasm_put(Dst, 5114);
8846 if (LJ_DUALNUM) { 8870 if (LJ_DUALNUM) {
8847 dasm_put(Dst, 5094); 8871 dasm_put(Dst, 5116);
8848 } 8872 }
8849 dasm_put(Dst, 5096); 8873 dasm_put(Dst, 5118);
8850 if (LJ_DUALNUM) { 8874 if (LJ_DUALNUM) {
8851 dasm_put(Dst, 5099); 8875 dasm_put(Dst, 5121);
8852 } else { 8876 } else {
8853 dasm_put(Dst, 5105); 8877 dasm_put(Dst, 5127);
8854 } 8878 }
8855 break; 8879 break;
8856 default: 8880 default:
8857 dasm_put(Dst, 5109); 8881 dasm_put(Dst, 5131);
8858 break; 8882 break;
8859 } 8883 }
8860 dasm_put(Dst, 5119); 8884 dasm_put(Dst, 5141);
8861 } 8885 }
8862 break; 8886 break;
8863 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 8887 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
@@ -8865,77 +8889,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8865 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8889 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8866 switch (vk) { 8890 switch (vk) {
8867 case 0: 8891 case 0:
8868 dasm_put(Dst, 5132); 8892 dasm_put(Dst, 5154);
8869 break; 8893 break;
8870 case 1: 8894 case 1:
8871 dasm_put(Dst, 5138); 8895 dasm_put(Dst, 5160);
8872 break; 8896 break;
8873 default: 8897 default:
8874 dasm_put(Dst, 5144); 8898 dasm_put(Dst, 5166);
8875 break; 8899 break;
8876 } 8900 }
8877 dasm_put(Dst, 5150); 8901 dasm_put(Dst, 5172);
8878 switch (vk) { 8902 switch (vk) {
8879 case 0: 8903 case 0:
8880 dasm_put(Dst, 5177); 8904 dasm_put(Dst, 5199);
8881 break; 8905 break;
8882 case 1: 8906 case 1:
8883 dasm_put(Dst, 5180); 8907 dasm_put(Dst, 5202);
8884 break; 8908 break;
8885 default: 8909 default:
8886 dasm_put(Dst, 5183); 8910 dasm_put(Dst, 5205);
8887 break; 8911 break;
8888 } 8912 }
8889 dasm_put(Dst, 5186); 8913 dasm_put(Dst, 5208);
8890 if (vk == 1) { 8914 if (vk == 1) {
8891 dasm_put(Dst, 5188); 8915 dasm_put(Dst, 5210);
8892 } else { 8916 } else {
8893 dasm_put(Dst, 5192); 8917 dasm_put(Dst, 5214);
8894 } 8918 }
8895 switch (vk) { 8919 switch (vk) {
8896 case 0: 8920 case 0:
8897 dasm_put(Dst, 5196); 8921 dasm_put(Dst, 5218);
8898 break; 8922 break;
8899 case 1: 8923 case 1:
8900 dasm_put(Dst, 5199); 8924 dasm_put(Dst, 5221);
8901 break; 8925 break;
8902 default: 8926 default:
8903 dasm_put(Dst, 5202); 8927 dasm_put(Dst, 5224);
8904 break; 8928 break;
8905 } 8929 }
8906 dasm_put(Dst, 5205); 8930 dasm_put(Dst, 5227);
8907 } else { 8931 } else {
8908 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8932 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8909 switch (vk) { 8933 switch (vk) {
8910 case 0: 8934 case 0:
8911 dasm_put(Dst, 5212); 8935 dasm_put(Dst, 5234);
8912 if (LJ_DUALNUM) { 8936 if (LJ_DUALNUM) {
8913 dasm_put(Dst, 5214); 8937 dasm_put(Dst, 5236);
8914 } 8938 }
8915 dasm_put(Dst, 5216); 8939 dasm_put(Dst, 5238);
8916 if (LJ_DUALNUM) { 8940 if (LJ_DUALNUM) {
8917 dasm_put(Dst, 5219); 8941 dasm_put(Dst, 5241);
8918 } else { 8942 } else {
8919 dasm_put(Dst, 5225); 8943 dasm_put(Dst, 5247);
8920 } 8944 }
8921 break; 8945 break;
8922 case 1: 8946 case 1:
8923 dasm_put(Dst, 5229); 8947 dasm_put(Dst, 5251);
8924 if (LJ_DUALNUM) { 8948 if (LJ_DUALNUM) {
8925 dasm_put(Dst, 5231); 8949 dasm_put(Dst, 5253);
8926 } 8950 }
8927 dasm_put(Dst, 5233); 8951 dasm_put(Dst, 5255);
8928 if (LJ_DUALNUM) { 8952 if (LJ_DUALNUM) {
8929 dasm_put(Dst, 5236); 8953 dasm_put(Dst, 5258);
8930 } else { 8954 } else {
8931 dasm_put(Dst, 5242); 8955 dasm_put(Dst, 5264);
8932 } 8956 }
8933 break; 8957 break;
8934 default: 8958 default:
8935 dasm_put(Dst, 5246); 8959 dasm_put(Dst, 5268);
8936 break; 8960 break;
8937 } 8961 }
8938 dasm_put(Dst, 5256); 8962 dasm_put(Dst, 5278);
8939 } 8963 }
8940 break; 8964 break;
8941 case BC_MULVN: case BC_MULNV: case BC_MULVV: 8965 case BC_MULVN: case BC_MULNV: case BC_MULVV:
@@ -8943,188 +8967,188 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8943 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8967 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8944 switch (vk) { 8968 switch (vk) {
8945 case 0: 8969 case 0:
8946 dasm_put(Dst, 5269); 8970 dasm_put(Dst, 5291);
8947 break; 8971 break;
8948 case 1: 8972 case 1:
8949 dasm_put(Dst, 5275); 8973 dasm_put(Dst, 5297);
8950 break; 8974 break;
8951 default: 8975 default:
8952 dasm_put(Dst, 5281); 8976 dasm_put(Dst, 5303);
8953 break; 8977 break;
8954 } 8978 }
8955 dasm_put(Dst, 5287); 8979 dasm_put(Dst, 5309);
8956 switch (vk) { 8980 switch (vk) {
8957 case 0: 8981 case 0:
8958 dasm_put(Dst, 5314); 8982 dasm_put(Dst, 5336);
8959 break; 8983 break;
8960 case 1: 8984 case 1:
8961 dasm_put(Dst, 5317); 8985 dasm_put(Dst, 5339);
8962 break; 8986 break;
8963 default: 8987 default:
8964 dasm_put(Dst, 5320); 8988 dasm_put(Dst, 5342);
8965 break; 8989 break;
8966 } 8990 }
8967 dasm_put(Dst, 5323); 8991 dasm_put(Dst, 5345);
8968 if (vk == 1) { 8992 if (vk == 1) {
8969 dasm_put(Dst, 5325); 8993 dasm_put(Dst, 5347);
8970 } else { 8994 } else {
8971 dasm_put(Dst, 5329); 8995 dasm_put(Dst, 5351);
8972 } 8996 }
8973 switch (vk) { 8997 switch (vk) {
8974 case 0: 8998 case 0:
8975 dasm_put(Dst, 5333); 8999 dasm_put(Dst, 5355);
8976 break; 9000 break;
8977 case 1: 9001 case 1:
8978 dasm_put(Dst, 5336); 9002 dasm_put(Dst, 5358);
8979 break; 9003 break;
8980 default: 9004 default:
8981 dasm_put(Dst, 5339); 9005 dasm_put(Dst, 5361);
8982 break; 9006 break;
8983 } 9007 }
8984 dasm_put(Dst, 5342); 9008 dasm_put(Dst, 5364);
8985 } else { 9009 } else {
8986 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9010 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8987 switch (vk) { 9011 switch (vk) {
8988 case 0: 9012 case 0:
8989 dasm_put(Dst, 5349); 9013 dasm_put(Dst, 5371);
8990 if (LJ_DUALNUM) { 9014 if (LJ_DUALNUM) {
8991 dasm_put(Dst, 5351); 9015 dasm_put(Dst, 5373);
8992 } 9016 }
8993 dasm_put(Dst, 5353); 9017 dasm_put(Dst, 5375);
8994 if (LJ_DUALNUM) { 9018 if (LJ_DUALNUM) {
8995 dasm_put(Dst, 5356); 9019 dasm_put(Dst, 5378);
8996 } else { 9020 } else {
8997 dasm_put(Dst, 5362); 9021 dasm_put(Dst, 5384);
8998 } 9022 }
8999 break; 9023 break;
9000 case 1: 9024 case 1:
9001 dasm_put(Dst, 5366); 9025 dasm_put(Dst, 5388);
9002 if (LJ_DUALNUM) { 9026 if (LJ_DUALNUM) {
9003 dasm_put(Dst, 5368); 9027 dasm_put(Dst, 5390);
9004 } 9028 }
9005 dasm_put(Dst, 5370); 9029 dasm_put(Dst, 5392);
9006 if (LJ_DUALNUM) { 9030 if (LJ_DUALNUM) {
9007 dasm_put(Dst, 5373); 9031 dasm_put(Dst, 5395);
9008 } else { 9032 } else {
9009 dasm_put(Dst, 5379); 9033 dasm_put(Dst, 5401);
9010 } 9034 }
9011 break; 9035 break;
9012 default: 9036 default:
9013 dasm_put(Dst, 5383); 9037 dasm_put(Dst, 5405);
9014 break; 9038 break;
9015 } 9039 }
9016 dasm_put(Dst, 5393); 9040 dasm_put(Dst, 5415);
9017 } 9041 }
9018 break; 9042 break;
9019 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 9043 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
9020 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9044 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9021 switch (vk) { 9045 switch (vk) {
9022 case 0: 9046 case 0:
9023 dasm_put(Dst, 5406); 9047 dasm_put(Dst, 5428);
9024 if (LJ_DUALNUM) { 9048 if (LJ_DUALNUM) {
9025 dasm_put(Dst, 5408); 9049 dasm_put(Dst, 5430);
9026 } 9050 }
9027 dasm_put(Dst, 5410); 9051 dasm_put(Dst, 5432);
9028 if (LJ_DUALNUM) { 9052 if (LJ_DUALNUM) {
9029 dasm_put(Dst, 5413); 9053 dasm_put(Dst, 5435);
9030 } else { 9054 } else {
9031 dasm_put(Dst, 5419); 9055 dasm_put(Dst, 5441);
9032 } 9056 }
9033 break; 9057 break;
9034 case 1: 9058 case 1:
9035 dasm_put(Dst, 5423); 9059 dasm_put(Dst, 5445);
9036 if (LJ_DUALNUM) { 9060 if (LJ_DUALNUM) {
9037 dasm_put(Dst, 5425); 9061 dasm_put(Dst, 5447);
9038 } 9062 }
9039 dasm_put(Dst, 5427); 9063 dasm_put(Dst, 5449);
9040 if (LJ_DUALNUM) { 9064 if (LJ_DUALNUM) {
9041 dasm_put(Dst, 5430); 9065 dasm_put(Dst, 5452);
9042 } else { 9066 } else {
9043 dasm_put(Dst, 5436); 9067 dasm_put(Dst, 5458);
9044 } 9068 }
9045 break; 9069 break;
9046 default: 9070 default:
9047 dasm_put(Dst, 5440); 9071 dasm_put(Dst, 5462);
9048 break; 9072 break;
9049 } 9073 }
9050 dasm_put(Dst, 5450); 9074 dasm_put(Dst, 5472);
9051 break; 9075 break;
9052 case BC_MODVN: 9076 case BC_MODVN:
9053 if (LJ_DUALNUM) { 9077 if (LJ_DUALNUM) {
9054 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9078 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9055 switch (vk) { 9079 switch (vk) {
9056 case 0: 9080 case 0:
9057 dasm_put(Dst, 5463); 9081 dasm_put(Dst, 5485);
9058 break; 9082 break;
9059 case 1: 9083 case 1:
9060 dasm_put(Dst, 5469); 9084 dasm_put(Dst, 5491);
9061 break; 9085 break;
9062 default: 9086 default:
9063 dasm_put(Dst, 5475); 9087 dasm_put(Dst, 5497);
9064 break; 9088 break;
9065 } 9089 }
9066 dasm_put(Dst, 5481); 9090 dasm_put(Dst, 5503);
9067 switch (vk) { 9091 switch (vk) {
9068 case 0: 9092 case 0:
9069 dasm_put(Dst, 5509); 9093 dasm_put(Dst, 5531);
9070 break; 9094 break;
9071 case 1: 9095 case 1:
9072 dasm_put(Dst, 5512); 9096 dasm_put(Dst, 5534);
9073 break; 9097 break;
9074 default: 9098 default:
9075 dasm_put(Dst, 5515); 9099 dasm_put(Dst, 5537);
9076 break; 9100 break;
9077 } 9101 }
9078 dasm_put(Dst, 5518); 9102 dasm_put(Dst, 5540);
9079 if (vk == 1) { 9103 if (vk == 1) {
9080 dasm_put(Dst, 5520); 9104 dasm_put(Dst, 5542);
9081 } else { 9105 } else {
9082 dasm_put(Dst, 5524); 9106 dasm_put(Dst, 5546);
9083 } 9107 }
9084 switch (vk) { 9108 switch (vk) {
9085 case 0: 9109 case 0:
9086 dasm_put(Dst, 5528); 9110 dasm_put(Dst, 5550);
9087 break; 9111 break;
9088 case 1: 9112 case 1:
9089 dasm_put(Dst, 5531); 9113 dasm_put(Dst, 5553);
9090 break; 9114 break;
9091 default: 9115 default:
9092 dasm_put(Dst, 5534); 9116 dasm_put(Dst, 5556);
9093 break; 9117 break;
9094 } 9118 }
9095 dasm_put(Dst, 5537); 9119 dasm_put(Dst, 5559);
9096 } else { 9120 } else {
9097 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9121 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9098 switch (vk) { 9122 switch (vk) {
9099 case 0: 9123 case 0:
9100 dasm_put(Dst, 5549); 9124 dasm_put(Dst, 5571);
9101 if (LJ_DUALNUM) { 9125 if (LJ_DUALNUM) {
9102 dasm_put(Dst, 5551); 9126 dasm_put(Dst, 5573);
9103 } 9127 }
9104 dasm_put(Dst, 5553); 9128 dasm_put(Dst, 5575);
9105 if (LJ_DUALNUM) { 9129 if (LJ_DUALNUM) {
9106 dasm_put(Dst, 5556); 9130 dasm_put(Dst, 5578);
9107 } else { 9131 } else {
9108 dasm_put(Dst, 5562); 9132 dasm_put(Dst, 5584);
9109 } 9133 }
9110 break; 9134 break;
9111 case 1: 9135 case 1:
9112 dasm_put(Dst, 5566); 9136 dasm_put(Dst, 5588);
9113 if (LJ_DUALNUM) { 9137 if (LJ_DUALNUM) {
9114 dasm_put(Dst, 5568); 9138 dasm_put(Dst, 5590);
9115 } 9139 }
9116 dasm_put(Dst, 5570); 9140 dasm_put(Dst, 5592);
9117 if (LJ_DUALNUM) { 9141 if (LJ_DUALNUM) {
9118 dasm_put(Dst, 5573); 9142 dasm_put(Dst, 5595);
9119 } else { 9143 } else {
9120 dasm_put(Dst, 5579); 9144 dasm_put(Dst, 5601);
9121 } 9145 }
9122 break; 9146 break;
9123 default: 9147 default:
9124 dasm_put(Dst, 5583); 9148 dasm_put(Dst, 5605);
9125 break; 9149 break;
9126 } 9150 }
9127 dasm_put(Dst, 5593); 9151 dasm_put(Dst, 5615);
9128 } 9152 }
9129 break; 9153 break;
9130 case BC_MODNV: case BC_MODVV: 9154 case BC_MODNV: case BC_MODVV:
@@ -9132,297 +9156,297 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9132 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9156 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9133 switch (vk) { 9157 switch (vk) {
9134 case 0: 9158 case 0:
9135 dasm_put(Dst, 5611); 9159 dasm_put(Dst, 5633);
9136 break; 9160 break;
9137 case 1: 9161 case 1:
9138 dasm_put(Dst, 5617); 9162 dasm_put(Dst, 5639);
9139 break; 9163 break;
9140 default: 9164 default:
9141 dasm_put(Dst, 5623); 9165 dasm_put(Dst, 5645);
9142 break; 9166 break;
9143 } 9167 }
9144 dasm_put(Dst, 5629); 9168 dasm_put(Dst, 5651);
9145 switch (vk) { 9169 switch (vk) {
9146 case 0: 9170 case 0:
9147 dasm_put(Dst, 5657); 9171 dasm_put(Dst, 5679);
9148 break; 9172 break;
9149 case 1: 9173 case 1:
9150 dasm_put(Dst, 5660); 9174 dasm_put(Dst, 5682);
9151 break; 9175 break;
9152 default: 9176 default:
9153 dasm_put(Dst, 5663); 9177 dasm_put(Dst, 5685);
9154 break; 9178 break;
9155 } 9179 }
9156 dasm_put(Dst, 5666); 9180 dasm_put(Dst, 5688);
9157 if (vk == 1) { 9181 if (vk == 1) {
9158 dasm_put(Dst, 5668); 9182 dasm_put(Dst, 5690);
9159 } else { 9183 } else {
9160 dasm_put(Dst, 5672); 9184 dasm_put(Dst, 5694);
9161 } 9185 }
9162 switch (vk) { 9186 switch (vk) {
9163 case 0: 9187 case 0:
9164 dasm_put(Dst, 5676); 9188 dasm_put(Dst, 5698);
9165 break; 9189 break;
9166 case 1: 9190 case 1:
9167 dasm_put(Dst, 5679); 9191 dasm_put(Dst, 5701);
9168 break; 9192 break;
9169 default: 9193 default:
9170 dasm_put(Dst, 5682); 9194 dasm_put(Dst, 5704);
9171 break; 9195 break;
9172 } 9196 }
9173 dasm_put(Dst, 5685); 9197 dasm_put(Dst, 5707);
9174 } else { 9198 } else {
9175 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9199 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9176 switch (vk) { 9200 switch (vk) {
9177 case 0: 9201 case 0:
9178 dasm_put(Dst, 5688); 9202 dasm_put(Dst, 5710);
9179 if (LJ_DUALNUM) { 9203 if (LJ_DUALNUM) {
9180 dasm_put(Dst, 5690); 9204 dasm_put(Dst, 5712);
9181 } 9205 }
9182 dasm_put(Dst, 5692); 9206 dasm_put(Dst, 5714);
9183 if (LJ_DUALNUM) { 9207 if (LJ_DUALNUM) {
9184 dasm_put(Dst, 5695); 9208 dasm_put(Dst, 5717);
9185 } else { 9209 } else {
9186 dasm_put(Dst, 5701); 9210 dasm_put(Dst, 5723);
9187 } 9211 }
9188 break; 9212 break;
9189 case 1: 9213 case 1:
9190 dasm_put(Dst, 5705); 9214 dasm_put(Dst, 5727);
9191 if (LJ_DUALNUM) { 9215 if (LJ_DUALNUM) {
9192 dasm_put(Dst, 5707); 9216 dasm_put(Dst, 5729);
9193 } 9217 }
9194 dasm_put(Dst, 5709); 9218 dasm_put(Dst, 5731);
9195 if (LJ_DUALNUM) { 9219 if (LJ_DUALNUM) {
9196 dasm_put(Dst, 5712); 9220 dasm_put(Dst, 5734);
9197 } else { 9221 } else {
9198 dasm_put(Dst, 5718); 9222 dasm_put(Dst, 5740);
9199 } 9223 }
9200 break; 9224 break;
9201 default: 9225 default:
9202 dasm_put(Dst, 5722); 9226 dasm_put(Dst, 5744);
9203 break; 9227 break;
9204 } 9228 }
9205 dasm_put(Dst, 5732); 9229 dasm_put(Dst, 5754);
9206 } 9230 }
9207 break; 9231 break;
9208 case BC_POW: 9232 case BC_POW:
9209 dasm_put(Dst, 5735); 9233 dasm_put(Dst, 5757);
9210 break; 9234 break;
9211 9235
9212 case BC_CAT: 9236 case BC_CAT:
9213 dasm_put(Dst, 5758, Dt1(->base), 32-3, Dt1(->base)); 9237 dasm_put(Dst, 5780, Dt1(->base), 32-3, Dt1(->base));
9214 break; 9238 break;
9215 9239
9216 /* -- Constant ops ------------------------------------------------------ */ 9240 /* -- Constant ops ------------------------------------------------------ */
9217 9241
9218 case BC_KSTR: 9242 case BC_KSTR:
9219 dasm_put(Dst, 5788, 32-1, LJ_TSTR); 9243 dasm_put(Dst, 5810, 32-1, LJ_TSTR);
9220 break; 9244 break;
9221 case BC_KCDATA: 9245 case BC_KCDATA:
9222#if LJ_HASFFI 9246#if LJ_HASFFI
9223 dasm_put(Dst, 5807, 32-1, LJ_TCDATA); 9247 dasm_put(Dst, 5829, 32-1, LJ_TCDATA);
9224#endif 9248#endif
9225 break; 9249 break;
9226 case BC_KSHORT: 9250 case BC_KSHORT:
9227 if (LJ_DUALNUM) { 9251 if (LJ_DUALNUM) {
9228 dasm_put(Dst, 5826, 31-13); 9252 dasm_put(Dst, 5848, 31-13);
9229 } else { 9253 } else {
9230 dasm_put(Dst, 5842, 31-13, 31-20); 9254 dasm_put(Dst, 5864, 31-13, 31-20);
9231 } 9255 }
9232 break; 9256 break;
9233 case BC_KNUM: 9257 case BC_KNUM:
9234 dasm_put(Dst, 5870); 9258 dasm_put(Dst, 5892);
9235 break; 9259 break;
9236 case BC_KPRI: 9260 case BC_KPRI:
9237 dasm_put(Dst, 5883, 32-3); 9261 dasm_put(Dst, 5905, 32-3);
9238 break; 9262 break;
9239 case BC_KNIL: 9263 case BC_KNIL:
9240 dasm_put(Dst, 5898); 9264 dasm_put(Dst, 5920);
9241 break; 9265 break;
9242 9266
9243 /* -- Upvalue and function ops ------------------------------------------ */ 9267 /* -- Upvalue and function ops ------------------------------------------ */
9244 9268
9245 case BC_UGET: 9269 case BC_UGET:
9246 dasm_put(Dst, 5917, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); 9270 dasm_put(Dst, 5939, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
9247 break; 9271 break;
9248 case BC_USETV: 9272 case BC_USETV:
9249 dasm_put(Dst, 5938, 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); 9273 dasm_put(Dst, 5960, 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);
9250 break; 9274 break;
9251 case BC_USETS: 9275 case BC_USETS:
9252 dasm_put(Dst, 5991, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G); 9276 dasm_put(Dst, 6013, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G);
9253 break; 9277 break;
9254 case BC_USETN: 9278 case BC_USETN:
9255 dasm_put(Dst, 6042, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); 9279 dasm_put(Dst, 6064, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
9256 break; 9280 break;
9257 case BC_USETP: 9281 case BC_USETP:
9258 dasm_put(Dst, 6063, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); 9282 dasm_put(Dst, 6085, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v));
9259 break; 9283 break;
9260 9284
9261 case BC_UCLO: 9285 case BC_UCLO:
9262 dasm_put(Dst, 6086, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); 9286 dasm_put(Dst, 6108, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base));
9263 break; 9287 break;
9264 9288
9265 case BC_FNEW: 9289 case BC_FNEW:
9266 dasm_put(Dst, 6116, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); 9290 dasm_put(Dst, 6138, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC);
9267 break; 9291 break;
9268 9292
9269 /* -- Table ops --------------------------------------------------------- */ 9293 /* -- Table ops --------------------------------------------------------- */
9270 9294
9271 case BC_TNEW: 9295 case BC_TNEW:
9272 case BC_TDUP: 9296 case BC_TDUP:
9273 dasm_put(Dst, 6144, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); 9297 dasm_put(Dst, 6166, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
9274 if (op == BC_TNEW) { 9298 if (op == BC_TNEW) {
9275 dasm_put(Dst, 6157); 9299 dasm_put(Dst, 6179);
9276 } else { 9300 } else {
9277 dasm_put(Dst, 6166, 32-1); 9301 dasm_put(Dst, 6188, 32-1);
9278 } 9302 }
9279 dasm_put(Dst, 6173, Dt1(->base), LJ_TTAB); 9303 dasm_put(Dst, 6195, Dt1(->base), LJ_TTAB);
9280 if (op == BC_TNEW) { 9304 if (op == BC_TNEW) {
9281 dasm_put(Dst, 6190); 9305 dasm_put(Dst, 6212);
9282 } 9306 }
9283 dasm_put(Dst, 6195); 9307 dasm_put(Dst, 6217);
9284 break; 9308 break;
9285 9309
9286 case BC_GGET: 9310 case BC_GGET:
9287 case BC_GSET: 9311 case BC_GSET:
9288 dasm_put(Dst, 6204, 32-1, Dt7(->env)); 9312 dasm_put(Dst, 6226, 32-1, Dt7(->env));
9289 if (op == BC_GGET) { 9313 if (op == BC_GGET) {
9290 dasm_put(Dst, 6212); 9314 dasm_put(Dst, 6234);
9291 } else { 9315 } else {
9292 dasm_put(Dst, 6215); 9316 dasm_put(Dst, 6237);
9293 } 9317 }
9294 break; 9318 break;
9295 9319
9296 case BC_TGETV: 9320 case BC_TGETV:
9297 dasm_put(Dst, 6218); 9321 dasm_put(Dst, 6240);
9298 if (LJ_DUALNUM) { 9322 if (LJ_DUALNUM) {
9299 dasm_put(Dst, 6222); 9323 dasm_put(Dst, 6244);
9300 } else { 9324 } else {
9301 dasm_put(Dst, 6224); 9325 dasm_put(Dst, 6246);
9302 } 9326 }
9303 dasm_put(Dst, 6226, LJ_TTAB); 9327 dasm_put(Dst, 6248, LJ_TTAB);
9304 if (LJ_DUALNUM) { 9328 if (LJ_DUALNUM) {
9305 dasm_put(Dst, 6232, Dt6(->asize), Dt6(->array), 31-3); 9329 dasm_put(Dst, 6254, Dt6(->asize), Dt6(->array), 31-3);
9306 } else { 9330 } else {
9307 dasm_put(Dst, 6242, Dt6(->asize), Dt6(->array), 31-3); 9331 dasm_put(Dst, 6264, Dt6(->asize), Dt6(->array), 31-3);
9308 } 9332 }
9309 dasm_put(Dst, 6259, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); 9333 dasm_put(Dst, 6281, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR);
9310 if (!LJ_DUALNUM) { 9334 if (!LJ_DUALNUM) {
9311 dasm_put(Dst, 6299); 9335 dasm_put(Dst, 6321);
9312 } 9336 }
9313 dasm_put(Dst, 6301); 9337 dasm_put(Dst, 6323);
9314 break; 9338 break;
9315 case BC_TGETS: 9339 case BC_TGETS:
9316 dasm_put(Dst, 6304, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next)); 9340 dasm_put(Dst, 6326, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next));
9317 dasm_put(Dst, 6365, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 9341 dasm_put(Dst, 6387, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
9318 break; 9342 break;
9319 case BC_TGETB: 9343 case BC_TGETB:
9320 dasm_put(Dst, 6385, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 9344 dasm_put(Dst, 6407, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
9321 break; 9345 break;
9322 9346
9323 case BC_TSETV: 9347 case BC_TSETV:
9324 dasm_put(Dst, 6433); 9348 dasm_put(Dst, 6455);
9325 if (LJ_DUALNUM) { 9349 if (LJ_DUALNUM) {
9326 dasm_put(Dst, 6437); 9350 dasm_put(Dst, 6459);
9327 } else { 9351 } else {
9328 dasm_put(Dst, 6439); 9352 dasm_put(Dst, 6461);
9329 } 9353 }
9330 dasm_put(Dst, 6441, LJ_TTAB); 9354 dasm_put(Dst, 6463, LJ_TTAB);
9331 if (LJ_DUALNUM) { 9355 if (LJ_DUALNUM) {
9332 dasm_put(Dst, 6447, Dt6(->asize), Dt6(->array), 31-3); 9356 dasm_put(Dst, 6469, Dt6(->asize), Dt6(->array), 31-3);
9333 } else { 9357 } else {
9334 dasm_put(Dst, 6457, Dt6(->asize), Dt6(->array), 31-3); 9358 dasm_put(Dst, 6479, Dt6(->asize), Dt6(->array), 31-3);
9335 } 9359 }
9336 dasm_put(Dst, 6474, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); 9360 dasm_put(Dst, 6496, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR);
9337 if (!LJ_DUALNUM) { 9361 if (!LJ_DUALNUM) {
9338 dasm_put(Dst, 6521); 9362 dasm_put(Dst, 6543);
9339 } 9363 }
9340 dasm_put(Dst, 6523, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9364 dasm_put(Dst, 6545, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9341 break; 9365 break;
9342 case BC_TSETS: 9366 case BC_TSETS:
9343 dasm_put(Dst, 6538, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), DtB(->next), LJ_TSTR, LJ_TNIL); 9367 dasm_put(Dst, 6560, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), DtB(->next), LJ_TSTR, LJ_TNIL);
9344 dasm_put(Dst, 6589, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); 9368 dasm_put(Dst, 6611, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR);
9345 dasm_put(Dst, 6646, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9369 dasm_put(Dst, 6668, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9346 break; 9370 break;
9347 case BC_TSETB: 9371 case BC_TSETB:
9348 dasm_put(Dst, 6669, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); 9372 dasm_put(Dst, 6691, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain));
9349 dasm_put(Dst, 6727, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9373 dasm_put(Dst, 6749, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9350 break; 9374 break;
9351 9375
9352 case BC_TSETM: 9376 case BC_TSETM:
9353 dasm_put(Dst, 6737, 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)); 9377 dasm_put(Dst, 6759, 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));
9354 dasm_put(Dst, 6806); 9378 dasm_put(Dst, 6828);
9355 break; 9379 break;
9356 9380
9357 /* -- Calls and vararg handling ----------------------------------------- */ 9381 /* -- Calls and vararg handling ----------------------------------------- */
9358 9382
9359 case BC_CALLM: 9383 case BC_CALLM:
9360 dasm_put(Dst, 6809); 9384 dasm_put(Dst, 6831);
9361 break; 9385 break;
9362 case BC_CALL: 9386 case BC_CALL:
9363 dasm_put(Dst, 6811, LJ_TFUNC, Dt7(->pc)); 9387 dasm_put(Dst, 6833, LJ_TFUNC, Dt7(->pc));
9364 break; 9388 break;
9365 9389
9366 case BC_CALLMT: 9390 case BC_CALLMT:
9367 dasm_put(Dst, 6832); 9391 dasm_put(Dst, 6854);
9368 break; 9392 break;
9369 case BC_CALLT: 9393 case BC_CALLT:
9370 dasm_put(Dst, 6834, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 9394 dasm_put(Dst, 6856, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
9371 dasm_put(Dst, 6898, FRAME_TYPE); 9395 dasm_put(Dst, 6920, FRAME_TYPE);
9372 break; 9396 break;
9373 9397
9374 case BC_ITERC: 9398 case BC_ITERC:
9375 dasm_put(Dst, 6907, LJ_TFUNC, Dt7(->pc)); 9399 dasm_put(Dst, 6929, LJ_TFUNC, Dt7(->pc));
9376 break; 9400 break;
9377 9401
9378 case BC_ITERN: 9402 case BC_ITERN:
9379#if LJ_HASJIT 9403#if LJ_HASJIT
9380#endif 9404#endif
9381 dasm_put(Dst, 6934, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); 9405 dasm_put(Dst, 6956, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL);
9382 if (LJ_DUALNUM) { 9406 if (LJ_DUALNUM) {
9383 dasm_put(Dst, 6956); 9407 dasm_put(Dst, 6978);
9384 } else { 9408 } else {
9385 dasm_put(Dst, 6959); 9409 dasm_put(Dst, 6981);
9386 } 9410 }
9387 dasm_put(Dst, 6963, -(BCBIAS_J*4 >> 16)); 9411 dasm_put(Dst, 6985, -(BCBIAS_J*4 >> 16));
9388 if (!LJ_DUALNUM) { 9412 if (!LJ_DUALNUM) {
9389 dasm_put(Dst, 6971); 9413 dasm_put(Dst, 6993);
9390 } 9414 }
9391 dasm_put(Dst, 6973, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); 9415 dasm_put(Dst, 6995, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16));
9392 break; 9416 break;
9393 9417
9394 case BC_ISNEXT: 9418 case BC_ISNEXT:
9395 dasm_put(Dst, 7029, 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)); 9419 dasm_put(Dst, 7051, 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));
9396 break; 9420 break;
9397 9421
9398 case BC_VARG: 9422 case BC_VARG:
9399 dasm_put(Dst, 7079, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); 9423 dasm_put(Dst, 7101, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base));
9400 dasm_put(Dst, 7159); 9424 dasm_put(Dst, 7181);
9401 break; 9425 break;
9402 9426
9403 /* -- Returns ----------------------------------------------------------- */ 9427 /* -- Returns ----------------------------------------------------------- */
9404 9428
9405 case BC_RETM: 9429 case BC_RETM:
9406 dasm_put(Dst, 7165); 9430 dasm_put(Dst, 7187);
9407 break; 9431 break;
9408 9432
9409 case BC_RET: 9433 case BC_RET:
9410 dasm_put(Dst, 7167, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 9434 dasm_put(Dst, 7189, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
9411 break; 9435 break;
9412 9436
9413 case BC_RET0: case BC_RET1: 9437 case BC_RET0: case BC_RET1:
9414 dasm_put(Dst, 7237, FRAME_TYPE, FRAME_VARG); 9438 dasm_put(Dst, 7259, FRAME_TYPE, FRAME_VARG);
9415 if (op == BC_RET1) { 9439 if (op == BC_RET1) {
9416 dasm_put(Dst, 7250); 9440 dasm_put(Dst, 7272);
9417 } 9441 }
9418 dasm_put(Dst, 7253, Dt7(->pc), PC2PROTO(k)); 9442 dasm_put(Dst, 7275, Dt7(->pc), PC2PROTO(k));
9419 break; 9443 break;
9420 9444
9421 /* -- Loops and branches ------------------------------------------------ */ 9445 /* -- Loops and branches ------------------------------------------------ */
9422 9446
9423 case BC_FORL: 9447 case BC_FORL:
9424#if LJ_HASJIT 9448#if LJ_HASJIT
9425 dasm_put(Dst, 7281, GG_DISP2HOT, -HOTCOUNT_LOOP); 9449 dasm_put(Dst, 7303, GG_DISP2HOT, -HOTCOUNT_LOOP);
9426#endif 9450#endif
9427 break; 9451 break;
9428 9452
@@ -9435,100 +9459,100 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9435 case BC_IFORL: 9459 case BC_IFORL:
9436 vk = (op == BC_IFORL || op == BC_JFORL); 9460 vk = (op == BC_IFORL || op == BC_JFORL);
9437 if (LJ_DUALNUM) { 9461 if (LJ_DUALNUM) {
9438 dasm_put(Dst, 7291, FORL_IDX*8+4); 9462 dasm_put(Dst, 7313, FORL_IDX*8+4);
9439 if (vk) { 9463 if (vk) {
9440 dasm_put(Dst, 7296, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); 9464 dasm_put(Dst, 7318, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4);
9441 } else { 9465 } else {
9442 dasm_put(Dst, 7310, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); 9466 dasm_put(Dst, 7332, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4);
9443 } 9467 }
9444 dasm_put(Dst, 7326, FORL_EXT*8); 9468 dasm_put(Dst, 7348, FORL_EXT*8);
9445 if (op != BC_JFORL) { 9469 if (op != BC_JFORL) {
9446 dasm_put(Dst, 7333, 32-1); 9470 dasm_put(Dst, 7355, 32-1);
9447 } 9471 }
9448 dasm_put(Dst, 7336, FORL_EXT*8+4); 9472 dasm_put(Dst, 7358, FORL_EXT*8+4);
9449 if (op != BC_JFORL) { 9473 if (op != BC_JFORL) {
9450 dasm_put(Dst, 7339); 9474 dasm_put(Dst, 7361);
9451 } 9475 }
9452 if (op == BC_FORI) { 9476 if (op == BC_FORI) {
9453 dasm_put(Dst, 7341); 9477 dasm_put(Dst, 7363);
9454 } else if (op == BC_JFORI) { 9478 } else if (op == BC_JFORI) {
9455 dasm_put(Dst, 7344, -(BCBIAS_J*4 >> 16)); 9479 dasm_put(Dst, 7366, -(BCBIAS_J*4 >> 16));
9456 } else if (op == BC_IFORL) { 9480 } else if (op == BC_IFORL) {
9457 dasm_put(Dst, 7349, -(BCBIAS_J*4 >> 16)); 9481 dasm_put(Dst, 7371, -(BCBIAS_J*4 >> 16));
9458 } else { 9482 } else {
9459 dasm_put(Dst, 7354, BC_JLOOP); 9483 dasm_put(Dst, 7376, BC_JLOOP);
9460 } 9484 }
9461 dasm_put(Dst, 7357); 9485 dasm_put(Dst, 7379);
9462 if (vk) { 9486 if (vk) {
9463 dasm_put(Dst, 7373); 9487 dasm_put(Dst, 7395);
9464 } 9488 }
9465 } 9489 }
9466 if (vk) { 9490 if (vk) {
9467 if (LJ_DUALNUM) { 9491 if (LJ_DUALNUM) {
9468 dasm_put(Dst, 7380, FORL_IDX*8); 9492 dasm_put(Dst, 7402, FORL_IDX*8);
9469 } else { 9493 } else {
9470 dasm_put(Dst, 7384); 9494 dasm_put(Dst, 7406);
9471 } 9495 }
9472 dasm_put(Dst, 7386, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); 9496 dasm_put(Dst, 7408, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8);
9473 } else { 9497 } else {
9474 if (LJ_DUALNUM) { 9498 if (LJ_DUALNUM) {
9475 dasm_put(Dst, 7396); 9499 dasm_put(Dst, 7418);
9476 } else { 9500 } else {
9477 dasm_put(Dst, 7398, FORL_STEP*8, FORL_STOP*8); 9501 dasm_put(Dst, 7420, FORL_STEP*8, FORL_STOP*8);
9478 } 9502 }
9479 dasm_put(Dst, 7407, FORL_IDX*8, FORL_STOP*8); 9503 dasm_put(Dst, 7429, FORL_IDX*8, FORL_STOP*8);
9480 } 9504 }
9481 dasm_put(Dst, 7416); 9505 dasm_put(Dst, 7438);
9482 if (op != BC_JFORL) { 9506 if (op != BC_JFORL) {
9483 dasm_put(Dst, 7418, 32-1); 9507 dasm_put(Dst, 7440, 32-1);
9484 } 9508 }
9485 dasm_put(Dst, 7421, FORL_EXT*8); 9509 dasm_put(Dst, 7443, FORL_EXT*8);
9486 if (op != BC_JFORL) { 9510 if (op != BC_JFORL) {
9487 dasm_put(Dst, 7424); 9511 dasm_put(Dst, 7446);
9488 } 9512 }
9489 dasm_put(Dst, 7426); 9513 dasm_put(Dst, 7448);
9490 if (op == BC_JFORI) { 9514 if (op == BC_JFORI) {
9491 dasm_put(Dst, 7428, -(BCBIAS_J*4 >> 16)); 9515 dasm_put(Dst, 7450, -(BCBIAS_J*4 >> 16));
9492 } 9516 }
9493 dasm_put(Dst, 7431); 9517 dasm_put(Dst, 7453);
9494 if (op == BC_FORI) { 9518 if (op == BC_FORI) {
9495 dasm_put(Dst, 7434); 9519 dasm_put(Dst, 7456);
9496 } else if (op == BC_IFORL) { 9520 } else if (op == BC_IFORL) {
9497 if (LJ_DUALNUM) { 9521 if (LJ_DUALNUM) {
9498 dasm_put(Dst, 7437); 9522 dasm_put(Dst, 7459);
9499 } else { 9523 } else {
9500 dasm_put(Dst, 7440); 9524 dasm_put(Dst, 7462);
9501 } 9525 }
9502 dasm_put(Dst, 7443, -(BCBIAS_J*4 >> 16)); 9526 dasm_put(Dst, 7465, -(BCBIAS_J*4 >> 16));
9503 } else if (op == BC_JFORI) { 9527 } else if (op == BC_JFORI) {
9504 dasm_put(Dst, 7447); 9528 dasm_put(Dst, 7469);
9505 } else { 9529 } else {
9506 dasm_put(Dst, 7450, BC_JLOOP); 9530 dasm_put(Dst, 7472, BC_JLOOP);
9507 } 9531 }
9508 if (LJ_DUALNUM) { 9532 if (LJ_DUALNUM) {
9509 dasm_put(Dst, 7453); 9533 dasm_put(Dst, 7475);
9510 } else { 9534 } else {
9511 dasm_put(Dst, 7456); 9535 dasm_put(Dst, 7478);
9512 } 9536 }
9513 dasm_put(Dst, 7468); 9537 dasm_put(Dst, 7490);
9514 if (op == BC_FORI) { 9538 if (op == BC_FORI) {
9515 dasm_put(Dst, 7470, -(BCBIAS_J*4 >> 16)); 9539 dasm_put(Dst, 7492, -(BCBIAS_J*4 >> 16));
9516 } else if (op == BC_IFORL) { 9540 } else if (op == BC_IFORL) {
9517 dasm_put(Dst, 7476); 9541 dasm_put(Dst, 7498);
9518 } else if (op == BC_JFORI) { 9542 } else if (op == BC_JFORI) {
9519 dasm_put(Dst, 7479); 9543 dasm_put(Dst, 7501);
9520 } else { 9544 } else {
9521 dasm_put(Dst, 7482, BC_JLOOP); 9545 dasm_put(Dst, 7504, BC_JLOOP);
9522 } 9546 }
9523 dasm_put(Dst, 7485); 9547 dasm_put(Dst, 7507);
9524 if (op == BC_JFORI) { 9548 if (op == BC_JFORI) {
9525 dasm_put(Dst, 7488, BC_JLOOP); 9549 dasm_put(Dst, 7510, BC_JLOOP);
9526 } 9550 }
9527 break; 9551 break;
9528 9552
9529 case BC_ITERL: 9553 case BC_ITERL:
9530#if LJ_HASJIT 9554#if LJ_HASJIT
9531 dasm_put(Dst, 7494, GG_DISP2HOT, -HOTCOUNT_LOOP); 9555 dasm_put(Dst, 7516, GG_DISP2HOT, -HOTCOUNT_LOOP);
9532#endif 9556#endif
9533 break; 9557 break;
9534 9558
@@ -9537,40 +9561,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9537 break; 9561 break;
9538#endif 9562#endif
9539 case BC_IITERL: 9563 case BC_IITERL:
9540 dasm_put(Dst, 7504, LJ_TNIL); 9564 dasm_put(Dst, 7526, LJ_TNIL);
9541 if (op == BC_JITERL) { 9565 if (op == BC_JITERL) {
9542 dasm_put(Dst, 7511, BC_JLOOP); 9566 dasm_put(Dst, 7533, BC_JLOOP);
9543 } else { 9567 } else {
9544 dasm_put(Dst, 7516, 32-1, -(BCBIAS_J*4 >> 16)); 9568 dasm_put(Dst, 7538, 32-1, -(BCBIAS_J*4 >> 16));
9545 } 9569 }
9546 dasm_put(Dst, 7524); 9570 dasm_put(Dst, 7546);
9547 break; 9571 break;
9548 9572
9549 case BC_LOOP: 9573 case BC_LOOP:
9550#if LJ_HASJIT 9574#if LJ_HASJIT
9551 dasm_put(Dst, 7536, GG_DISP2HOT, -HOTCOUNT_LOOP); 9575 dasm_put(Dst, 7558, GG_DISP2HOT, -HOTCOUNT_LOOP);
9552#endif 9576#endif
9553 break; 9577 break;
9554 9578
9555 case BC_ILOOP: 9579 case BC_ILOOP:
9556 dasm_put(Dst, 7546); 9580 dasm_put(Dst, 7568);
9557 break; 9581 break;
9558 9582
9559 case BC_JLOOP: 9583 case BC_JLOOP:
9560#if LJ_HASJIT 9584#if LJ_HASJIT
9561 dasm_put(Dst, 7557, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); 9585 dasm_put(Dst, 7579, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768);
9562#endif 9586#endif
9563 break; 9587 break;
9564 9588
9565 case BC_JMP: 9589 case BC_JMP:
9566 dasm_put(Dst, 7576, 32-1, -(BCBIAS_J*4 >> 16)); 9590 dasm_put(Dst, 7598, 32-1, -(BCBIAS_J*4 >> 16));
9567 break; 9591 break;
9568 9592
9569 /* -- Function headers -------------------------------------------------- */ 9593 /* -- Function headers -------------------------------------------------- */
9570 9594
9571 case BC_FUNCF: 9595 case BC_FUNCF:
9572#if LJ_HASJIT 9596#if LJ_HASJIT
9573 dasm_put(Dst, 7592, GG_DISP2HOT, -HOTCOUNT_CALL); 9597 dasm_put(Dst, 7614, GG_DISP2HOT, -HOTCOUNT_CALL);
9574#endif 9598#endif
9575 case BC_FUNCV: /* NYI: compiled vararg functions. */ 9599 case BC_FUNCV: /* NYI: compiled vararg functions. */
9576 break; 9600 break;
@@ -9580,42 +9604,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9580 break; 9604 break;
9581#endif 9605#endif
9582 case BC_IFUNCF: 9606 case BC_IFUNCF:
9583 dasm_put(Dst, 7602, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); 9607 dasm_put(Dst, 7624, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3);
9584 if (op != BC_JFUNCF) { 9608 if (op != BC_JFUNCF) {
9585 dasm_put(Dst, 7614); 9609 dasm_put(Dst, 7636);
9586 } 9610 }
9587 dasm_put(Dst, 7617); 9611 dasm_put(Dst, 7639);
9588 if (op == BC_JFUNCF) { 9612 if (op == BC_JFUNCF) {
9589 dasm_put(Dst, 7622, BC_JLOOP); 9613 dasm_put(Dst, 7644, BC_JLOOP);
9590 } else { 9614 } else {
9591 dasm_put(Dst, 7626); 9615 dasm_put(Dst, 7648);
9592 } 9616 }
9593 dasm_put(Dst, 7635); 9617 dasm_put(Dst, 7657);
9594 break; 9618 break;
9595 9619
9596 case BC_JFUNCV: 9620 case BC_JFUNCV:
9597#if !LJ_HASJIT 9621#if !LJ_HASJIT
9598 break; 9622 break;
9599#endif 9623#endif
9600 dasm_put(Dst, 7641); 9624 dasm_put(Dst, 7663);
9601 break; /* NYI: compiled vararg functions. */ 9625 break; /* NYI: compiled vararg functions. */
9602 9626
9603 case BC_IFUNCV: 9627 case BC_IFUNCV:
9604 dasm_put(Dst, 7643, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); 9628 dasm_put(Dst, 7665, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL);
9605 break; 9629 break;
9606 9630
9607 case BC_FUNCC: 9631 case BC_FUNCC:
9608 case BC_FUNCCW: 9632 case BC_FUNCCW:
9609 if (op == BC_FUNCC) { 9633 if (op == BC_FUNCC) {
9610 dasm_put(Dst, 7696, Dt8(->f)); 9634 dasm_put(Dst, 7718, Dt8(->f));
9611 } else { 9635 } else {
9612 dasm_put(Dst, 7699, DISPATCH_GL(wrapf)); 9636 dasm_put(Dst, 7721, DISPATCH_GL(wrapf));
9613 } 9637 }
9614 dasm_put(Dst, 7702, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); 9638 dasm_put(Dst, 7724, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
9615 if (op == BC_FUNCCW) { 9639 if (op == BC_FUNCCW) {
9616 dasm_put(Dst, 7715, Dt8(->f)); 9640 dasm_put(Dst, 7737, Dt8(->f));
9617 } 9641 }
9618 dasm_put(Dst, 7718, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); 9642 dasm_put(Dst, 7740, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate));
9619 break; 9643 break;
9620 9644
9621 /* ---------------------------------------------------------------------- */ 9645 /* ---------------------------------------------------------------------- */
@@ -9635,7 +9659,7 @@ static int build_backend(BuildCtx *ctx)
9635 9659
9636 build_subroutines(ctx); 9660 build_subroutines(ctx);
9637 9661
9638 dasm_put(Dst, 7739); 9662 dasm_put(Dst, 7761);
9639 for (op = 0; op < BC__MAX; op++) 9663 for (op = 0; op < BC__MAX; op++)
9640 build_ins(ctx, (BCOp)op, op); 9664 build_ins(ctx, (BCOp)op, op);
9641 9665
diff --git a/src/lj_mcode.c b/src/lj_mcode.c
index a48f9e55..7857ebc0 100644
--- a/src/lj_mcode.c
+++ b/src/lj_mcode.c
@@ -29,15 +29,6 @@
29void sys_icache_invalidate(void *start, size_t len); 29void sys_icache_invalidate(void *start, size_t len);
30#endif 30#endif
31 31
32#if LJ_TARGET_LINUX && LJ_TARGET_PPC
33#include <dlfcn.h>
34static void (*mcode_sync_ppc)(void *start, void *end);
35static void mcode_sync_dummy(void *start, void *end)
36{
37 UNUSED(start); UNUSED(end);
38}
39#endif
40
41/* Synchronize data/instruction cache. */ 32/* Synchronize data/instruction cache. */
42void lj_mcode_sync(void *start, void *end) 33void lj_mcode_sync(void *start, void *end)
43{ 34{
@@ -48,14 +39,9 @@ void lj_mcode_sync(void *start, void *end)
48 UNUSED(start); UNUSED(end); 39 UNUSED(start); UNUSED(end);
49#elif LJ_TARGET_OSX 40#elif LJ_TARGET_OSX
50 sys_icache_invalidate(start, (char *)end-(char *)start); 41 sys_icache_invalidate(start, (char *)end-(char *)start);
51#elif LJ_TARGET_LINUX && LJ_TARGET_PPC 42#elif LJ_TARGET_PPC
52 if (!mcode_sync_ppc) { 43 lj_vm_cachesync(start, end);
53 void *vdso = dlopen("linux-vdso32.so.1", RTLD_LAZY); 44#elif defined(__GNUC__)
54 if (!vdso || !(mcode_sync_ppc = dlsym(vdso, "__kernel_sync_dicache")))
55 mcode_sync_ppc = mcode_sync_dummy;
56 }
57 mcode_sync_ppc(start, end);
58#elif defined(__GNUC__) && !LJ_TARGET_PPC
59 __clear_cache(start, end); 45 __clear_cache(start, end);
60#else 46#else
61#error "Missing builtin to flush instruction cache" 47#error "Missing builtin to flush instruction cache"
diff --git a/src/lj_vm.h b/src/lj_vm.h
index 77f119b4..2cf04184 100644
--- a/src/lj_vm.h
+++ b/src/lj_vm.h
@@ -27,6 +27,9 @@ LJ_ASMF void lj_vm_unwind_rethrow(void);
27#if LJ_TARGET_X86ORX64 27#if LJ_TARGET_X86ORX64
28LJ_ASMF int lj_vm_cpuid(uint32_t f, uint32_t res[4]); 28LJ_ASMF int lj_vm_cpuid(uint32_t f, uint32_t res[4]);
29#endif 29#endif
30#if LJ_TARGET_PPC
31void lj_vm_cachesync(void *start, void *end);
32#endif
30LJ_ASMF double lj_vm_foldarith(double x, double y, int op); 33LJ_ASMF double lj_vm_foldarith(double x, double y, int op);
31#if LJ_HASJIT 34#if LJ_HASJIT
32LJ_ASMF double lj_vm_foldfpm(double x, int op); 35LJ_ASMF double lj_vm_foldfpm(double x, int op);