aboutsummaryrefslogtreecommitdiff
path: root/src/buildvm_ppc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildvm_ppc.h')
-rw-r--r--src/buildvm_ppc.h826
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
15static const unsigned int build_actionlist[7577] = { 15static const unsigned int build_actionlist[7580] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180x72000000, 180x72000000,
@@ -4112,8 +4112,10 @@ static const unsigned int build_actionlist[7577] = {
41120x3484ffff, 41120x3484ffff,
41130x7c21416e, 41130x7c21416e,
41140x4cc63042, 41140x4cc63042,
41150x9069fffc, 41150x91c9fffc,
41160x38c00000, 41160x38c00000,
41170x9069fff8,
41180x7d2e4b78,
41170x39030000, 41190x39030000,
41180x00098200, 41200x00098200,
41190x54841000, 41210x54841000,
@@ -4168,9 +4170,9 @@ static const unsigned int build_actionlist[7577] = {
41680x80630000, 41700x80630000,
41690x00098200, 41710x00098200,
41700x4e800421, 41720x4e800421,
41710x81210000, 41730x810efff8,
41720x8109fffc, 41740x812efffc,
41730x80090004, 41750x800e0004,
41740x90680000, 41760x90680000,
41750x00098200, 41770x00098200,
41760xd8280000, 41780xd8280000,
@@ -4180,9 +4182,10 @@ static const unsigned int build_actionlist[7577] = {
41800x7c0803a6, 41820x7c0803a6,
41810x90a80000, 41830x90a80000,
41820x00098200, 41840x00098200,
41830x7d214b78, 41850x7dc17378,
41840x90c80000, 41860x90c80000,
41850x00098200, 41870x00098200,
41880x7d2e4b78,
41860x4e800020, 41890x4e800020,
41870x00000000, 41900x00000000,
41880x00080000, 41910x00080000,
@@ -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)
8357static void build_ins(BuildCtx *ctx, BCOp op, int defop) 8360static 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. */
9456static void emit_asm_debug(BuildCtx *ctx) 9459static 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;