diff options
| author | Mike Pall <mike> | 2026-07-20 10:20:49 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2026-07-20 10:20:49 +0200 |
| commit | a2ce8114f107464473070427e69e84f4923bd08a (patch) | |
| tree | 41fb420f360bf1446ae253dda360af5300e401a6 /src/vm_arm.dasc | |
| parent | 14d8a7a27dc8c626ab9e7c7e9e50b6df6def4f03 (diff) | |
| download | luajit-a2ce8114f107464473070427e69e84f4923bd08a.tar.gz luajit-a2ce8114f107464473070427e69e84f4923bd08a.tar.bz2 luajit-a2ce8114f107464473070427e69e84f4923bd08a.zip | |
Backport some v3.0 syntax extensions.
Documentation in #1475. Backport discussion in #1476.
Thanks to Appla, slashOwO, Sergey Kaplun, CppCXY.
Diffstat (limited to 'src/vm_arm.dasc')
| -rw-r--r-- | src/vm_arm.dasc | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/vm_arm.dasc b/src/vm_arm.dasc index d67dbffcc..d9b2bf663 100644 --- a/src/vm_arm.dasc +++ b/src/vm_arm.dasc | |||
| @@ -849,6 +849,26 @@ static void build_subroutines(BuildCtx *ctx) | |||
| 849 | | b ->vmeta_binop // Binop call for compatibility. | 849 | | b ->vmeta_binop // Binop call for compatibility. |
| 850 | #endif | 850 | #endif |
| 851 | | | 851 | | |
| 852 | |//-- Bit operator metamethods ------------------------------------------- | ||
| 853 | | | ||
| 854 | |->vmeta_bnot: | ||
| 855 | | add CARG3, BASE, RC | ||
| 856 | | mov CARG4, CARG3 | ||
| 857 | | b >1 | ||
| 858 | | | ||
| 859 | |->vmeta_bitop: | ||
| 860 | | add CARG3, BASE, RB | ||
| 861 | | add CARG4, BASE, RC | ||
| 862 | |1: | ||
| 863 | | decode_OP OP, INS | ||
| 864 | | add CARG2, BASE, RA | ||
| 865 | | str BASE, L->base | ||
| 866 | | mov CARG1, L | ||
| 867 | | str PC, SAVE_PC | ||
| 868 | | str OP, ARG5 | ||
| 869 | | bl extern lj_meta_bitop // (lua_State *L, TValue *ra,*rb,*rc, BCReg op) | ||
| 870 | | b ->cont_nop | ||
| 871 | | | ||
| 852 | |//-- Call metamethod ---------------------------------------------------- | 872 | |//-- Call metamethod ---------------------------------------------------- |
| 853 | | | 873 | | |
| 854 | |->vmeta_call: // Resolve and call __call metamethod. | 874 | |->vmeta_call: // Resolve and call __call metamethod. |
| @@ -3376,6 +3396,61 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
| 3376 | | ins_next3 | 3396 | | ins_next3 |
| 3377 | break; | 3397 | break; |
| 3378 | 3398 | ||
| 3399 | /* -- Bit ops ----------------------------------------------------------- */ | ||
| 3400 | |||
| 3401 | case BC_BNOT: | ||
| 3402 | | // RA = dst, RC = src | ||
| 3403 | | lsl RC, RC, #3 | ||
| 3404 | | ldrd CARG12, [BASE, RC] | ||
| 3405 | | checktp CARG1, LJ_TISNUM | ||
| 3406 | | bne ->vmeta_bnot | ||
| 3407 | | mvn CARG1, CARG1 | ||
| 3408 | | mvn CARG2, #~LJ_TISNUM | ||
| 3409 | | ins_next1 | ||
| 3410 | | ins_next2 | ||
| 3411 | | strd CARG12, [BASE, RA] | ||
| 3412 | | ins_next3 | ||
| 3413 | break; | ||
| 3414 | |||
| 3415 | |.macro ins_bitop, ins, shop | ||
| 3416 | | decode_RB8 RB, INS | ||
| 3417 | | decode_RC8 RC, INS | ||
| 3418 | | // RA = dst*8, RB = src1*8, RC = src2*8 | ||
| 3419 | | ldrd CARG12, [BASE, RB] | ||
| 3420 | | ldrd CARG34, [BASE, RC] | ||
| 3421 | | checktp CARG2, LJ_TISNUM | ||
| 3422 | | checktpeq CARG4, LJ_TISNUM | ||
| 3423 | | bne ->vmeta_bitop | ||
| 3424 | |.if shop == 1 | ||
| 3425 | | and CARG3, CARG3, #31 | ||
| 3426 | |.endif | ||
| 3427 | | ins CARG1, CARG1, CARG3 | ||
| 3428 | | mvn CARG2, #~LJ_TISNUM | ||
| 3429 | | ins_next1 | ||
| 3430 | | ins_next2 | ||
| 3431 | | strd CARG12, [BASE, RA] | ||
| 3432 | | ins_next3 | ||
| 3433 | |.endmacro | ||
| 3434 | |||
| 3435 | case BC_BAND: | ||
| 3436 | | ins_bitop and, 0 | ||
| 3437 | break; | ||
| 3438 | case BC_BOR: | ||
| 3439 | | ins_bitop orr, 0 | ||
| 3440 | break; | ||
| 3441 | case BC_BXOR: | ||
| 3442 | | ins_bitop eor, 0 | ||
| 3443 | break; | ||
| 3444 | case BC_BSHL: | ||
| 3445 | | ins_bitop lsl, 1 | ||
| 3446 | break; | ||
| 3447 | case BC_BSHR: | ||
| 3448 | | ins_bitop lsr, 1 | ||
| 3449 | break; | ||
| 3450 | case BC_BSAR: | ||
| 3451 | | ins_bitop asr, 1 | ||
| 3452 | break; | ||
| 3453 | |||
| 3379 | /* -- Constant ops ------------------------------------------------------ */ | 3454 | /* -- Constant ops ------------------------------------------------------ */ |
| 3380 | 3455 | ||
| 3381 | case BC_KSTR: | 3456 | case BC_KSTR: |
