diff options
| author | Mike Pall <mike> | 2011-04-08 03:01:37 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-04-08 03:01:37 +0200 |
| commit | b56784aae24bb865a308a0dafd1a067ac0dbe947 (patch) | |
| tree | 4b1153d67751a9da0eadbf838629cf8a2b48fa8b /src | |
| parent | b1912f33258dca7476d8c608204b24cbb46b6cb5 (diff) | |
| download | luajit-b56784aae24bb865a308a0dafd1a067ac0dbe947.tar.gz luajit-b56784aae24bb865a308a0dafd1a067ac0dbe947.tar.bz2 luajit-b56784aae24bb865a308a0dafd1a067ac0dbe947.zip | |
ARM: Add BC_CAT and lj_cont_cat.
Diffstat (limited to 'src')
| -rw-r--r-- | src/buildvm_arm.dasc | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc index 7b2d3ce7..aa55e549 100644 --- a/src/buildvm_arm.dasc +++ b/src/buildvm_arm.dasc | |||
| @@ -457,8 +457,20 @@ static void build_subroutines(BuildCtx *ctx) | |||
| 457 | | // BASE = base, RA = resultptr, CARG4 = meta base | 457 | | // BASE = base, RA = resultptr, CARG4 = meta base |
| 458 | | bx CARG1 | 458 | | bx CARG1 |
| 459 | | | 459 | | |
| 460 | |->cont_cat: | 460 | |->cont_cat: // RA = resultptr, CARG4 = meta base |
| 461 | | NYI | 461 | | ldr INS, [PC, #-4] |
| 462 | | sub CARG2, CARG4, #16 | ||
| 463 | | ldrd CARG34, [RA] | ||
| 464 | | str BASE, L->base | ||
| 465 | | decode_RB8 RC, INS | ||
| 466 | | decode_RA8 RA, INS | ||
| 467 | | add CARG1, BASE, RC | ||
| 468 | | subs CARG1, CARG2, CARG1 | ||
| 469 | | strdne CARG34, [CARG2] | ||
| 470 | | movne CARG3, CARG1 | ||
| 471 | | bne ->BC_CAT_Z | ||
| 472 | | strd CARG34, [BASE, RA] | ||
| 473 | | b ->cont_nop | ||
| 462 | | | 474 | | |
| 463 | |//-- Table indexing metamethods ----------------------------------------- | 475 | |//-- Table indexing metamethods ----------------------------------------- |
| 464 | | | 476 | | |
| @@ -1846,7 +1858,27 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
| 1846 | break; | 1858 | break; |
| 1847 | 1859 | ||
| 1848 | case BC_CAT: | 1860 | case BC_CAT: |
| 1849 | | NYI | 1861 | | decode_RB8 RC, INS |
| 1862 | | decode_RC8 RB, INS | ||
| 1863 | | // RA = dst*8, RC = src_start*8, RB = src_end*8 (note: RB/RC swapped!) | ||
| 1864 | | sub CARG3, RB, RC | ||
| 1865 | | str BASE, L->base | ||
| 1866 | | add CARG2, BASE, RB | ||
| 1867 | |->BC_CAT_Z: | ||
| 1868 | | // RA = dst*8, RC = src_start*8, CARG2 = top-1 | ||
| 1869 | | mov CARG1, L | ||
| 1870 | | str PC, SAVE_PC | ||
| 1871 | | lsr CARG3, CARG3, #3 | ||
| 1872 | | bl extern lj_meta_cat // (lua_State *L, TValue *top, int left) | ||
| 1873 | | // Returns NULL (finished) or TValue * (metamethod). | ||
| 1874 | | ldr BASE, L->base | ||
| 1875 | | cmp CRET1, #0 | ||
| 1876 | | bne ->vmeta_binop | ||
| 1877 | | ldrd CARG34, [BASE, RC] | ||
| 1878 | | ins_next1 | ||
| 1879 | | ins_next2 | ||
| 1880 | | strd CARG34, [BASE, RA] // Copy result to RA. | ||
| 1881 | | ins_next3 | ||
| 1850 | break; | 1882 | break; |
| 1851 | 1883 | ||
| 1852 | /* -- Constant ops ------------------------------------------------------ */ | 1884 | /* -- Constant ops ------------------------------------------------------ */ |
