diff options
Diffstat (limited to 'src/buildvm_ppc.h')
-rw-r--r-- | src/buildvm_ppc.h | 826 |
1 files changed, 437 insertions, 389 deletions
diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h index ea35c990..80d713c9 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 |
15 | static const unsigned int build_actionlist[7577] = { | 15 | static const unsigned int build_actionlist[7580] = { |
16 | 0x00010001, | 16 | 0x00010001, |
17 | 0x00060014, | 17 | 0x00060014, |
18 | 0x72000000, | 18 | 0x72000000, |
@@ -4112,8 +4112,10 @@ static const unsigned int build_actionlist[7577] = { | |||
4112 | 0x3484ffff, | 4112 | 0x3484ffff, |
4113 | 0x7c21416e, | 4113 | 0x7c21416e, |
4114 | 0x4cc63042, | 4114 | 0x4cc63042, |
4115 | 0x9069fffc, | 4115 | 0x91c9fffc, |
4116 | 0x38c00000, | 4116 | 0x38c00000, |
4117 | 0x9069fff8, | ||
4118 | 0x7d2e4b78, | ||
4117 | 0x39030000, | 4119 | 0x39030000, |
4118 | 0x00098200, | 4120 | 0x00098200, |
4119 | 0x54841000, | 4121 | 0x54841000, |
@@ -4168,9 +4170,9 @@ static const unsigned int build_actionlist[7577] = { | |||
4168 | 0x80630000, | 4170 | 0x80630000, |
4169 | 0x00098200, | 4171 | 0x00098200, |
4170 | 0x4e800421, | 4172 | 0x4e800421, |
4171 | 0x81210000, | 4173 | 0x810efff8, |
4172 | 0x8109fffc, | 4174 | 0x812efffc, |
4173 | 0x80090004, | 4175 | 0x800e0004, |
4174 | 0x90680000, | 4176 | 0x90680000, |
4175 | 0x00098200, | 4177 | 0x00098200, |
4176 | 0xd8280000, | 4178 | 0xd8280000, |
@@ -4180,9 +4182,10 @@ static const unsigned int build_actionlist[7577] = { | |||
4180 | 0x7c0803a6, | 4182 | 0x7c0803a6, |
4181 | 0x90a80000, | 4183 | 0x90a80000, |
4182 | 0x00098200, | 4184 | 0x00098200, |
4183 | 0x7d214b78, | 4185 | 0x7dc17378, |
4184 | 0x90c80000, | 4186 | 0x90c80000, |
4185 | 0x00098200, | 4187 | 0x00098200, |
4188 | 0x7d2e4b78, | ||
4186 | 0x4e800020, | 4189 | 0x4e800020, |
4187 | 0x00000000, | 4190 | 0x00000000, |
4188 | 0x00080000, | 4191 | 0x00080000, |
@@ -8349,7 +8352,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
8349 | #if LJ_HASFFI | 8352 | #if LJ_HASFFI |
8350 | #define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) | 8353 | #define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) |
8351 | dasm_put(Dst, 4085, DtE(->spadj), DtE(->nsp), DtE(->nfpr), DtE(->stack), 31-2, DtE(->fpr[0]), DtE(->fpr[1]), DtE(->fpr[2]), DtE(->fpr[3]), DtE(->fpr[4]), DtE(->fpr[5]), DtE(->fpr[6]), DtE(->fpr[7]), DtE(->func), DtE(->gpr[1]), DtE(->gpr[2])); | 8354 | dasm_put(Dst, 4085, DtE(->spadj), DtE(->nsp), DtE(->nfpr), DtE(->stack), 31-2, DtE(->fpr[0]), DtE(->fpr[1]), DtE(->fpr[2]), DtE(->fpr[3]), DtE(->fpr[4]), DtE(->fpr[5]), DtE(->fpr[6]), DtE(->fpr[7]), DtE(->func), DtE(->gpr[1]), DtE(->gpr[2])); |
8352 | dasm_put(Dst, 4141, DtE(->gpr[3]), DtE(->gpr[4]), DtE(->gpr[5]), DtE(->gpr[6]), DtE(->gpr[7]), DtE(->gpr[0]), DtE(->gpr[0]), DtE(->fpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3])); | 8355 | dasm_put(Dst, 4143, DtE(->gpr[3]), DtE(->gpr[4]), DtE(->gpr[5]), DtE(->gpr[6]), DtE(->gpr[7]), DtE(->gpr[0]), DtE(->gpr[0]), DtE(->fpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3])); |
8353 | #endif | 8356 | #endif |
8354 | } | 8357 | } |
8355 | 8358 | ||
@@ -8357,7 +8360,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
8357 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) | 8360 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) |
8358 | { | 8361 | { |
8359 | int vk = 0; | 8362 | int vk = 0; |
8360 | dasm_put(Dst, 4172, defop); | 8363 | dasm_put(Dst, 4175, defop); |
8361 | 8364 | ||
8362 | switch (op) { | 8365 | switch (op) { |
8363 | 8366 | ||
@@ -8367,224 +8370,224 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8367 | 8370 | ||
8368 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: | 8371 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: |
8369 | if (LJ_DUALNUM) { | 8372 | if (LJ_DUALNUM) { |
8370 | dasm_put(Dst, 4174, -(BCBIAS_J*4 >> 16)); | 8373 | dasm_put(Dst, 4177, -(BCBIAS_J*4 >> 16)); |
8371 | if (op == BC_ISLT) { | 8374 | if (op == BC_ISLT) { |
8372 | dasm_put(Dst, 4191); | ||
8373 | } else if (op == BC_ISGE) { | ||
8374 | dasm_put(Dst, 4194); | 8375 | dasm_put(Dst, 4194); |
8375 | } else if (op == BC_ISLE) { | 8376 | } else if (op == BC_ISGE) { |
8376 | dasm_put(Dst, 4197); | 8377 | dasm_put(Dst, 4197); |
8377 | } else { | 8378 | } else if (op == BC_ISLE) { |
8378 | dasm_put(Dst, 4200); | 8379 | dasm_put(Dst, 4200); |
8380 | } else { | ||
8381 | dasm_put(Dst, 4203); | ||
8379 | } | 8382 | } |
8380 | dasm_put(Dst, 4203); | 8383 | dasm_put(Dst, 4206); |
8381 | if (op == BC_ISLT) { | 8384 | if (op == BC_ISLT) { |
8382 | dasm_put(Dst, 4242); | ||
8383 | } else if (op == BC_ISGE) { | ||
8384 | dasm_put(Dst, 4245); | 8385 | dasm_put(Dst, 4245); |
8385 | } else if (op == BC_ISLE) { | 8386 | } else if (op == BC_ISGE) { |
8386 | dasm_put(Dst, 4248); | 8387 | dasm_put(Dst, 4248); |
8388 | } else if (op == BC_ISLE) { | ||
8389 | dasm_put(Dst, 4251); | ||
8387 | } else { | 8390 | } else { |
8388 | dasm_put(Dst, 4252); | 8391 | dasm_put(Dst, 4255); |
8389 | } | 8392 | } |
8390 | dasm_put(Dst, 4256); | 8393 | dasm_put(Dst, 4259); |
8391 | } else { | 8394 | } else { |
8392 | dasm_put(Dst, 4259, -(BCBIAS_J*4 >> 16)); | 8395 | dasm_put(Dst, 4262, -(BCBIAS_J*4 >> 16)); |
8393 | if (op == BC_ISLT) { | 8396 | if (op == BC_ISLT) { |
8394 | dasm_put(Dst, 4276); | ||
8395 | } else if (op == BC_ISGE) { | ||
8396 | dasm_put(Dst, 4279); | 8397 | dasm_put(Dst, 4279); |
8397 | } else if (op == BC_ISLE) { | 8398 | } else if (op == BC_ISGE) { |
8398 | dasm_put(Dst, 4282); | 8399 | dasm_put(Dst, 4282); |
8400 | } else if (op == BC_ISLE) { | ||
8401 | dasm_put(Dst, 4285); | ||
8399 | } else { | 8402 | } else { |
8400 | dasm_put(Dst, 4286); | 8403 | dasm_put(Dst, 4289); |
8401 | } | 8404 | } |
8402 | dasm_put(Dst, 4290); | 8405 | dasm_put(Dst, 4293); |
8403 | } | 8406 | } |
8404 | break; | 8407 | break; |
8405 | 8408 | ||
8406 | case BC_ISEQV: case BC_ISNEV: | 8409 | case BC_ISEQV: case BC_ISNEV: |
8407 | vk = op == BC_ISEQV; | 8410 | vk = op == BC_ISEQV; |
8408 | if (LJ_DUALNUM) { | 8411 | if (LJ_DUALNUM) { |
8409 | dasm_put(Dst, 4303, -(BCBIAS_J*4 >> 16)); | 8412 | dasm_put(Dst, 4306, -(BCBIAS_J*4 >> 16)); |
8410 | if (vk) { | 8413 | if (vk) { |
8411 | dasm_put(Dst, 4316); | ||
8412 | } else { | ||
8413 | dasm_put(Dst, 4319); | 8414 | dasm_put(Dst, 4319); |
8415 | } else { | ||
8416 | dasm_put(Dst, 4322); | ||
8414 | } | 8417 | } |
8415 | } else { | 8418 | } else { |
8416 | dasm_put(Dst, 4322, -(BCBIAS_J*4 >> 16)); | 8419 | dasm_put(Dst, 4325, -(BCBIAS_J*4 >> 16)); |
8417 | if (vk) { | 8420 | if (vk) { |
8418 | dasm_put(Dst, 4339); | 8421 | dasm_put(Dst, 4342); |
8419 | } else { | 8422 | } else { |
8420 | dasm_put(Dst, 4343); | 8423 | dasm_put(Dst, 4346); |
8421 | } | 8424 | } |
8422 | dasm_put(Dst, 4347); | 8425 | dasm_put(Dst, 4350); |
8423 | } | 8426 | } |
8424 | dasm_put(Dst, 4359); | 8427 | dasm_put(Dst, 4362); |
8425 | if (!LJ_DUALNUM) { | 8428 | if (!LJ_DUALNUM) { |
8426 | dasm_put(Dst, 4361); | 8429 | dasm_put(Dst, 4364); |
8427 | } | 8430 | } |
8428 | if (LJ_HASFFI) { | 8431 | if (LJ_HASFFI) { |
8429 | dasm_put(Dst, 4364, LJ_TCDATA, LJ_TCDATA); | 8432 | dasm_put(Dst, 4367, LJ_TCDATA, LJ_TCDATA); |
8430 | } | 8433 | } |
8431 | dasm_put(Dst, 4369, ~LJ_TISPRI); | 8434 | dasm_put(Dst, 4372, ~LJ_TISPRI); |
8432 | if (LJ_HASFFI) { | 8435 | if (LJ_HASFFI) { |
8433 | dasm_put(Dst, 4374); | 8436 | dasm_put(Dst, 4377); |
8434 | } | 8437 | } |
8435 | dasm_put(Dst, 4376, ~LJ_TISTABUD); | 8438 | dasm_put(Dst, 4379, ~LJ_TISTABUD); |
8436 | if (LJ_HASFFI) { | 8439 | if (LJ_HASFFI) { |
8437 | dasm_put(Dst, 4379); | 8440 | dasm_put(Dst, 4382); |
8438 | } | 8441 | } |
8439 | dasm_put(Dst, 4382); | 8442 | dasm_put(Dst, 4385); |
8440 | if (vk) { | 8443 | if (vk) { |
8441 | dasm_put(Dst, 4390); | 8444 | dasm_put(Dst, 4393); |
8442 | } else { | 8445 | } else { |
8443 | dasm_put(Dst, 4395); | 8446 | dasm_put(Dst, 4398); |
8444 | } | 8447 | } |
8445 | if (LJ_DUALNUM) { | 8448 | if (LJ_DUALNUM) { |
8446 | dasm_put(Dst, 4400); | 8449 | dasm_put(Dst, 4403); |
8447 | } else { | 8450 | } else { |
8448 | dasm_put(Dst, 4415); | 8451 | dasm_put(Dst, 4418); |
8449 | } | 8452 | } |
8450 | dasm_put(Dst, 4418, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); | 8453 | dasm_put(Dst, 4421, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); |
8451 | break; | 8454 | break; |
8452 | 8455 | ||
8453 | case BC_ISEQS: case BC_ISNES: | 8456 | case BC_ISEQS: case BC_ISNES: |
8454 | vk = op == BC_ISEQS; | 8457 | vk = op == BC_ISEQS; |
8455 | dasm_put(Dst, 4437, 32-1); | 8458 | dasm_put(Dst, 4440, 32-1); |
8456 | if (LJ_HASFFI) { | 8459 | if (LJ_HASFFI) { |
8457 | dasm_put(Dst, 4445, LJ_TCDATA); | 8460 | dasm_put(Dst, 4448, LJ_TCDATA); |
8458 | } | 8461 | } |
8459 | dasm_put(Dst, 4448, LJ_TSTR); | 8462 | dasm_put(Dst, 4451, LJ_TSTR); |
8460 | if (LJ_HASFFI) { | 8463 | if (LJ_HASFFI) { |
8461 | dasm_put(Dst, 4452); | 8464 | dasm_put(Dst, 4455); |
8462 | } | 8465 | } |
8463 | dasm_put(Dst, 4455, -(BCBIAS_J*4 >> 16)); | 8466 | dasm_put(Dst, 4458, -(BCBIAS_J*4 >> 16)); |
8464 | if (vk) { | 8467 | if (vk) { |
8465 | dasm_put(Dst, 4463); | 8468 | dasm_put(Dst, 4466); |
8466 | } else { | 8469 | } else { |
8467 | dasm_put(Dst, 4465); | 8470 | dasm_put(Dst, 4468); |
8468 | } | 8471 | } |
8469 | dasm_put(Dst, 4467); | 8472 | dasm_put(Dst, 4470); |
8470 | break; | 8473 | break; |
8471 | 8474 | ||
8472 | case BC_ISEQN: case BC_ISNEN: | 8475 | case BC_ISEQN: case BC_ISNEN: |
8473 | vk = op == BC_ISEQN; | 8476 | vk = op == BC_ISEQN; |
8474 | if (LJ_DUALNUM) { | 8477 | if (LJ_DUALNUM) { |
8475 | dasm_put(Dst, 4479, -(BCBIAS_J*4 >> 16)); | 8478 | dasm_put(Dst, 4482, -(BCBIAS_J*4 >> 16)); |
8476 | if (vk) { | 8479 | if (vk) { |
8477 | dasm_put(Dst, 4491); | 8480 | dasm_put(Dst, 4494); |
8478 | } else { | 8481 | } else { |
8479 | dasm_put(Dst, 4493); | 8482 | dasm_put(Dst, 4496); |
8480 | } | 8483 | } |
8481 | dasm_put(Dst, 4495); | 8484 | dasm_put(Dst, 4498); |
8482 | } else { | 8485 | } else { |
8483 | if (vk) { | 8486 | if (vk) { |
8484 | dasm_put(Dst, 4502); | 8487 | dasm_put(Dst, 4505); |
8485 | } else { | 8488 | } else { |
8486 | dasm_put(Dst, 4504); | 8489 | dasm_put(Dst, 4507); |
8487 | } | 8490 | } |
8488 | dasm_put(Dst, 4506, -(BCBIAS_J*4 >> 16)); | 8491 | dasm_put(Dst, 4509, -(BCBIAS_J*4 >> 16)); |
8489 | } | 8492 | } |
8490 | if (vk) { | 8493 | if (vk) { |
8491 | dasm_put(Dst, 4519); | 8494 | dasm_put(Dst, 4522); |
8492 | if (!LJ_HASFFI) { | 8495 | if (!LJ_HASFFI) { |
8493 | dasm_put(Dst, 4524); | 8496 | dasm_put(Dst, 4527); |
8494 | } | 8497 | } |
8495 | } else { | 8498 | } else { |
8496 | dasm_put(Dst, 4526); | 8499 | dasm_put(Dst, 4529); |
8497 | if (!LJ_HASFFI) { | 8500 | if (!LJ_HASFFI) { |
8498 | dasm_put(Dst, 4530); | 8501 | dasm_put(Dst, 4533); |
8499 | } | 8502 | } |
8500 | dasm_put(Dst, 4532); | 8503 | dasm_put(Dst, 4535); |
8501 | } | 8504 | } |
8502 | dasm_put(Dst, 4535); | 8505 | dasm_put(Dst, 4538); |
8503 | if (LJ_HASFFI) { | 8506 | if (LJ_HASFFI) { |
8504 | dasm_put(Dst, 4546, LJ_TCDATA); | 8507 | dasm_put(Dst, 4549, LJ_TCDATA); |
8505 | } | 8508 | } |
8506 | if (LJ_DUALNUM) { | 8509 | if (LJ_DUALNUM) { |
8507 | dasm_put(Dst, 4554); | 8510 | dasm_put(Dst, 4557); |
8508 | } | 8511 | } |
8509 | break; | 8512 | break; |
8510 | 8513 | ||
8511 | case BC_ISEQP: case BC_ISNEP: | 8514 | case BC_ISEQP: case BC_ISNEP: |
8512 | vk = op == BC_ISEQP; | 8515 | vk = op == BC_ISEQP; |
8513 | dasm_put(Dst, 4578, 32-3); | 8516 | dasm_put(Dst, 4581, 32-3); |
8514 | if (LJ_HASFFI) { | 8517 | if (LJ_HASFFI) { |
8515 | dasm_put(Dst, 4585, LJ_TCDATA); | 8518 | dasm_put(Dst, 4588, LJ_TCDATA); |
8516 | } | 8519 | } |
8517 | dasm_put(Dst, 4588); | 8520 | dasm_put(Dst, 4591); |
8518 | if (LJ_HASFFI) { | 8521 | if (LJ_HASFFI) { |
8519 | dasm_put(Dst, 4590); | 8522 | dasm_put(Dst, 4593); |
8520 | } | 8523 | } |
8521 | dasm_put(Dst, 4593, -(BCBIAS_J*4 >> 16)); | 8524 | dasm_put(Dst, 4596, -(BCBIAS_J*4 >> 16)); |
8522 | if (vk) { | 8525 | if (vk) { |
8523 | dasm_put(Dst, 4599); | 8526 | dasm_put(Dst, 4602); |
8524 | } else { | 8527 | } else { |
8525 | dasm_put(Dst, 4601); | 8528 | dasm_put(Dst, 4604); |
8526 | } | 8529 | } |
8527 | dasm_put(Dst, 4603); | 8530 | dasm_put(Dst, 4606); |
8528 | break; | 8531 | break; |
8529 | 8532 | ||
8530 | /* -- Unary test and copy ops ------------------------------------------- */ | 8533 | /* -- Unary test and copy ops ------------------------------------------- */ |
8531 | 8534 | ||
8532 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: | 8535 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: |
8533 | dasm_put(Dst, 4615); | 8536 | dasm_put(Dst, 4618); |
8534 | if (op == BC_IST || op == BC_ISF) { | 8537 | if (op == BC_IST || op == BC_ISF) { |
8535 | dasm_put(Dst, 4619, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); | 8538 | dasm_put(Dst, 4622, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); |
8536 | if (op == BC_IST) { | 8539 | if (op == BC_IST) { |
8537 | dasm_put(Dst, 4626); | 8540 | dasm_put(Dst, 4629); |
8538 | } else { | 8541 | } else { |
8539 | dasm_put(Dst, 4628); | 8542 | dasm_put(Dst, 4631); |
8540 | } | 8543 | } |
8541 | dasm_put(Dst, 4630); | 8544 | dasm_put(Dst, 4633); |
8542 | } else { | 8545 | } else { |
8543 | dasm_put(Dst, 4632, LJ_TFALSE); | 8546 | dasm_put(Dst, 4635, LJ_TFALSE); |
8544 | if (op == BC_ISTC) { | 8547 | if (op == BC_ISTC) { |
8545 | dasm_put(Dst, 4637); | ||
8546 | } else { | ||
8547 | dasm_put(Dst, 4640); | 8548 | dasm_put(Dst, 4640); |
8549 | } else { | ||
8550 | dasm_put(Dst, 4643); | ||
8548 | } | 8551 | } |
8549 | dasm_put(Dst, 4643, -(BCBIAS_J*4 >> 16)); | 8552 | dasm_put(Dst, 4646, -(BCBIAS_J*4 >> 16)); |
8550 | } | 8553 | } |
8551 | dasm_put(Dst, 4650); | 8554 | dasm_put(Dst, 4653); |
8552 | break; | 8555 | break; |
8553 | 8556 | ||
8554 | /* -- Unary ops --------------------------------------------------------- */ | 8557 | /* -- Unary ops --------------------------------------------------------- */ |
8555 | 8558 | ||
8556 | case BC_MOV: | 8559 | case BC_MOV: |
8557 | dasm_put(Dst, 4661); | 8560 | dasm_put(Dst, 4664); |
8558 | break; | 8561 | break; |
8559 | case BC_NOT: | 8562 | case BC_NOT: |
8560 | dasm_put(Dst, 4674, LJ_TTRUE); | 8563 | dasm_put(Dst, 4677, LJ_TTRUE); |
8561 | break; | 8564 | break; |
8562 | case BC_UNM: | 8565 | case BC_UNM: |
8563 | dasm_put(Dst, 4690); | 8566 | dasm_put(Dst, 4693); |
8564 | if (LJ_DUALNUM) { | 8567 | if (LJ_DUALNUM) { |
8565 | dasm_put(Dst, 4694); | 8568 | dasm_put(Dst, 4697); |
8566 | } | 8569 | } |
8567 | dasm_put(Dst, 4722); | 8570 | dasm_put(Dst, 4725); |
8568 | if (LJ_DUALNUM) { | 8571 | if (LJ_DUALNUM) { |
8569 | dasm_put(Dst, 4732); | ||
8570 | } else { | ||
8571 | dasm_put(Dst, 4735); | 8572 | dasm_put(Dst, 4735); |
8573 | } else { | ||
8574 | dasm_put(Dst, 4738); | ||
8572 | } | 8575 | } |
8573 | break; | 8576 | break; |
8574 | case BC_LEN: | 8577 | case BC_LEN: |
8575 | dasm_put(Dst, 4744, LJ_TSTR, Dt5(->len)); | 8578 | dasm_put(Dst, 4747, LJ_TSTR, Dt5(->len)); |
8576 | if (LJ_DUALNUM) { | 8579 | if (LJ_DUALNUM) { |
8577 | dasm_put(Dst, 4754); | 8580 | dasm_put(Dst, 4757); |
8578 | } else { | 8581 | } else { |
8579 | dasm_put(Dst, 4759); | 8582 | dasm_put(Dst, 4762); |
8580 | } | 8583 | } |
8581 | dasm_put(Dst, 4766, LJ_TTAB); | 8584 | dasm_put(Dst, 4769, LJ_TTAB); |
8582 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 8585 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
8583 | dasm_put(Dst, 4780, Dt6(->metatable)); | 8586 | dasm_put(Dst, 4783, Dt6(->metatable)); |
8584 | #endif | 8587 | #endif |
8585 | dasm_put(Dst, 4787); | 8588 | dasm_put(Dst, 4790); |
8586 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 8589 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
8587 | dasm_put(Dst, 4793, Dt6(->nomm), 1<<MM_len); | 8590 | dasm_put(Dst, 4796, Dt6(->nomm), 1<<MM_len); |
8588 | #endif | 8591 | #endif |
8589 | break; | 8592 | break; |
8590 | 8593 | ||
@@ -8596,77 +8599,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8596 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8599 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8597 | switch (vk) { | 8600 | switch (vk) { |
8598 | case 0: | 8601 | case 0: |
8599 | dasm_put(Dst, 4803); | 8602 | dasm_put(Dst, 4806); |
8600 | break; | 8603 | break; |
8601 | case 1: | 8604 | case 1: |
8602 | dasm_put(Dst, 4809); | 8605 | dasm_put(Dst, 4812); |
8603 | break; | 8606 | break; |
8604 | default: | 8607 | default: |
8605 | dasm_put(Dst, 4815); | 8608 | dasm_put(Dst, 4818); |
8606 | break; | 8609 | break; |
8607 | } | 8610 | } |
8608 | dasm_put(Dst, 4821); | 8611 | dasm_put(Dst, 4824); |
8609 | switch (vk) { | 8612 | switch (vk) { |
8610 | case 0: | 8613 | case 0: |
8611 | dasm_put(Dst, 4848); | 8614 | dasm_put(Dst, 4851); |
8612 | break; | 8615 | break; |
8613 | case 1: | 8616 | case 1: |
8614 | dasm_put(Dst, 4851); | 8617 | dasm_put(Dst, 4854); |
8615 | break; | 8618 | break; |
8616 | default: | 8619 | default: |
8617 | dasm_put(Dst, 4854); | 8620 | dasm_put(Dst, 4857); |
8618 | break; | 8621 | break; |
8619 | } | 8622 | } |
8620 | dasm_put(Dst, 4857); | 8623 | dasm_put(Dst, 4860); |
8621 | if (vk == 1) { | 8624 | if (vk == 1) { |
8622 | dasm_put(Dst, 4859); | 8625 | dasm_put(Dst, 4862); |
8623 | } else { | 8626 | } else { |
8624 | dasm_put(Dst, 4863); | 8627 | dasm_put(Dst, 4866); |
8625 | } | 8628 | } |
8626 | switch (vk) { | 8629 | switch (vk) { |
8627 | case 0: | 8630 | case 0: |
8628 | dasm_put(Dst, 4867); | 8631 | dasm_put(Dst, 4870); |
8629 | break; | 8632 | break; |
8630 | case 1: | 8633 | case 1: |
8631 | dasm_put(Dst, 4870); | 8634 | dasm_put(Dst, 4873); |
8632 | break; | 8635 | break; |
8633 | default: | 8636 | default: |
8634 | dasm_put(Dst, 4873); | 8637 | dasm_put(Dst, 4876); |
8635 | break; | 8638 | break; |
8636 | } | 8639 | } |
8637 | dasm_put(Dst, 4876); | 8640 | dasm_put(Dst, 4879); |
8638 | } else { | 8641 | } else { |
8639 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8642 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8640 | switch (vk) { | 8643 | switch (vk) { |
8641 | case 0: | 8644 | case 0: |
8642 | dasm_put(Dst, 4883); | 8645 | dasm_put(Dst, 4886); |
8643 | if (LJ_DUALNUM) { | 8646 | if (LJ_DUALNUM) { |
8644 | dasm_put(Dst, 4885); | 8647 | dasm_put(Dst, 4888); |
8645 | } | 8648 | } |
8646 | dasm_put(Dst, 4887); | ||
8647 | if (LJ_DUALNUM) { | ||
8648 | dasm_put(Dst, 4890); | 8649 | dasm_put(Dst, 4890); |
8650 | if (LJ_DUALNUM) { | ||
8651 | dasm_put(Dst, 4893); | ||
8649 | } else { | 8652 | } else { |
8650 | dasm_put(Dst, 4896); | 8653 | dasm_put(Dst, 4899); |
8651 | } | 8654 | } |
8652 | break; | 8655 | break; |
8653 | case 1: | 8656 | case 1: |
8654 | dasm_put(Dst, 4900); | 8657 | dasm_put(Dst, 4903); |
8655 | if (LJ_DUALNUM) { | 8658 | if (LJ_DUALNUM) { |
8656 | dasm_put(Dst, 4902); | 8659 | dasm_put(Dst, 4905); |
8657 | } | 8660 | } |
8658 | dasm_put(Dst, 4904); | ||
8659 | if (LJ_DUALNUM) { | ||
8660 | dasm_put(Dst, 4907); | 8661 | dasm_put(Dst, 4907); |
8662 | if (LJ_DUALNUM) { | ||
8663 | dasm_put(Dst, 4910); | ||
8661 | } else { | 8664 | } else { |
8662 | dasm_put(Dst, 4913); | 8665 | dasm_put(Dst, 4916); |
8663 | } | 8666 | } |
8664 | break; | 8667 | break; |
8665 | default: | 8668 | default: |
8666 | dasm_put(Dst, 4917); | 8669 | dasm_put(Dst, 4920); |
8667 | break; | 8670 | break; |
8668 | } | 8671 | } |
8669 | dasm_put(Dst, 4927); | 8672 | dasm_put(Dst, 4930); |
8670 | } | 8673 | } |
8671 | break; | 8674 | break; |
8672 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: | 8675 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: |
@@ -8674,77 +8677,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8674 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8677 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8675 | switch (vk) { | 8678 | switch (vk) { |
8676 | case 0: | 8679 | case 0: |
8677 | dasm_put(Dst, 4940); | 8680 | dasm_put(Dst, 4943); |
8678 | break; | 8681 | break; |
8679 | case 1: | 8682 | case 1: |
8680 | dasm_put(Dst, 4946); | 8683 | dasm_put(Dst, 4949); |
8681 | break; | 8684 | break; |
8682 | default: | 8685 | default: |
8683 | dasm_put(Dst, 4952); | 8686 | dasm_put(Dst, 4955); |
8684 | break; | 8687 | break; |
8685 | } | 8688 | } |
8686 | dasm_put(Dst, 4958); | 8689 | dasm_put(Dst, 4961); |
8687 | switch (vk) { | 8690 | switch (vk) { |
8688 | case 0: | 8691 | case 0: |
8689 | dasm_put(Dst, 4985); | 8692 | dasm_put(Dst, 4988); |
8690 | break; | 8693 | break; |
8691 | case 1: | 8694 | case 1: |
8692 | dasm_put(Dst, 4988); | 8695 | dasm_put(Dst, 4991); |
8693 | break; | 8696 | break; |
8694 | default: | 8697 | default: |
8695 | dasm_put(Dst, 4991); | 8698 | dasm_put(Dst, 4994); |
8696 | break; | 8699 | break; |
8697 | } | 8700 | } |
8698 | dasm_put(Dst, 4994); | 8701 | dasm_put(Dst, 4997); |
8699 | if (vk == 1) { | 8702 | if (vk == 1) { |
8700 | dasm_put(Dst, 4996); | 8703 | dasm_put(Dst, 4999); |
8701 | } else { | 8704 | } else { |
8702 | dasm_put(Dst, 5000); | 8705 | dasm_put(Dst, 5003); |
8703 | } | 8706 | } |
8704 | switch (vk) { | 8707 | switch (vk) { |
8705 | case 0: | 8708 | case 0: |
8706 | dasm_put(Dst, 5004); | 8709 | dasm_put(Dst, 5007); |
8707 | break; | 8710 | break; |
8708 | case 1: | 8711 | case 1: |
8709 | dasm_put(Dst, 5007); | 8712 | dasm_put(Dst, 5010); |
8710 | break; | 8713 | break; |
8711 | default: | 8714 | default: |
8712 | dasm_put(Dst, 5010); | 8715 | dasm_put(Dst, 5013); |
8713 | break; | 8716 | break; |
8714 | } | 8717 | } |
8715 | dasm_put(Dst, 5013); | 8718 | dasm_put(Dst, 5016); |
8716 | } else { | 8719 | } else { |
8717 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8720 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8718 | switch (vk) { | 8721 | switch (vk) { |
8719 | case 0: | 8722 | case 0: |
8720 | dasm_put(Dst, 5020); | 8723 | dasm_put(Dst, 5023); |
8721 | if (LJ_DUALNUM) { | 8724 | if (LJ_DUALNUM) { |
8722 | dasm_put(Dst, 5022); | 8725 | dasm_put(Dst, 5025); |
8723 | } | 8726 | } |
8724 | dasm_put(Dst, 5024); | ||
8725 | if (LJ_DUALNUM) { | ||
8726 | dasm_put(Dst, 5027); | 8727 | dasm_put(Dst, 5027); |
8728 | if (LJ_DUALNUM) { | ||
8729 | dasm_put(Dst, 5030); | ||
8727 | } else { | 8730 | } else { |
8728 | dasm_put(Dst, 5033); | 8731 | dasm_put(Dst, 5036); |
8729 | } | 8732 | } |
8730 | break; | 8733 | break; |
8731 | case 1: | 8734 | case 1: |
8732 | dasm_put(Dst, 5037); | 8735 | dasm_put(Dst, 5040); |
8733 | if (LJ_DUALNUM) { | 8736 | if (LJ_DUALNUM) { |
8734 | dasm_put(Dst, 5039); | 8737 | dasm_put(Dst, 5042); |
8735 | } | 8738 | } |
8736 | dasm_put(Dst, 5041); | ||
8737 | if (LJ_DUALNUM) { | ||
8738 | dasm_put(Dst, 5044); | 8739 | dasm_put(Dst, 5044); |
8740 | if (LJ_DUALNUM) { | ||
8741 | dasm_put(Dst, 5047); | ||
8739 | } else { | 8742 | } else { |
8740 | dasm_put(Dst, 5050); | 8743 | dasm_put(Dst, 5053); |
8741 | } | 8744 | } |
8742 | break; | 8745 | break; |
8743 | default: | 8746 | default: |
8744 | dasm_put(Dst, 5054); | 8747 | dasm_put(Dst, 5057); |
8745 | break; | 8748 | break; |
8746 | } | 8749 | } |
8747 | dasm_put(Dst, 5064); | 8750 | dasm_put(Dst, 5067); |
8748 | } | 8751 | } |
8749 | break; | 8752 | break; |
8750 | case BC_MULVN: case BC_MULNV: case BC_MULVV: | 8753 | case BC_MULVN: case BC_MULNV: case BC_MULVV: |
@@ -8752,188 +8755,188 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8752 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8755 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8753 | switch (vk) { | 8756 | switch (vk) { |
8754 | case 0: | 8757 | case 0: |
8755 | dasm_put(Dst, 5077); | 8758 | dasm_put(Dst, 5080); |
8756 | break; | 8759 | break; |
8757 | case 1: | 8760 | case 1: |
8758 | dasm_put(Dst, 5083); | 8761 | dasm_put(Dst, 5086); |
8759 | break; | 8762 | break; |
8760 | default: | 8763 | default: |
8761 | dasm_put(Dst, 5089); | 8764 | dasm_put(Dst, 5092); |
8762 | break; | 8765 | break; |
8763 | } | 8766 | } |
8764 | dasm_put(Dst, 5095); | 8767 | dasm_put(Dst, 5098); |
8765 | switch (vk) { | 8768 | switch (vk) { |
8766 | case 0: | 8769 | case 0: |
8767 | dasm_put(Dst, 5122); | 8770 | dasm_put(Dst, 5125); |
8768 | break; | 8771 | break; |
8769 | case 1: | 8772 | case 1: |
8770 | dasm_put(Dst, 5125); | 8773 | dasm_put(Dst, 5128); |
8771 | break; | 8774 | break; |
8772 | default: | 8775 | default: |
8773 | dasm_put(Dst, 5128); | 8776 | dasm_put(Dst, 5131); |
8774 | break; | 8777 | break; |
8775 | } | 8778 | } |
8776 | dasm_put(Dst, 5131); | 8779 | dasm_put(Dst, 5134); |
8777 | if (vk == 1) { | 8780 | if (vk == 1) { |
8778 | dasm_put(Dst, 5133); | 8781 | dasm_put(Dst, 5136); |
8779 | } else { | 8782 | } else { |
8780 | dasm_put(Dst, 5137); | 8783 | dasm_put(Dst, 5140); |
8781 | } | 8784 | } |
8782 | switch (vk) { | 8785 | switch (vk) { |
8783 | case 0: | 8786 | case 0: |
8784 | dasm_put(Dst, 5141); | 8787 | dasm_put(Dst, 5144); |
8785 | break; | 8788 | break; |
8786 | case 1: | 8789 | case 1: |
8787 | dasm_put(Dst, 5144); | 8790 | dasm_put(Dst, 5147); |
8788 | break; | 8791 | break; |
8789 | default: | 8792 | default: |
8790 | dasm_put(Dst, 5147); | 8793 | dasm_put(Dst, 5150); |
8791 | break; | 8794 | break; |
8792 | } | 8795 | } |
8793 | dasm_put(Dst, 5150); | 8796 | dasm_put(Dst, 5153); |
8794 | } else { | 8797 | } else { |
8795 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8798 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8796 | switch (vk) { | 8799 | switch (vk) { |
8797 | case 0: | 8800 | case 0: |
8798 | dasm_put(Dst, 5157); | 8801 | dasm_put(Dst, 5160); |
8799 | if (LJ_DUALNUM) { | 8802 | if (LJ_DUALNUM) { |
8800 | dasm_put(Dst, 5159); | 8803 | dasm_put(Dst, 5162); |
8801 | } | 8804 | } |
8802 | dasm_put(Dst, 5161); | ||
8803 | if (LJ_DUALNUM) { | ||
8804 | dasm_put(Dst, 5164); | 8805 | dasm_put(Dst, 5164); |
8806 | if (LJ_DUALNUM) { | ||
8807 | dasm_put(Dst, 5167); | ||
8805 | } else { | 8808 | } else { |
8806 | dasm_put(Dst, 5170); | 8809 | dasm_put(Dst, 5173); |
8807 | } | 8810 | } |
8808 | break; | 8811 | break; |
8809 | case 1: | 8812 | case 1: |
8810 | dasm_put(Dst, 5174); | 8813 | dasm_put(Dst, 5177); |
8811 | if (LJ_DUALNUM) { | 8814 | if (LJ_DUALNUM) { |
8812 | dasm_put(Dst, 5176); | 8815 | dasm_put(Dst, 5179); |
8813 | } | 8816 | } |
8814 | dasm_put(Dst, 5178); | ||
8815 | if (LJ_DUALNUM) { | ||
8816 | dasm_put(Dst, 5181); | 8817 | dasm_put(Dst, 5181); |
8818 | if (LJ_DUALNUM) { | ||
8819 | dasm_put(Dst, 5184); | ||
8817 | } else { | 8820 | } else { |
8818 | dasm_put(Dst, 5187); | 8821 | dasm_put(Dst, 5190); |
8819 | } | 8822 | } |
8820 | break; | 8823 | break; |
8821 | default: | 8824 | default: |
8822 | dasm_put(Dst, 5191); | 8825 | dasm_put(Dst, 5194); |
8823 | break; | 8826 | break; |
8824 | } | 8827 | } |
8825 | dasm_put(Dst, 5201); | 8828 | dasm_put(Dst, 5204); |
8826 | } | 8829 | } |
8827 | break; | 8830 | break; |
8828 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: | 8831 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: |
8829 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8832 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8830 | switch (vk) { | 8833 | switch (vk) { |
8831 | case 0: | 8834 | case 0: |
8832 | dasm_put(Dst, 5214); | 8835 | dasm_put(Dst, 5217); |
8833 | if (LJ_DUALNUM) { | 8836 | if (LJ_DUALNUM) { |
8834 | dasm_put(Dst, 5216); | 8837 | dasm_put(Dst, 5219); |
8835 | } | 8838 | } |
8836 | dasm_put(Dst, 5218); | ||
8837 | if (LJ_DUALNUM) { | ||
8838 | dasm_put(Dst, 5221); | 8839 | dasm_put(Dst, 5221); |
8840 | if (LJ_DUALNUM) { | ||
8841 | dasm_put(Dst, 5224); | ||
8839 | } else { | 8842 | } else { |
8840 | dasm_put(Dst, 5227); | 8843 | dasm_put(Dst, 5230); |
8841 | } | 8844 | } |
8842 | break; | 8845 | break; |
8843 | case 1: | 8846 | case 1: |
8844 | dasm_put(Dst, 5231); | 8847 | dasm_put(Dst, 5234); |
8845 | if (LJ_DUALNUM) { | 8848 | if (LJ_DUALNUM) { |
8846 | dasm_put(Dst, 5233); | 8849 | dasm_put(Dst, 5236); |
8847 | } | 8850 | } |
8848 | dasm_put(Dst, 5235); | ||
8849 | if (LJ_DUALNUM) { | ||
8850 | dasm_put(Dst, 5238); | 8851 | dasm_put(Dst, 5238); |
8852 | if (LJ_DUALNUM) { | ||
8853 | dasm_put(Dst, 5241); | ||
8851 | } else { | 8854 | } else { |
8852 | dasm_put(Dst, 5244); | 8855 | dasm_put(Dst, 5247); |
8853 | } | 8856 | } |
8854 | break; | 8857 | break; |
8855 | default: | 8858 | default: |
8856 | dasm_put(Dst, 5248); | 8859 | dasm_put(Dst, 5251); |
8857 | break; | 8860 | break; |
8858 | } | 8861 | } |
8859 | dasm_put(Dst, 5258); | 8862 | dasm_put(Dst, 5261); |
8860 | break; | 8863 | break; |
8861 | case BC_MODVN: | 8864 | case BC_MODVN: |
8862 | if (LJ_DUALNUM) { | 8865 | if (LJ_DUALNUM) { |
8863 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8866 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8864 | switch (vk) { | 8867 | switch (vk) { |
8865 | case 0: | 8868 | case 0: |
8866 | dasm_put(Dst, 5271); | 8869 | dasm_put(Dst, 5274); |
8867 | break; | 8870 | break; |
8868 | case 1: | 8871 | case 1: |
8869 | dasm_put(Dst, 5277); | 8872 | dasm_put(Dst, 5280); |
8870 | break; | 8873 | break; |
8871 | default: | 8874 | default: |
8872 | dasm_put(Dst, 5283); | 8875 | dasm_put(Dst, 5286); |
8873 | break; | 8876 | break; |
8874 | } | 8877 | } |
8875 | dasm_put(Dst, 5289); | 8878 | dasm_put(Dst, 5292); |
8876 | switch (vk) { | 8879 | switch (vk) { |
8877 | case 0: | 8880 | case 0: |
8878 | dasm_put(Dst, 5317); | 8881 | dasm_put(Dst, 5320); |
8879 | break; | 8882 | break; |
8880 | case 1: | 8883 | case 1: |
8881 | dasm_put(Dst, 5320); | 8884 | dasm_put(Dst, 5323); |
8882 | break; | 8885 | break; |
8883 | default: | 8886 | default: |
8884 | dasm_put(Dst, 5323); | 8887 | dasm_put(Dst, 5326); |
8885 | break; | 8888 | break; |
8886 | } | 8889 | } |
8887 | dasm_put(Dst, 5326); | 8890 | dasm_put(Dst, 5329); |
8888 | if (vk == 1) { | 8891 | if (vk == 1) { |
8889 | dasm_put(Dst, 5328); | 8892 | dasm_put(Dst, 5331); |
8890 | } else { | 8893 | } else { |
8891 | dasm_put(Dst, 5332); | 8894 | dasm_put(Dst, 5335); |
8892 | } | 8895 | } |
8893 | switch (vk) { | 8896 | switch (vk) { |
8894 | case 0: | 8897 | case 0: |
8895 | dasm_put(Dst, 5336); | 8898 | dasm_put(Dst, 5339); |
8896 | break; | 8899 | break; |
8897 | case 1: | 8900 | case 1: |
8898 | dasm_put(Dst, 5339); | 8901 | dasm_put(Dst, 5342); |
8899 | break; | 8902 | break; |
8900 | default: | 8903 | default: |
8901 | dasm_put(Dst, 5342); | 8904 | dasm_put(Dst, 5345); |
8902 | break; | 8905 | break; |
8903 | } | 8906 | } |
8904 | dasm_put(Dst, 5345); | 8907 | dasm_put(Dst, 5348); |
8905 | } else { | 8908 | } else { |
8906 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8909 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8907 | switch (vk) { | 8910 | switch (vk) { |
8908 | case 0: | 8911 | case 0: |
8909 | dasm_put(Dst, 5357); | 8912 | dasm_put(Dst, 5360); |
8910 | if (LJ_DUALNUM) { | 8913 | if (LJ_DUALNUM) { |
8911 | dasm_put(Dst, 5359); | 8914 | dasm_put(Dst, 5362); |
8912 | } | 8915 | } |
8913 | dasm_put(Dst, 5361); | ||
8914 | if (LJ_DUALNUM) { | ||
8915 | dasm_put(Dst, 5364); | 8916 | dasm_put(Dst, 5364); |
8917 | if (LJ_DUALNUM) { | ||
8918 | dasm_put(Dst, 5367); | ||
8916 | } else { | 8919 | } else { |
8917 | dasm_put(Dst, 5370); | 8920 | dasm_put(Dst, 5373); |
8918 | } | 8921 | } |
8919 | break; | 8922 | break; |
8920 | case 1: | 8923 | case 1: |
8921 | dasm_put(Dst, 5374); | 8924 | dasm_put(Dst, 5377); |
8922 | if (LJ_DUALNUM) { | 8925 | if (LJ_DUALNUM) { |
8923 | dasm_put(Dst, 5376); | 8926 | dasm_put(Dst, 5379); |
8924 | } | 8927 | } |
8925 | dasm_put(Dst, 5378); | ||
8926 | if (LJ_DUALNUM) { | ||
8927 | dasm_put(Dst, 5381); | 8928 | dasm_put(Dst, 5381); |
8929 | if (LJ_DUALNUM) { | ||
8930 | dasm_put(Dst, 5384); | ||
8928 | } else { | 8931 | } else { |
8929 | dasm_put(Dst, 5387); | 8932 | dasm_put(Dst, 5390); |
8930 | } | 8933 | } |
8931 | break; | 8934 | break; |
8932 | default: | 8935 | default: |
8933 | dasm_put(Dst, 5391); | 8936 | dasm_put(Dst, 5394); |
8934 | break; | 8937 | break; |
8935 | } | 8938 | } |
8936 | dasm_put(Dst, 5401); | 8939 | dasm_put(Dst, 5404); |
8937 | } | 8940 | } |
8938 | break; | 8941 | break; |
8939 | case BC_MODNV: case BC_MODVV: | 8942 | case BC_MODNV: case BC_MODVV: |
@@ -8941,298 +8944,298 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8941 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8944 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8942 | switch (vk) { | 8945 | switch (vk) { |
8943 | case 0: | 8946 | case 0: |
8944 | dasm_put(Dst, 5419); | 8947 | dasm_put(Dst, 5422); |
8945 | break; | 8948 | break; |
8946 | case 1: | 8949 | case 1: |
8947 | dasm_put(Dst, 5425); | 8950 | dasm_put(Dst, 5428); |
8948 | break; | 8951 | break; |
8949 | default: | 8952 | default: |
8950 | dasm_put(Dst, 5431); | 8953 | dasm_put(Dst, 5434); |
8951 | break; | 8954 | break; |
8952 | } | 8955 | } |
8953 | dasm_put(Dst, 5437); | 8956 | dasm_put(Dst, 5440); |
8954 | switch (vk) { | 8957 | switch (vk) { |
8955 | case 0: | 8958 | case 0: |
8956 | dasm_put(Dst, 5465); | 8959 | dasm_put(Dst, 5468); |
8957 | break; | 8960 | break; |
8958 | case 1: | 8961 | case 1: |
8959 | dasm_put(Dst, 5468); | 8962 | dasm_put(Dst, 5471); |
8960 | break; | 8963 | break; |
8961 | default: | 8964 | default: |
8962 | dasm_put(Dst, 5471); | 8965 | dasm_put(Dst, 5474); |
8963 | break; | 8966 | break; |
8964 | } | 8967 | } |
8965 | dasm_put(Dst, 5474); | 8968 | dasm_put(Dst, 5477); |
8966 | if (vk == 1) { | 8969 | if (vk == 1) { |
8967 | dasm_put(Dst, 5476); | 8970 | dasm_put(Dst, 5479); |
8968 | } else { | 8971 | } else { |
8969 | dasm_put(Dst, 5480); | 8972 | dasm_put(Dst, 5483); |
8970 | } | 8973 | } |
8971 | switch (vk) { | 8974 | switch (vk) { |
8972 | case 0: | 8975 | case 0: |
8973 | dasm_put(Dst, 5484); | 8976 | dasm_put(Dst, 5487); |
8974 | break; | 8977 | break; |
8975 | case 1: | 8978 | case 1: |
8976 | dasm_put(Dst, 5487); | 8979 | dasm_put(Dst, 5490); |
8977 | break; | 8980 | break; |
8978 | default: | 8981 | default: |
8979 | dasm_put(Dst, 5490); | 8982 | dasm_put(Dst, 5493); |
8980 | break; | 8983 | break; |
8981 | } | 8984 | } |
8982 | dasm_put(Dst, 5493); | 8985 | dasm_put(Dst, 5496); |
8983 | } else { | 8986 | } else { |
8984 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8987 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8985 | switch (vk) { | 8988 | switch (vk) { |
8986 | case 0: | 8989 | case 0: |
8987 | dasm_put(Dst, 5496); | 8990 | dasm_put(Dst, 5499); |
8988 | if (LJ_DUALNUM) { | 8991 | if (LJ_DUALNUM) { |
8989 | dasm_put(Dst, 5498); | 8992 | dasm_put(Dst, 5501); |
8990 | } | 8993 | } |
8991 | dasm_put(Dst, 5500); | ||
8992 | if (LJ_DUALNUM) { | ||
8993 | dasm_put(Dst, 5503); | 8994 | dasm_put(Dst, 5503); |
8995 | if (LJ_DUALNUM) { | ||
8996 | dasm_put(Dst, 5506); | ||
8994 | } else { | 8997 | } else { |
8995 | dasm_put(Dst, 5509); | 8998 | dasm_put(Dst, 5512); |
8996 | } | 8999 | } |
8997 | break; | 9000 | break; |
8998 | case 1: | 9001 | case 1: |
8999 | dasm_put(Dst, 5513); | 9002 | dasm_put(Dst, 5516); |
9000 | if (LJ_DUALNUM) { | 9003 | if (LJ_DUALNUM) { |
9001 | dasm_put(Dst, 5515); | 9004 | dasm_put(Dst, 5518); |
9002 | } | 9005 | } |
9003 | dasm_put(Dst, 5517); | ||
9004 | if (LJ_DUALNUM) { | ||
9005 | dasm_put(Dst, 5520); | 9006 | dasm_put(Dst, 5520); |
9007 | if (LJ_DUALNUM) { | ||
9008 | dasm_put(Dst, 5523); | ||
9006 | } else { | 9009 | } else { |
9007 | dasm_put(Dst, 5526); | 9010 | dasm_put(Dst, 5529); |
9008 | } | 9011 | } |
9009 | break; | 9012 | break; |
9010 | default: | 9013 | default: |
9011 | dasm_put(Dst, 5530); | 9014 | dasm_put(Dst, 5533); |
9012 | break; | 9015 | break; |
9013 | } | 9016 | } |
9014 | dasm_put(Dst, 5540); | 9017 | dasm_put(Dst, 5543); |
9015 | } | 9018 | } |
9016 | break; | 9019 | break; |
9017 | case BC_POW: | 9020 | case BC_POW: |
9018 | dasm_put(Dst, 5543); | 9021 | dasm_put(Dst, 5546); |
9019 | break; | 9022 | break; |
9020 | 9023 | ||
9021 | case BC_CAT: | 9024 | case BC_CAT: |
9022 | dasm_put(Dst, 5566, Dt1(->base), 32-3, Dt1(->base)); | 9025 | dasm_put(Dst, 5569, Dt1(->base), 32-3, Dt1(->base)); |
9023 | break; | 9026 | break; |
9024 | 9027 | ||
9025 | /* -- Constant ops ------------------------------------------------------ */ | 9028 | /* -- Constant ops ------------------------------------------------------ */ |
9026 | 9029 | ||
9027 | case BC_KSTR: | 9030 | case BC_KSTR: |
9028 | dasm_put(Dst, 5596, 32-1, LJ_TSTR); | 9031 | dasm_put(Dst, 5599, 32-1, LJ_TSTR); |
9029 | break; | 9032 | break; |
9030 | case BC_KCDATA: | 9033 | case BC_KCDATA: |
9031 | #if LJ_HASFFI | 9034 | #if LJ_HASFFI |
9032 | dasm_put(Dst, 5615, 32-1, LJ_TCDATA); | 9035 | dasm_put(Dst, 5618, 32-1, LJ_TCDATA); |
9033 | #endif | 9036 | #endif |
9034 | break; | 9037 | break; |
9035 | case BC_KSHORT: | 9038 | case BC_KSHORT: |
9036 | if (LJ_DUALNUM) { | 9039 | if (LJ_DUALNUM) { |
9037 | dasm_put(Dst, 5634, 31-13); | 9040 | dasm_put(Dst, 5637, 31-13); |
9038 | } else { | 9041 | } else { |
9039 | dasm_put(Dst, 5650, 31-13, 31-20); | 9042 | dasm_put(Dst, 5653, 31-13, 31-20); |
9040 | } | 9043 | } |
9041 | break; | 9044 | break; |
9042 | case BC_KNUM: | 9045 | case BC_KNUM: |
9043 | dasm_put(Dst, 5678); | 9046 | dasm_put(Dst, 5681); |
9044 | break; | 9047 | break; |
9045 | case BC_KPRI: | 9048 | case BC_KPRI: |
9046 | dasm_put(Dst, 5691, 32-3); | 9049 | dasm_put(Dst, 5694, 32-3); |
9047 | break; | 9050 | break; |
9048 | case BC_KNIL: | 9051 | case BC_KNIL: |
9049 | dasm_put(Dst, 5706); | 9052 | dasm_put(Dst, 5709); |
9050 | break; | 9053 | break; |
9051 | 9054 | ||
9052 | /* -- Upvalue and function ops ------------------------------------------ */ | 9055 | /* -- Upvalue and function ops ------------------------------------------ */ |
9053 | 9056 | ||
9054 | case BC_UGET: | 9057 | case BC_UGET: |
9055 | dasm_put(Dst, 5725, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); | 9058 | dasm_put(Dst, 5728, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); |
9056 | break; | 9059 | break; |
9057 | case BC_USETV: | 9060 | case BC_USETV: |
9058 | dasm_put(Dst, 5746, 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); | 9061 | dasm_put(Dst, 5749, 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); |
9059 | break; | 9062 | break; |
9060 | case BC_USETS: | 9063 | case BC_USETS: |
9061 | dasm_put(Dst, 5799, 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); | 9064 | dasm_put(Dst, 5802, 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); |
9062 | break; | 9065 | break; |
9063 | case BC_USETN: | 9066 | case BC_USETN: |
9064 | dasm_put(Dst, 5850, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); | 9067 | dasm_put(Dst, 5853, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); |
9065 | break; | 9068 | break; |
9066 | case BC_USETP: | 9069 | case BC_USETP: |
9067 | dasm_put(Dst, 5871, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); | 9070 | dasm_put(Dst, 5874, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); |
9068 | break; | 9071 | break; |
9069 | 9072 | ||
9070 | case BC_UCLO: | 9073 | case BC_UCLO: |
9071 | dasm_put(Dst, 5894, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); | 9074 | dasm_put(Dst, 5897, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); |
9072 | break; | 9075 | break; |
9073 | 9076 | ||
9074 | case BC_FNEW: | 9077 | case BC_FNEW: |
9075 | dasm_put(Dst, 5924, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); | 9078 | dasm_put(Dst, 5927, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); |
9076 | break; | 9079 | break; |
9077 | 9080 | ||
9078 | /* -- Table ops --------------------------------------------------------- */ | 9081 | /* -- Table ops --------------------------------------------------------- */ |
9079 | 9082 | ||
9080 | case BC_TNEW: | 9083 | case BC_TNEW: |
9081 | case BC_TDUP: | 9084 | case BC_TDUP: |
9082 | dasm_put(Dst, 5952, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); | 9085 | dasm_put(Dst, 5955, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); |
9083 | if (op == BC_TNEW) { | 9086 | if (op == BC_TNEW) { |
9084 | dasm_put(Dst, 5965); | 9087 | dasm_put(Dst, 5968); |
9085 | } else { | 9088 | } else { |
9086 | dasm_put(Dst, 5974, 32-1); | 9089 | dasm_put(Dst, 5977, 32-1); |
9087 | } | 9090 | } |
9088 | dasm_put(Dst, 5981, Dt1(->base), LJ_TTAB); | 9091 | dasm_put(Dst, 5984, Dt1(->base), LJ_TTAB); |
9089 | if (op == BC_TNEW) { | 9092 | if (op == BC_TNEW) { |
9090 | dasm_put(Dst, 5998); | 9093 | dasm_put(Dst, 6001); |
9091 | } | 9094 | } |
9092 | dasm_put(Dst, 6003); | 9095 | dasm_put(Dst, 6006); |
9093 | break; | 9096 | break; |
9094 | 9097 | ||
9095 | case BC_GGET: | 9098 | case BC_GGET: |
9096 | case BC_GSET: | 9099 | case BC_GSET: |
9097 | dasm_put(Dst, 6012, 32-1, Dt7(->env)); | 9100 | dasm_put(Dst, 6015, 32-1, Dt7(->env)); |
9098 | if (op == BC_GGET) { | 9101 | if (op == BC_GGET) { |
9099 | dasm_put(Dst, 6020); | ||
9100 | } else { | ||
9101 | dasm_put(Dst, 6023); | 9102 | dasm_put(Dst, 6023); |
9103 | } else { | ||
9104 | dasm_put(Dst, 6026); | ||
9102 | } | 9105 | } |
9103 | break; | 9106 | break; |
9104 | 9107 | ||
9105 | case BC_TGETV: | 9108 | case BC_TGETV: |
9106 | dasm_put(Dst, 6026); | 9109 | dasm_put(Dst, 6029); |
9107 | if (LJ_DUALNUM) { | 9110 | if (LJ_DUALNUM) { |
9108 | dasm_put(Dst, 6030); | 9111 | dasm_put(Dst, 6033); |
9109 | } else { | 9112 | } else { |
9110 | dasm_put(Dst, 6032); | 9113 | dasm_put(Dst, 6035); |
9111 | } | 9114 | } |
9112 | dasm_put(Dst, 6034, LJ_TTAB); | 9115 | dasm_put(Dst, 6037, LJ_TTAB); |
9113 | if (LJ_DUALNUM) { | 9116 | if (LJ_DUALNUM) { |
9114 | dasm_put(Dst, 6040, Dt6(->asize), Dt6(->array), 31-3); | 9117 | dasm_put(Dst, 6043, Dt6(->asize), Dt6(->array), 31-3); |
9115 | } else { | 9118 | } else { |
9116 | dasm_put(Dst, 6050, Dt6(->asize), Dt6(->array), 31-3); | 9119 | dasm_put(Dst, 6053, Dt6(->asize), Dt6(->array), 31-3); |
9117 | } | 9120 | } |
9118 | dasm_put(Dst, 6067, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); | 9121 | dasm_put(Dst, 6070, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); |
9119 | if (!LJ_DUALNUM) { | 9122 | if (!LJ_DUALNUM) { |
9120 | dasm_put(Dst, 6107); | 9123 | dasm_put(Dst, 6110); |
9121 | } | 9124 | } |
9122 | dasm_put(Dst, 6109); | 9125 | dasm_put(Dst, 6112); |
9123 | break; | 9126 | break; |
9124 | case BC_TGETS: | 9127 | case BC_TGETS: |
9125 | dasm_put(Dst, 6112, 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)); | 9128 | dasm_put(Dst, 6115, 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)); |
9126 | dasm_put(Dst, 6173, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 9129 | dasm_put(Dst, 6176, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
9127 | break; | 9130 | break; |
9128 | case BC_TGETB: | 9131 | case BC_TGETB: |
9129 | dasm_put(Dst, 6193, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 9132 | dasm_put(Dst, 6196, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
9130 | break; | 9133 | break; |
9131 | 9134 | ||
9132 | case BC_TSETV: | 9135 | case BC_TSETV: |
9133 | dasm_put(Dst, 6241); | 9136 | dasm_put(Dst, 6244); |
9134 | if (LJ_DUALNUM) { | 9137 | if (LJ_DUALNUM) { |
9135 | dasm_put(Dst, 6245); | 9138 | dasm_put(Dst, 6248); |
9136 | } else { | 9139 | } else { |
9137 | dasm_put(Dst, 6247); | 9140 | dasm_put(Dst, 6250); |
9138 | } | 9141 | } |
9139 | dasm_put(Dst, 6249, LJ_TTAB); | 9142 | dasm_put(Dst, 6252, LJ_TTAB); |
9140 | if (LJ_DUALNUM) { | 9143 | if (LJ_DUALNUM) { |
9141 | dasm_put(Dst, 6255, Dt6(->asize), Dt6(->array), 31-3); | 9144 | dasm_put(Dst, 6258, Dt6(->asize), Dt6(->array), 31-3); |
9142 | } else { | 9145 | } else { |
9143 | dasm_put(Dst, 6265, Dt6(->asize), Dt6(->array), 31-3); | 9146 | dasm_put(Dst, 6268, Dt6(->asize), Dt6(->array), 31-3); |
9144 | } | 9147 | } |
9145 | dasm_put(Dst, 6282, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); | 9148 | dasm_put(Dst, 6285, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); |
9146 | if (!LJ_DUALNUM) { | 9149 | if (!LJ_DUALNUM) { |
9147 | dasm_put(Dst, 6329); | 9150 | dasm_put(Dst, 6332); |
9148 | } | 9151 | } |
9149 | dasm_put(Dst, 6331, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9152 | dasm_put(Dst, 6334, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9150 | break; | 9153 | break; |
9151 | dasm_put(Dst, 6346, LJ_TSTR, LJ_TNIL); | 9154 | dasm_put(Dst, 6349, LJ_TSTR, LJ_TNIL); |
9152 | case BC_TSETS: | 9155 | case BC_TSETS: |
9153 | dasm_put(Dst, 6372, 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), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL); | 9156 | dasm_put(Dst, 6375, 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), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL); |
9154 | dasm_put(Dst, 6423, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex); | 9157 | dasm_put(Dst, 6426, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex); |
9155 | dasm_put(Dst, 6479, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9158 | dasm_put(Dst, 6482, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9156 | break; | 9159 | break; |
9157 | case BC_TSETB: | 9160 | case BC_TSETB: |
9158 | dasm_put(Dst, 6504, 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)); | 9161 | dasm_put(Dst, 6507, 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)); |
9159 | dasm_put(Dst, 6562, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9162 | dasm_put(Dst, 6565, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9160 | break; | 9163 | break; |
9161 | 9164 | ||
9162 | case BC_TSETM: | 9165 | case BC_TSETM: |
9163 | dasm_put(Dst, 6572, 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)); | 9166 | dasm_put(Dst, 6575, 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)); |
9164 | dasm_put(Dst, 6641); | 9167 | dasm_put(Dst, 6644); |
9165 | break; | 9168 | break; |
9166 | 9169 | ||
9167 | /* -- Calls and vararg handling ----------------------------------------- */ | 9170 | /* -- Calls and vararg handling ----------------------------------------- */ |
9168 | 9171 | ||
9169 | case BC_CALLM: | 9172 | case BC_CALLM: |
9170 | dasm_put(Dst, 6644); | 9173 | dasm_put(Dst, 6647); |
9171 | break; | 9174 | break; |
9172 | case BC_CALL: | 9175 | case BC_CALL: |
9173 | dasm_put(Dst, 6646, LJ_TFUNC, Dt7(->pc)); | 9176 | dasm_put(Dst, 6649, LJ_TFUNC, Dt7(->pc)); |
9174 | break; | 9177 | break; |
9175 | 9178 | ||
9176 | case BC_CALLMT: | 9179 | case BC_CALLMT: |
9177 | dasm_put(Dst, 6667); | 9180 | dasm_put(Dst, 6670); |
9178 | break; | 9181 | break; |
9179 | case BC_CALLT: | 9182 | case BC_CALLT: |
9180 | dasm_put(Dst, 6669, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); | 9183 | dasm_put(Dst, 6672, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); |
9181 | dasm_put(Dst, 6733, FRAME_TYPE); | 9184 | dasm_put(Dst, 6736, FRAME_TYPE); |
9182 | break; | 9185 | break; |
9183 | 9186 | ||
9184 | case BC_ITERC: | 9187 | case BC_ITERC: |
9185 | dasm_put(Dst, 6742, LJ_TFUNC, Dt7(->pc)); | 9188 | dasm_put(Dst, 6745, LJ_TFUNC, Dt7(->pc)); |
9186 | break; | 9189 | break; |
9187 | 9190 | ||
9188 | case BC_ITERN: | 9191 | case BC_ITERN: |
9189 | #if LJ_HASJIT | 9192 | #if LJ_HASJIT |
9190 | #endif | 9193 | #endif |
9191 | dasm_put(Dst, 6769, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); | 9194 | dasm_put(Dst, 6772, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); |
9192 | if (LJ_DUALNUM) { | 9195 | if (LJ_DUALNUM) { |
9193 | dasm_put(Dst, 6791); | ||
9194 | } else { | ||
9195 | dasm_put(Dst, 6794); | 9196 | dasm_put(Dst, 6794); |
9197 | } else { | ||
9198 | dasm_put(Dst, 6797); | ||
9196 | } | 9199 | } |
9197 | dasm_put(Dst, 6798, -(BCBIAS_J*4 >> 16)); | 9200 | dasm_put(Dst, 6801, -(BCBIAS_J*4 >> 16)); |
9198 | if (!LJ_DUALNUM) { | 9201 | if (!LJ_DUALNUM) { |
9199 | dasm_put(Dst, 6806); | 9202 | dasm_put(Dst, 6809); |
9200 | } | 9203 | } |
9201 | dasm_put(Dst, 6808, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); | 9204 | dasm_put(Dst, 6811, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); |
9202 | break; | 9205 | break; |
9203 | 9206 | ||
9204 | case BC_ISNEXT: | 9207 | case BC_ISNEXT: |
9205 | dasm_put(Dst, 6864, 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)); | 9208 | dasm_put(Dst, 6867, 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)); |
9206 | break; | 9209 | break; |
9207 | 9210 | ||
9208 | case BC_VARG: | 9211 | case BC_VARG: |
9209 | dasm_put(Dst, 6914, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); | 9212 | dasm_put(Dst, 6917, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); |
9210 | dasm_put(Dst, 6994); | 9213 | dasm_put(Dst, 6997); |
9211 | break; | 9214 | break; |
9212 | 9215 | ||
9213 | /* -- Returns ----------------------------------------------------------- */ | 9216 | /* -- Returns ----------------------------------------------------------- */ |
9214 | 9217 | ||
9215 | case BC_RETM: | 9218 | case BC_RETM: |
9216 | dasm_put(Dst, 7000); | 9219 | dasm_put(Dst, 7003); |
9217 | break; | 9220 | break; |
9218 | 9221 | ||
9219 | case BC_RET: | 9222 | case BC_RET: |
9220 | dasm_put(Dst, 7002, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); | 9223 | dasm_put(Dst, 7005, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); |
9221 | break; | 9224 | break; |
9222 | 9225 | ||
9223 | case BC_RET0: case BC_RET1: | 9226 | case BC_RET0: case BC_RET1: |
9224 | dasm_put(Dst, 7072, FRAME_TYPE, FRAME_VARG); | 9227 | dasm_put(Dst, 7075, FRAME_TYPE, FRAME_VARG); |
9225 | if (op == BC_RET1) { | 9228 | if (op == BC_RET1) { |
9226 | dasm_put(Dst, 7085); | 9229 | dasm_put(Dst, 7088); |
9227 | } | 9230 | } |
9228 | dasm_put(Dst, 7088, Dt7(->pc), PC2PROTO(k)); | 9231 | dasm_put(Dst, 7091, Dt7(->pc), PC2PROTO(k)); |
9229 | break; | 9232 | break; |
9230 | 9233 | ||
9231 | /* -- Loops and branches ------------------------------------------------ */ | 9234 | /* -- Loops and branches ------------------------------------------------ */ |
9232 | 9235 | ||
9233 | case BC_FORL: | 9236 | case BC_FORL: |
9234 | #if LJ_HASJIT | 9237 | #if LJ_HASJIT |
9235 | dasm_put(Dst, 7116, GG_DISP2HOT, -HOTCOUNT_LOOP); | 9238 | dasm_put(Dst, 7119, GG_DISP2HOT, -HOTCOUNT_LOOP); |
9236 | #endif | 9239 | #endif |
9237 | break; | 9240 | break; |
9238 | 9241 | ||
@@ -9245,100 +9248,100 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
9245 | case BC_IFORL: | 9248 | case BC_IFORL: |
9246 | vk = (op == BC_IFORL || op == BC_JFORL); | 9249 | vk = (op == BC_IFORL || op == BC_JFORL); |
9247 | if (LJ_DUALNUM) { | 9250 | if (LJ_DUALNUM) { |
9248 | dasm_put(Dst, 7126, FORL_IDX*8+4); | 9251 | dasm_put(Dst, 7129, FORL_IDX*8+4); |
9249 | if (vk) { | 9252 | if (vk) { |
9250 | dasm_put(Dst, 7131, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); | 9253 | dasm_put(Dst, 7134, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); |
9251 | } else { | 9254 | } else { |
9252 | dasm_put(Dst, 7145, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); | 9255 | dasm_put(Dst, 7148, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); |
9253 | } | 9256 | } |
9254 | dasm_put(Dst, 7161, FORL_EXT*8); | 9257 | dasm_put(Dst, 7164, FORL_EXT*8); |
9255 | if (op != BC_JFORL) { | 9258 | if (op != BC_JFORL) { |
9256 | dasm_put(Dst, 7168, 32-1); | 9259 | dasm_put(Dst, 7171, 32-1); |
9257 | } | 9260 | } |
9258 | dasm_put(Dst, 7171, FORL_EXT*8+4); | 9261 | dasm_put(Dst, 7174, FORL_EXT*8+4); |
9259 | if (op != BC_JFORL) { | 9262 | if (op != BC_JFORL) { |
9260 | dasm_put(Dst, 7174); | 9263 | dasm_put(Dst, 7177); |
9261 | } | 9264 | } |
9262 | if (op == BC_FORI) { | 9265 | if (op == BC_FORI) { |
9263 | dasm_put(Dst, 7176); | 9266 | dasm_put(Dst, 7179); |
9264 | } else if (op == BC_JFORI) { | 9267 | } else if (op == BC_JFORI) { |
9265 | dasm_put(Dst, 7179, -(BCBIAS_J*4 >> 16)); | 9268 | dasm_put(Dst, 7182, -(BCBIAS_J*4 >> 16)); |
9266 | } else if (op == BC_IFORL) { | 9269 | } else if (op == BC_IFORL) { |
9267 | dasm_put(Dst, 7184, -(BCBIAS_J*4 >> 16)); | 9270 | dasm_put(Dst, 7187, -(BCBIAS_J*4 >> 16)); |
9268 | } else { | 9271 | } else { |
9269 | dasm_put(Dst, 7189, BC_JLOOP); | 9272 | dasm_put(Dst, 7192, BC_JLOOP); |
9270 | } | 9273 | } |
9271 | dasm_put(Dst, 7192); | 9274 | dasm_put(Dst, 7195); |
9272 | if (vk) { | 9275 | if (vk) { |
9273 | dasm_put(Dst, 7208); | 9276 | dasm_put(Dst, 7211); |
9274 | } | 9277 | } |
9275 | } | 9278 | } |
9276 | if (vk) { | 9279 | if (vk) { |
9277 | if (LJ_DUALNUM) { | 9280 | if (LJ_DUALNUM) { |
9278 | dasm_put(Dst, 7215, FORL_IDX*8); | 9281 | dasm_put(Dst, 7218, FORL_IDX*8); |
9279 | } else { | 9282 | } else { |
9280 | dasm_put(Dst, 7219); | 9283 | dasm_put(Dst, 7222); |
9281 | } | 9284 | } |
9282 | dasm_put(Dst, 7221, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); | 9285 | dasm_put(Dst, 7224, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); |
9283 | } else { | 9286 | } else { |
9284 | if (LJ_DUALNUM) { | 9287 | if (LJ_DUALNUM) { |
9285 | dasm_put(Dst, 7231); | 9288 | dasm_put(Dst, 7234); |
9286 | } else { | 9289 | } else { |
9287 | dasm_put(Dst, 7233, FORL_STEP*8, FORL_STOP*8); | 9290 | dasm_put(Dst, 7236, FORL_STEP*8, FORL_STOP*8); |
9288 | } | 9291 | } |
9289 | dasm_put(Dst, 7242, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); | 9292 | dasm_put(Dst, 7245, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); |
9290 | } | 9293 | } |
9291 | dasm_put(Dst, 7253); | 9294 | dasm_put(Dst, 7256); |
9292 | if (op != BC_JFORL) { | 9295 | if (op != BC_JFORL) { |
9293 | dasm_put(Dst, 7255, 32-1); | 9296 | dasm_put(Dst, 7258, 32-1); |
9294 | } | 9297 | } |
9295 | dasm_put(Dst, 7258, FORL_EXT*8); | 9298 | dasm_put(Dst, 7261, FORL_EXT*8); |
9296 | if (op != BC_JFORL) { | 9299 | if (op != BC_JFORL) { |
9297 | dasm_put(Dst, 7261); | 9300 | dasm_put(Dst, 7264); |
9298 | } | 9301 | } |
9299 | dasm_put(Dst, 7263); | 9302 | dasm_put(Dst, 7266); |
9300 | if (op == BC_JFORI) { | 9303 | if (op == BC_JFORI) { |
9301 | dasm_put(Dst, 7265, -(BCBIAS_J*4 >> 16)); | 9304 | dasm_put(Dst, 7268, -(BCBIAS_J*4 >> 16)); |
9302 | } | 9305 | } |
9303 | dasm_put(Dst, 7268); | 9306 | dasm_put(Dst, 7271); |
9304 | if (op == BC_FORI) { | 9307 | if (op == BC_FORI) { |
9305 | dasm_put(Dst, 7271); | 9308 | dasm_put(Dst, 7274); |
9306 | } else if (op == BC_IFORL) { | 9309 | } else if (op == BC_IFORL) { |
9307 | if (LJ_DUALNUM) { | 9310 | if (LJ_DUALNUM) { |
9308 | dasm_put(Dst, 7274); | ||
9309 | } else { | ||
9310 | dasm_put(Dst, 7277); | 9311 | dasm_put(Dst, 7277); |
9312 | } else { | ||
9313 | dasm_put(Dst, 7280); | ||
9311 | } | 9314 | } |
9312 | dasm_put(Dst, 7280, -(BCBIAS_J*4 >> 16)); | 9315 | dasm_put(Dst, 7283, -(BCBIAS_J*4 >> 16)); |
9313 | } else if (op == BC_JFORI) { | 9316 | } else if (op == BC_JFORI) { |
9314 | dasm_put(Dst, 7284); | 9317 | dasm_put(Dst, 7287); |
9315 | } else { | 9318 | } else { |
9316 | dasm_put(Dst, 7287, BC_JLOOP); | 9319 | dasm_put(Dst, 7290, BC_JLOOP); |
9317 | } | 9320 | } |
9318 | if (LJ_DUALNUM) { | 9321 | if (LJ_DUALNUM) { |
9319 | dasm_put(Dst, 7290); | ||
9320 | } else { | ||
9321 | dasm_put(Dst, 7293); | 9322 | dasm_put(Dst, 7293); |
9323 | } else { | ||
9324 | dasm_put(Dst, 7296); | ||
9322 | } | 9325 | } |
9323 | dasm_put(Dst, 7305); | 9326 | dasm_put(Dst, 7308); |
9324 | if (op == BC_FORI) { | 9327 | if (op == BC_FORI) { |
9325 | dasm_put(Dst, 7307, -(BCBIAS_J*4 >> 16)); | 9328 | dasm_put(Dst, 7310, -(BCBIAS_J*4 >> 16)); |
9326 | } else if (op == BC_IFORL) { | 9329 | } else if (op == BC_IFORL) { |
9327 | dasm_put(Dst, 7313); | ||
9328 | } else if (op == BC_JFORI) { | ||
9329 | dasm_put(Dst, 7316); | 9330 | dasm_put(Dst, 7316); |
9331 | } else if (op == BC_JFORI) { | ||
9332 | dasm_put(Dst, 7319); | ||
9330 | } else { | 9333 | } else { |
9331 | dasm_put(Dst, 7319, BC_JLOOP); | 9334 | dasm_put(Dst, 7322, BC_JLOOP); |
9332 | } | 9335 | } |
9333 | dasm_put(Dst, 7322); | 9336 | dasm_put(Dst, 7325); |
9334 | if (op == BC_JFORI) { | 9337 | if (op == BC_JFORI) { |
9335 | dasm_put(Dst, 7325, BC_JLOOP); | 9338 | dasm_put(Dst, 7328, BC_JLOOP); |
9336 | } | 9339 | } |
9337 | break; | 9340 | break; |
9338 | 9341 | ||
9339 | case BC_ITERL: | 9342 | case BC_ITERL: |
9340 | #if LJ_HASJIT | 9343 | #if LJ_HASJIT |
9341 | dasm_put(Dst, 7331, GG_DISP2HOT, -HOTCOUNT_LOOP); | 9344 | dasm_put(Dst, 7334, GG_DISP2HOT, -HOTCOUNT_LOOP); |
9342 | #endif | 9345 | #endif |
9343 | break; | 9346 | break; |
9344 | 9347 | ||
@@ -9347,40 +9350,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
9347 | break; | 9350 | break; |
9348 | #endif | 9351 | #endif |
9349 | case BC_IITERL: | 9352 | case BC_IITERL: |
9350 | dasm_put(Dst, 7341, LJ_TNIL); | 9353 | dasm_put(Dst, 7344, LJ_TNIL); |
9351 | if (op == BC_JITERL) { | 9354 | if (op == BC_JITERL) { |
9352 | dasm_put(Dst, 7348, BC_JLOOP); | 9355 | dasm_put(Dst, 7351, BC_JLOOP); |
9353 | } else { | 9356 | } else { |
9354 | dasm_put(Dst, 7353, 32-1, -(BCBIAS_J*4 >> 16)); | 9357 | dasm_put(Dst, 7356, 32-1, -(BCBIAS_J*4 >> 16)); |
9355 | } | 9358 | } |
9356 | dasm_put(Dst, 7361); | 9359 | dasm_put(Dst, 7364); |
9357 | break; | 9360 | break; |
9358 | 9361 | ||
9359 | case BC_LOOP: | 9362 | case BC_LOOP: |
9360 | #if LJ_HASJIT | 9363 | #if LJ_HASJIT |
9361 | dasm_put(Dst, 7373, GG_DISP2HOT, -HOTCOUNT_LOOP); | 9364 | dasm_put(Dst, 7376, GG_DISP2HOT, -HOTCOUNT_LOOP); |
9362 | #endif | 9365 | #endif |
9363 | break; | 9366 | break; |
9364 | 9367 | ||
9365 | case BC_ILOOP: | 9368 | case BC_ILOOP: |
9366 | dasm_put(Dst, 7383); | 9369 | dasm_put(Dst, 7386); |
9367 | break; | 9370 | break; |
9368 | 9371 | ||
9369 | case BC_JLOOP: | 9372 | case BC_JLOOP: |
9370 | #if LJ_HASJIT | 9373 | #if LJ_HASJIT |
9371 | dasm_put(Dst, 7394, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); | 9374 | dasm_put(Dst, 7397, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); |
9372 | #endif | 9375 | #endif |
9373 | break; | 9376 | break; |
9374 | 9377 | ||
9375 | case BC_JMP: | 9378 | case BC_JMP: |
9376 | dasm_put(Dst, 7413, 32-1, -(BCBIAS_J*4 >> 16)); | 9379 | dasm_put(Dst, 7416, 32-1, -(BCBIAS_J*4 >> 16)); |
9377 | break; | 9380 | break; |
9378 | 9381 | ||
9379 | /* -- Function headers -------------------------------------------------- */ | 9382 | /* -- Function headers -------------------------------------------------- */ |
9380 | 9383 | ||
9381 | case BC_FUNCF: | 9384 | case BC_FUNCF: |
9382 | #if LJ_HASJIT | 9385 | #if LJ_HASJIT |
9383 | dasm_put(Dst, 7429, GG_DISP2HOT, -HOTCOUNT_CALL); | 9386 | dasm_put(Dst, 7432, GG_DISP2HOT, -HOTCOUNT_CALL); |
9384 | #endif | 9387 | #endif |
9385 | case BC_FUNCV: /* NYI: compiled vararg functions. */ | 9388 | case BC_FUNCV: /* NYI: compiled vararg functions. */ |
9386 | break; | 9389 | break; |
@@ -9390,42 +9393,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
9390 | break; | 9393 | break; |
9391 | #endif | 9394 | #endif |
9392 | case BC_IFUNCF: | 9395 | case BC_IFUNCF: |
9393 | dasm_put(Dst, 7439, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); | 9396 | dasm_put(Dst, 7442, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); |
9394 | if (op != BC_JFUNCF) { | 9397 | if (op != BC_JFUNCF) { |
9395 | dasm_put(Dst, 7451); | 9398 | dasm_put(Dst, 7454); |
9396 | } | 9399 | } |
9397 | dasm_put(Dst, 7454); | 9400 | dasm_put(Dst, 7457); |
9398 | if (op == BC_JFUNCF) { | 9401 | if (op == BC_JFUNCF) { |
9399 | dasm_put(Dst, 7459, BC_JLOOP); | 9402 | dasm_put(Dst, 7462, BC_JLOOP); |
9400 | } else { | 9403 | } else { |
9401 | dasm_put(Dst, 7463); | 9404 | dasm_put(Dst, 7466); |
9402 | } | 9405 | } |
9403 | dasm_put(Dst, 7472); | 9406 | dasm_put(Dst, 7475); |
9404 | break; | 9407 | break; |
9405 | 9408 | ||
9406 | case BC_JFUNCV: | 9409 | case BC_JFUNCV: |
9407 | #if !LJ_HASJIT | 9410 | #if !LJ_HASJIT |
9408 | break; | 9411 | break; |
9409 | #endif | 9412 | #endif |
9410 | dasm_put(Dst, 7478); | 9413 | dasm_put(Dst, 7481); |
9411 | break; /* NYI: compiled vararg functions. */ | 9414 | break; /* NYI: compiled vararg functions. */ |
9412 | 9415 | ||
9413 | case BC_IFUNCV: | 9416 | case BC_IFUNCV: |
9414 | dasm_put(Dst, 7480, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); | 9417 | dasm_put(Dst, 7483, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); |
9415 | break; | 9418 | break; |
9416 | 9419 | ||
9417 | case BC_FUNCC: | 9420 | case BC_FUNCC: |
9418 | case BC_FUNCCW: | 9421 | case BC_FUNCCW: |
9419 | if (op == BC_FUNCC) { | 9422 | if (op == BC_FUNCC) { |
9420 | dasm_put(Dst, 7533, Dt8(->f)); | 9423 | dasm_put(Dst, 7536, Dt8(->f)); |
9421 | } else { | 9424 | } else { |
9422 | dasm_put(Dst, 7536, DISPATCH_GL(wrapf)); | 9425 | dasm_put(Dst, 7539, DISPATCH_GL(wrapf)); |
9423 | } | 9426 | } |
9424 | dasm_put(Dst, 7539, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); | 9427 | dasm_put(Dst, 7542, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); |
9425 | if (op == BC_FUNCCW) { | 9428 | if (op == BC_FUNCCW) { |
9426 | dasm_put(Dst, 7552, Dt8(->f)); | 9429 | dasm_put(Dst, 7555, Dt8(->f)); |
9427 | } | 9430 | } |
9428 | dasm_put(Dst, 7555, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); | 9431 | dasm_put(Dst, 7558, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); |
9429 | break; | 9432 | break; |
9430 | 9433 | ||
9431 | /* ---------------------------------------------------------------------- */ | 9434 | /* ---------------------------------------------------------------------- */ |
@@ -9445,7 +9448,7 @@ static int build_backend(BuildCtx *ctx) | |||
9445 | 9448 | ||
9446 | build_subroutines(ctx); | 9449 | build_subroutines(ctx); |
9447 | 9450 | ||
9448 | dasm_put(Dst, 7576); | 9451 | dasm_put(Dst, 7579); |
9449 | for (op = 0; op < BC__MAX; op++) | 9452 | for (op = 0; op < BC__MAX; op++) |
9450 | build_ins(ctx, (BCOp)op, op); | 9453 | build_ins(ctx, (BCOp)op, op); |
9451 | 9454 | ||
@@ -9455,6 +9458,7 @@ static int build_backend(BuildCtx *ctx) | |||
9455 | /* Emit pseudo frame-info for all assembler functions. */ | 9458 | /* Emit pseudo frame-info for all assembler functions. */ |
9456 | static void emit_asm_debug(BuildCtx *ctx) | 9459 | static void emit_asm_debug(BuildCtx *ctx) |
9457 | { | 9460 | { |
9461 | int fcofs = (int)((uint8_t *)ctx->glob[GLOB_vm_ffi_call] - ctx->code); | ||
9458 | int i; | 9462 | int i; |
9459 | switch (ctx->mode) { | 9463 | switch (ctx->mode) { |
9460 | case BUILD_elfasm: | 9464 | case BUILD_elfasm: |
@@ -9482,7 +9486,7 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
9482 | "\t.byte 0xe\n\t.uleb128 %d\n" | 9486 | "\t.byte 0xe\n\t.uleb128 %d\n" |
9483 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" | 9487 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" |
9484 | "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n", | 9488 | "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n", |
9485 | (int)ctx->codesz, CFRAME_SIZE); | 9489 | fcofs, CFRAME_SIZE); |
9486 | for (i = 14; i <= 31; i++) | 9490 | for (i = 14; i <= 31; i++) |
9487 | fprintf(ctx->fp, | 9491 | fprintf(ctx->fp, |
9488 | "\t.byte %d\n\t.uleb128 %d\n" | 9492 | "\t.byte %d\n\t.uleb128 %d\n" |
@@ -9491,6 +9495,20 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
9491 | fprintf(ctx->fp, | 9495 | fprintf(ctx->fp, |
9492 | "\t.align 2\n" | 9496 | "\t.align 2\n" |
9493 | ".LEFDE0:\n\n"); | 9497 | ".LEFDE0:\n\n"); |
9498 | #if LJ_HASFFI | ||
9499 | fprintf(ctx->fp, | ||
9500 | ".LSFDE1:\n" | ||
9501 | "\t.long .LEFDE1-.LASFDE1\n" | ||
9502 | ".LASFDE1:\n" | ||
9503 | "\t.long .Lframe0\n" | ||
9504 | "\t.long lj_vm_ffi_call\n" | ||
9505 | "\t.long %d\n" | ||
9506 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" | ||
9507 | "\t.byte 0x8e\n\t.uleb128 2\n" | ||
9508 | "\t.byte 0xd\n\t.uleb128 0xe\n" | ||
9509 | "\t.align 2\n" | ||
9510 | ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); | ||
9511 | #endif | ||
9494 | fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); | 9512 | fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); |
9495 | fprintf(ctx->fp, | 9513 | fprintf(ctx->fp, |
9496 | ".Lframe1:\n" | 9514 | ".Lframe1:\n" |
@@ -9510,17 +9528,17 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
9510 | "\t.align 2\n" | 9528 | "\t.align 2\n" |
9511 | ".LECIE1:\n\n"); | 9529 | ".LECIE1:\n\n"); |
9512 | fprintf(ctx->fp, | 9530 | fprintf(ctx->fp, |
9513 | ".LSFDE1:\n" | 9531 | ".LSFDE2:\n" |
9514 | "\t.long .LEFDE1-.LASFDE1\n" | 9532 | "\t.long .LEFDE2-.LASFDE2\n" |
9515 | ".LASFDE1:\n" | 9533 | ".LASFDE2:\n" |
9516 | "\t.long .LASFDE1-.Lframe1\n" | 9534 | "\t.long .LASFDE2-.Lframe1\n" |
9517 | "\t.long .Lbegin-.\n" | 9535 | "\t.long .Lbegin-.\n" |
9518 | "\t.long %d\n" | 9536 | "\t.long %d\n" |
9519 | "\t.uleb128 0\n" /* augmentation length */ | 9537 | "\t.uleb128 0\n" /* augmentation length */ |
9520 | "\t.byte 0xe\n\t.uleb128 %d\n" | 9538 | "\t.byte 0xe\n\t.uleb128 %d\n" |
9521 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" | 9539 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" |
9522 | "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n", | 9540 | "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n", |
9523 | (int)ctx->codesz, CFRAME_SIZE); | 9541 | fcofs, CFRAME_SIZE); |
9524 | for (i = 14; i <= 31; i++) | 9542 | for (i = 14; i <= 31; i++) |
9525 | fprintf(ctx->fp, | 9543 | fprintf(ctx->fp, |
9526 | "\t.byte %d\n\t.uleb128 %d\n" | 9544 | "\t.byte %d\n\t.uleb128 %d\n" |
@@ -9528,7 +9546,37 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
9528 | 0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i)); | 9546 | 0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i)); |
9529 | fprintf(ctx->fp, | 9547 | fprintf(ctx->fp, |
9530 | "\t.align 2\n" | 9548 | "\t.align 2\n" |
9531 | ".LEFDE1:\n\n"); | 9549 | ".LEFDE2:\n\n"); |
9550 | #if LJ_HASFFI | ||
9551 | fprintf(ctx->fp, | ||
9552 | ".Lframe2:\n" | ||
9553 | "\t.long .LECIE2-.LSCIE2\n" | ||
9554 | ".LSCIE2:\n" | ||
9555 | "\t.long 0\n" | ||
9556 | "\t.byte 0x1\n" | ||
9557 | "\t.string \"zR\"\n" | ||
9558 | "\t.uleb128 0x1\n" | ||
9559 | "\t.sleb128 -4\n" | ||
9560 | "\t.byte 65\n" | ||
9561 | "\t.uleb128 1\n" /* augmentation length */ | ||
9562 | "\t.byte 0x1b\n" /* pcrel|sdata4 */ | ||
9563 | "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n" | ||
9564 | "\t.align 2\n" | ||
9565 | ".LECIE2:\n\n"); | ||
9566 | fprintf(ctx->fp, | ||
9567 | ".LSFDE3:\n" | ||
9568 | "\t.long .LEFDE3-.LASFDE3\n" | ||
9569 | ".LASFDE3:\n" | ||
9570 | "\t.long .LASFDE3-.Lframe2\n" | ||
9571 | "\t.long lj_vm_ffi_call-.\n" | ||
9572 | "\t.long %d\n" | ||
9573 | "\t.uleb128 0\n" /* augmentation length */ | ||
9574 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" | ||
9575 | "\t.byte 0x8e\n\t.uleb128 2\n" | ||
9576 | "\t.byte 0xd\n\t.uleb128 0xe\n" | ||
9577 | "\t.align 2\n" | ||
9578 | ".LEFDE3:\n\n", (int)ctx->codesz - fcofs); | ||
9579 | #endif | ||
9532 | break; | 9580 | break; |
9533 | default: | 9581 | default: |
9534 | break; | 9582 | break; |