2
** This file has been pre-processed with DynASM.
3
** http://luajit.org/dynasm.html
4
** DynASM version 1.3.0, DynASM arm version 1.3.0
5
** DO NOT EDIT! The original file is in "buildvm_arm.dasc".
8
#if DASM_VERSION != 10300
9
#error "Version mismatch between DynASM and included encoding engine"
12
#define DASM_SECTION_CODE_OP 0
13
#define DASM_SECTION_CODE_SUB 1
14
#define DASM_MAXSECTION 2
15
static const unsigned int build_actionlist[5407] = {
5434
GLOB_vm_unwind_c_eh,
5436
GLOB_vm_unwind_ff_eh,
5437
GLOB_vm_growstack_c,
5438
GLOB_vm_growstack_l,
5442
GLOB_vm_call_dispatch,
5444
GLOB_vm_call_dispatch_f,
5464
GLOB_vmeta_equal_cd,
5465
GLOB_vmeta_arith_vn,
5466
GLOB_vmeta_arith_nv,
5468
GLOB_vmeta_arith_vv,
5478
GLOB_ff_getmetatable,
5479
GLOB_ff_setmetatable,
5490
GLOB_ff_coroutine_resume,
5491
GLOB_ff_coroutine_wrap_aux,
5492
GLOB_ff_coroutine_yield,
5521
GLOB_ff_string_byte,
5522
GLOB_ff_string_char,
5527
GLOB_ff_string_reverse,
5528
GLOB_ff_string_lower,
5529
GLOB_ff_string_upper,
5541
GLOB_ff_bit_arshift,
5551
GLOB_vm_exit_handler,
5552
GLOB_vm_exit_interp,
5573
static const char *const globnames[] = {
5592
"vm_call_dispatch_f",
5638
"ff_coroutine_resume",
5639
"ff_coroutine_wrap_aux",
5640
"ff_coroutine_yield",
5675
"ff_string_reverse",
5721
static const char *const extnames[] = {
5722
"lj_state_growstack",
5733
"lj_str_fromnumber",
5736
"lj_ffh_coroutine_wrap_err",
5776
"lj_gc_step_fixtop",
5781
#define Dt1(_V) (int)(ptrdiff_t)&(((lua_State *)0)_V)
5782
#define Dt2(_V) (int)(ptrdiff_t)&(((global_State *)0)_V)
5783
#define Dt3(_V) (int)(ptrdiff_t)&(((TValue *)0)_V)
5784
#define Dt4(_V) (int)(ptrdiff_t)&(((GCobj *)0)_V)
5785
#define Dt5(_V) (int)(ptrdiff_t)&(((GCstr *)0)_V)
5786
#define Dt6(_V) (int)(ptrdiff_t)&(((GCtab *)0)_V)
5787
#define Dt7(_V) (int)(ptrdiff_t)&(((GCfuncL *)0)_V)
5788
#define Dt8(_V) (int)(ptrdiff_t)&(((GCfuncC *)0)_V)
5789
#define Dt9(_V) (int)(ptrdiff_t)&(((GCproto *)0)_V)
5790
#define DtA(_V) (int)(ptrdiff_t)&(((GCupval *)0)_V)
5791
#define DtB(_V) (int)(ptrdiff_t)&(((Node *)0)_V)
5792
#define DtC(_V) (int)(ptrdiff_t)&(((int *)0)_V)
5793
#define DtD(_V) (int)(ptrdiff_t)&(((GCtrace *)0)_V)
5795
#define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field))
5796
#define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field))
5797
#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto))
5800
#error "Only dual-number mode supported for ARM target"
5803
/* Generate subroutines used by opcodes and other parts of the VM. */
5804
/* The .code_sub section should be last to help static branch prediction. */
5805
static void build_subroutines(BuildCtx *ctx)
5808
dasm_put(Dst, 1, FRAME_P, ~LJ_TTRUE, FRAME_TYPE, FRAME_TYPEP, FRAME_C, Dt1(->base), LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->top));
5809
dasm_put(Dst, 54, Dt1(->cframe), Dt1(->maxstack), ~LJ_TNIL, Dt1(->top), Dt1(->top), LJ_VMST_C, Dt1(->glref), Dt2(->vmstate));
5810
dasm_put(Dst, 108, ~CFRAME_RAWMASK, Dt1(->base), Dt1(->glref), ~LJ_TFALSE, GG_G2DISP, LJ_VMST_INTERP, DISPATCH_GL(vmstate), LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->field_pc), Dt1(->glref));
5811
dasm_put(Dst, 172, GG_G2DISP, FRAME_CP, CFRAME_RESUME, Dt1(->status), Dt1(->cframe), Dt1(->base), Dt1(->top), Dt1(->status), LJ_VMST_INTERP, FRAME_TYPE, DISPATCH_GL(vmstate), FRAME_CP, FRAME_C, Dt1(->cframe), Dt1(->cframe));
5812
dasm_put(Dst, 237, Dt1(->glref), GG_G2DISP, Dt1(->base), Dt1(->top), LJ_VMST_INTERP, DISPATCH_GL(vmstate), -LJ_TFUNC, Dt7(->field_pc), Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), Dt1(->glref), FRAME_CP, GG_G2DISP);
5813
dasm_put(Dst, 306, Dt7(->field_pc), ~LJ_TNIL, PC2PROTO(k), Dt1(->base), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM);
5814
dasm_put(Dst, 377, Dt1(->base));
5815
if (LJ_TARGET_OSX) {
5816
dasm_put(Dst, 387, Dt1(->base));
5818
dasm_put(Dst, 390, FRAME_CONT, Dt1(->top), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM, Dt1(->base));
5819
if (LJ_TARGET_OSX) {
5820
dasm_put(Dst, 452, Dt1(->base));
5822
dasm_put(Dst, 455, FRAME_CONT, Dt1(->top), Dt1(->base));
5823
if (LJ_TARGET_OSX) {
5824
dasm_put(Dst, 491, Dt1(->base));
5826
dasm_put(Dst, 494, ~LJ_TTRUE, -LJ_TFALSE, Dt1(->base));
5828
dasm_put(Dst, 541, Dt1(->base));
5830
dasm_put(Dst, 552, Dt1(->base));
5831
if (LJ_TARGET_OSX) {
5832
dasm_put(Dst, 589, Dt1(->base));
5834
dasm_put(Dst, 592, FRAME_CONT, Dt1(->base));
5835
if (LJ_TARGET_OSX) {
5836
dasm_put(Dst, 613, Dt1(->base));
5838
dasm_put(Dst, 616, Dt1(->base));
5839
if (LJ_TARGET_OSX) {
5843
if (LJ_TARGET_OSX) {
5846
dasm_put(Dst, 633, Dt7(->field_pc), Dt1(->base));
5847
if (LJ_TARGET_OSX) {
5848
dasm_put(Dst, 654, Dt1(->base));
5850
dasm_put(Dst, 657, Dt1(->base));
5851
if (LJ_TARGET_OSX) {
5852
dasm_put(Dst, 671, Dt1(->base));
5859
dasm_put(Dst, 678, BC_JFORI);
5863
dasm_put(Dst, 684, BC_JFORI);
5865
dasm_put(Dst, 687, BC_FORI, -LJ_TTRUE, -LJ_TISNUM, ~LJ_TISNUM, (int)(offsetof(GCfuncC, upvalue)>>3)-1, -LJ_TTAB, -LJ_TUDATA, Dt6(->metatable));
5866
dasm_put(Dst, 744, ~LJ_TNIL, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable]), Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, ~LJ_TTAB, -LJ_TNIL, -LJ_TISNUM);
5867
dasm_put(Dst, 792, ~LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT]), -LJ_TTAB, Dt6(->metatable), -LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TTAB);
5869
if (LJ_TARGET_OSX) {
5873
if (LJ_TARGET_OSX) {
5876
dasm_put(Dst, 856, -LJ_TISNUM, -LJ_TSTR, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base), -LJ_TISNUM, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), ~LJ_TSTR);
5877
dasm_put(Dst, 908, ~LJ_TNIL, -LJ_TTAB, Dt1(->base), Dt1(->top));
5878
if (LJ_TARGET_OSX) {
5879
dasm_put(Dst, 931, Dt1(->base));
5881
dasm_put(Dst, 934, ~LJ_TNIL, (2+1)*8, -LJ_TTAB);
5882
#ifdef LUAJIT_ENABLE_LUA52COMPAT
5883
dasm_put(Dst, 957, Dt6(->metatable));
5885
dasm_put(Dst, 960, Dt8(->upvalue[0]));
5886
#ifdef LUAJIT_ENABLE_LUA52COMPAT
5889
dasm_put(Dst, 968, ~LJ_TNIL, (3+1)*8, -LJ_TTAB, -LJ_TISNUM, Dt6(->asize), Dt6(->array), (0+1)*8, -LJ_TNIL, (2+1)*8, Dt6(->hmask));
5890
if (LJ_TARGET_OSX) {
5891
dasm_put(Dst, 1018);
5893
dasm_put(Dst, 1020);
5894
if (LJ_TARGET_OSX) {
5895
dasm_put(Dst, 1023);
5897
dasm_put(Dst, 1025, -LJ_TTAB);
5898
#ifdef LUAJIT_ENABLE_LUA52COMPAT
5899
dasm_put(Dst, 1041, Dt6(->metatable));
5901
dasm_put(Dst, 1044, Dt8(->upvalue[0]));
5902
#ifdef LUAJIT_ENABLE_LUA52COMPAT
5903
dasm_put(Dst, 1048);
5905
dasm_put(Dst, 1052, ~LJ_TISNUM, (3+1)*8, DISPATCH_GL(hookmask), HOOK_ACTIVE, 8+FRAME_PCALL, 8+FRAME_PCALLH, DISPATCH_GL(hookmask), -LJ_TFUNC, HOOK_ACTIVE, 16+FRAME_PCALL, 16+FRAME_PCALLH, -LJ_TTHREAD);
5906
dasm_put(Dst, 1111, Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
5907
dasm_put(Dst, 1170, Dt1(->base), Dt1(->maxstack), Dt1(->top), ~LJ_TTRUE, FRAME_TYPE, ~LJ_TFALSE, (2+1)*8, Dt1(->top));
5908
dasm_put(Dst, 1230, Dt8(->upvalue[0].gcr), Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
5909
dasm_put(Dst, 1286, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top));
5910
dasm_put(Dst, 1345, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
5911
if (LJ_TARGET_OSX) {
5912
dasm_put(Dst, 1411);
5914
dasm_put(Dst, 1413);
5915
if (LJ_TARGET_OSX) {
5916
dasm_put(Dst, 1416);
5918
dasm_put(Dst, 1418, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
5919
if (LJ_TARGET_OSX) {
5920
dasm_put(Dst, 1478);
5922
dasm_put(Dst, 1480);
5923
if (LJ_TARGET_OSX) {
5924
dasm_put(Dst, 1483);
5926
dasm_put(Dst, 1485, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL);
5927
dasm_put(Dst, 1549, -LJ_TISNUM);
5928
if (LJ_TARGET_OSX) {
5929
dasm_put(Dst, 1554);
5931
dasm_put(Dst, 1556);
5932
if (LJ_TARGET_OSX) {
5933
dasm_put(Dst, 1559);
5935
dasm_put(Dst, 1561, -LJ_TISNUM);
5936
if (LJ_TARGET_OSX) {
5937
dasm_put(Dst, 1573);
5939
dasm_put(Dst, 1575);
5940
if (LJ_TARGET_OSX) {
5941
dasm_put(Dst, 1578);
5943
dasm_put(Dst, 1580, -LJ_TISNUM);
5944
if (LJ_TARGET_OSX) {
5945
dasm_put(Dst, 1592);
5947
dasm_put(Dst, 1594);
5948
if (LJ_TARGET_OSX) {
5949
dasm_put(Dst, 1597);
5951
dasm_put(Dst, 1599, -LJ_TISNUM);
5952
if (LJ_TARGET_OSX) {
5953
dasm_put(Dst, 1611);
5955
dasm_put(Dst, 1613);
5956
if (LJ_TARGET_OSX) {
5957
dasm_put(Dst, 1616);
5959
dasm_put(Dst, 1618, -LJ_TISNUM);
5960
if (LJ_TARGET_OSX) {
5961
dasm_put(Dst, 1630);
5963
dasm_put(Dst, 1632);
5964
if (LJ_TARGET_OSX) {
5965
dasm_put(Dst, 1635);
5967
dasm_put(Dst, 1637, -LJ_TISNUM);
5968
if (LJ_TARGET_OSX) {
5969
dasm_put(Dst, 1649);
5971
dasm_put(Dst, 1651);
5972
if (LJ_TARGET_OSX) {
5973
dasm_put(Dst, 1654);
5975
dasm_put(Dst, 1656, -LJ_TISNUM);
5976
if (LJ_TARGET_OSX) {
5977
dasm_put(Dst, 1668);
5979
dasm_put(Dst, 1670);
5980
if (LJ_TARGET_OSX) {
5981
dasm_put(Dst, 1673);
5983
dasm_put(Dst, 1675, -LJ_TISNUM);
5984
if (LJ_TARGET_OSX) {
5985
dasm_put(Dst, 1687);
5987
dasm_put(Dst, 1689);
5988
if (LJ_TARGET_OSX) {
5989
dasm_put(Dst, 1692);
5991
dasm_put(Dst, 1694, -LJ_TISNUM);
5992
if (LJ_TARGET_OSX) {
5993
dasm_put(Dst, 1706);
5995
dasm_put(Dst, 1708);
5996
if (LJ_TARGET_OSX) {
5997
dasm_put(Dst, 1711);
5999
dasm_put(Dst, 1713, -LJ_TISNUM);
6000
if (LJ_TARGET_OSX) {
6001
dasm_put(Dst, 1725);
6003
dasm_put(Dst, 1727);
6004
if (LJ_TARGET_OSX) {
6005
dasm_put(Dst, 1730);
6007
dasm_put(Dst, 1732, -LJ_TISNUM);
6008
if (LJ_TARGET_OSX) {
6009
dasm_put(Dst, 1744);
6011
dasm_put(Dst, 1746);
6012
if (LJ_TARGET_OSX) {
6013
dasm_put(Dst, 1749);
6015
dasm_put(Dst, 1751, -LJ_TISNUM);
6016
if (LJ_TARGET_OSX) {
6017
dasm_put(Dst, 1763);
6019
dasm_put(Dst, 1765);
6020
if (LJ_TARGET_OSX) {
6021
dasm_put(Dst, 1768);
6023
dasm_put(Dst, 1770, -LJ_TISNUM);
6024
if (LJ_TARGET_OSX) {
6025
dasm_put(Dst, 1782);
6027
dasm_put(Dst, 1784);
6028
if (LJ_TARGET_OSX) {
6029
dasm_put(Dst, 1787);
6031
dasm_put(Dst, 1789, -LJ_TISNUM, -LJ_TISNUM);
6032
if (LJ_TARGET_OSX) {
6033
dasm_put(Dst, 1804);
6035
dasm_put(Dst, 1806);
6036
if (LJ_TARGET_OSX) {
6037
dasm_put(Dst, 1809);
6039
dasm_put(Dst, 1811, -LJ_TISNUM, -LJ_TISNUM);
6040
if (LJ_TARGET_OSX) {
6041
dasm_put(Dst, 1826);
6043
dasm_put(Dst, 1828);
6044
if (LJ_TARGET_OSX) {
6045
dasm_put(Dst, 1831);
6047
dasm_put(Dst, 1833, -LJ_TISNUM, -LJ_TISNUM);
6048
if (LJ_TARGET_OSX) {
6049
dasm_put(Dst, 1848);
6051
dasm_put(Dst, 1850);
6052
if (LJ_TARGET_OSX) {
6053
dasm_put(Dst, 1853);
6055
dasm_put(Dst, 1855, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM);
6056
if (LJ_TARGET_OSX) {
6057
dasm_put(Dst, 1888);
6059
dasm_put(Dst, 1890);
6060
if (LJ_TARGET_OSX) {
6061
dasm_put(Dst, 1893);
6063
dasm_put(Dst, 1895, -LJ_TISNUM);
6064
if (LJ_TARGET_OSX) {
6065
dasm_put(Dst, 1908);
6067
dasm_put(Dst, 1910);
6068
if (LJ_TARGET_OSX) {
6069
dasm_put(Dst, 1913);
6071
dasm_put(Dst, 1915, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM);
6072
if (LJ_TARGET_OSX) {
6073
dasm_put(Dst, 1937);
6075
dasm_put(Dst, 1939);
6076
if (LJ_TARGET_OSX) {
6077
dasm_put(Dst, 1942);
6079
dasm_put(Dst, 1944, (2+1)*8, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
6080
dasm_put(Dst, 1995, -LJ_TISNUM, -LJ_TISNUM);
6081
dasm_put(Dst, 2049, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1]));
6082
dasm_put(Dst, 2103, ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
6083
dasm_put(Dst, 2162, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len));
6084
dasm_put(Dst, 2224, DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr));
6085
dasm_put(Dst, 2277, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
6086
dasm_put(Dst, 2337, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), -LJ_TTAB);
6087
if (LJ_TARGET_OSX) {
6088
dasm_put(Dst, 2375);
6090
dasm_put(Dst, 2377);
6091
if (LJ_TARGET_OSX) {
6092
dasm_put(Dst, 2380);
6094
dasm_put(Dst, 2382, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
6095
dasm_put(Dst, 2453, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
6096
dasm_put(Dst, 2513, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM);
6097
dasm_put(Dst, 2569, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
6098
dasm_put(Dst, 2626, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP);
6099
dasm_put(Dst, 2689, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base));
6101
dasm_put(Dst, 2723);
6103
dasm_put(Dst, 2725, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base));
6104
dasm_put(Dst, 2771, GG_DISP2STATIC);
6106
dasm_put(Dst, 2787);
6108
dasm_put(Dst, 2789);
6110
dasm_put(Dst, 2792);
6112
dasm_put(Dst, 2795);
6114
dasm_put(Dst, 2797);
6116
dasm_put(Dst, 2800, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
6118
dasm_put(Dst, 2822);
6120
dasm_put(Dst, 2824);
6122
dasm_put(Dst, 2826);
6124
dasm_put(Dst, 2828);
6126
dasm_put(Dst, 2833);
6128
dasm_put(Dst, 2836);
6130
dasm_put(Dst, 2838);
6133
for (i = 31; i >= 0; i--) {
6134
dasm_put(Dst, 2874, i, i);
6137
dasm_put(Dst, 2879);
6139
dasm_put(Dst, 2888);
6141
dasm_put(Dst, 2890);
6143
dasm_put(Dst, 2892);
6145
dasm_put(Dst, 2894);
6147
#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
6148
dasm_put(Dst, 2918, DtE(->spadj), DtE(->nsp), offsetof(CCallState, stack), DtE(->func), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3]), DtE(->gpr[0]), DtE(->gpr[1]));
6152
/* Generate the code for a single instruction. */
6153
static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6156
dasm_put(Dst, 2956, defop);
6160
/* -- Comparison ops ---------------------------------------------------- */
6162
/* Remember: all ops branch for a true comparison, fall through otherwise. */
6164
case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
6165
dasm_put(Dst, 2958, -LJ_TISNUM, -LJ_TISNUM);
6166
if (op == BC_ISLT) {
6167
dasm_put(Dst, 2974);
6168
} else if (op == BC_ISGE) {
6169
dasm_put(Dst, 2976);
6170
} else if (op == BC_ISLE) {
6171
dasm_put(Dst, 2978);
6173
dasm_put(Dst, 2980);
6175
dasm_put(Dst, 2982, -LJ_TISNUM);
6176
if (op == BC_ISLT) {
6177
dasm_put(Dst, 3018);
6178
} else if (op == BC_ISGE) {
6179
dasm_put(Dst, 3020);
6180
} else if (op == BC_ISLE) {
6181
dasm_put(Dst, 3022);
6183
dasm_put(Dst, 3024);
6185
dasm_put(Dst, 3026);
6188
case BC_ISEQV: case BC_ISNEV:
6189
vk = op == BC_ISEQV;
6190
dasm_put(Dst, 3029, -LJ_TISNUM, -LJ_TISNUM);
6192
dasm_put(Dst, 3040);
6194
dasm_put(Dst, 3043);
6197
dasm_put(Dst, 3046, -LJ_TCDATA, -LJ_TCDATA);
6199
dasm_put(Dst, 3053, -LJ_TISPRI);
6201
dasm_put(Dst, 3062, -LJ_TISTABUD);
6203
dasm_put(Dst, 3079, -LJ_TISTABUD);
6205
dasm_put(Dst, 3086, Dt6(->metatable));
6207
dasm_put(Dst, 3090);
6209
dasm_put(Dst, 3093);
6211
dasm_put(Dst, 3096, Dt6(->nomm), 1-vk, 1<<MM_eq);
6213
dasm_put(Dst, 3106);
6217
case BC_ISEQS: case BC_ISNES:
6218
vk = op == BC_ISEQS;
6219
dasm_put(Dst, 3116, -LJ_TSTR);
6221
dasm_put(Dst, 3125);
6223
dasm_put(Dst, 3129);
6226
dasm_put(Dst, 3131);
6228
dasm_put(Dst, 3134);
6230
dasm_put(Dst, 3137);
6232
dasm_put(Dst, 3144, -LJ_TCDATA);
6236
case BC_ISEQN: case BC_ISNEN:
6237
vk = op == BC_ISEQN;
6238
dasm_put(Dst, 3152);
6240
dasm_put(Dst, 3159);
6242
dasm_put(Dst, 3161);
6244
dasm_put(Dst, 3163, -LJ_TISNUM, -LJ_TISNUM);
6246
dasm_put(Dst, 3173);
6248
dasm_put(Dst, 3176);
6250
dasm_put(Dst, 3179);
6252
dasm_put(Dst, 3188);
6255
dasm_put(Dst, 3191);
6257
dasm_put(Dst, 3193);
6259
dasm_put(Dst, 3196, -LJ_TISNUM);
6261
dasm_put(Dst, 3212);
6263
dasm_put(Dst, 3214);
6265
dasm_put(Dst, 3216);
6267
dasm_put(Dst, 3219, -LJ_TCDATA);
6271
case BC_ISEQP: case BC_ISNEP:
6272
vk = op == BC_ISEQP;
6273
dasm_put(Dst, 3227);
6275
dasm_put(Dst, 3233, -LJ_TCDATA);
6277
dasm_put(Dst, 3238);
6279
dasm_put(Dst, 3240);
6281
dasm_put(Dst, 3242);
6283
dasm_put(Dst, 3244);
6286
/* -- Unary test and copy ops ------------------------------------------- */
6288
case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
6289
dasm_put(Dst, 3251, -LJ_TTRUE);
6290
if (op == BC_ISTC || op == BC_IST) {
6291
dasm_put(Dst, 3259);
6292
if (op == BC_ISTC) {
6293
dasm_put(Dst, 3261);
6296
dasm_put(Dst, 3263);
6297
if (op == BC_ISFC) {
6298
dasm_put(Dst, 3265);
6301
dasm_put(Dst, 3267);
6304
/* -- Unary ops --------------------------------------------------------- */
6307
dasm_put(Dst, 3274);
6310
dasm_put(Dst, 3284, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE);
6313
dasm_put(Dst, 3301, -LJ_TISNUM);
6316
dasm_put(Dst, 3327, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB);
6317
if (LJ_TARGET_OSX) {
6318
dasm_put(Dst, 3351);
6320
dasm_put(Dst, 3353);
6321
if (LJ_TARGET_OSX) {
6322
dasm_put(Dst, 3356);
6324
dasm_put(Dst, 3358);
6327
/* -- Binary ops -------------------------------------------------------- */
6330
case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
6331
dasm_put(Dst, 3361);
6332
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6335
dasm_put(Dst, 3364);
6338
dasm_put(Dst, 3367);
6341
dasm_put(Dst, 3370);
6344
dasm_put(Dst, 3373);
6346
dasm_put(Dst, 3375, -LJ_TISNUM, -LJ_TISNUM);
6348
dasm_put(Dst, 3380, -LJ_TISNUM, -LJ_TISNUM);
6350
dasm_put(Dst, 3385);
6353
dasm_put(Dst, 3389);
6356
dasm_put(Dst, 3392);
6359
dasm_put(Dst, 3395);
6362
dasm_put(Dst, 3398);
6366
dasm_put(Dst, 3407, -LJ_TISNUM, -LJ_TISNUM);
6368
dasm_put(Dst, 3412, -LJ_TISNUM, -LJ_TISNUM);
6370
dasm_put(Dst, 3417);
6374
dasm_put(Dst, 3420, -LJ_TISNUM, -LJ_TISNUM);
6376
dasm_put(Dst, 3425, -LJ_TISNUM, -LJ_TISNUM);
6378
dasm_put(Dst, 3430);
6382
dasm_put(Dst, 3433, -LJ_TISNUM, -LJ_TISNUM);
6384
dasm_put(Dst, 3438, -LJ_TISNUM, -LJ_TISNUM);
6386
dasm_put(Dst, 3443);
6389
dasm_put(Dst, 3446);
6391
case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
6392
dasm_put(Dst, 3452);
6393
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6396
dasm_put(Dst, 3455);
6399
dasm_put(Dst, 3458);
6402
dasm_put(Dst, 3461);
6405
dasm_put(Dst, 3464);
6407
dasm_put(Dst, 3466, -LJ_TISNUM, -LJ_TISNUM);
6409
dasm_put(Dst, 3471, -LJ_TISNUM, -LJ_TISNUM);
6411
dasm_put(Dst, 3476);
6414
dasm_put(Dst, 3480);
6417
dasm_put(Dst, 3483);
6420
dasm_put(Dst, 3486);
6423
dasm_put(Dst, 3489);
6427
dasm_put(Dst, 3498, -LJ_TISNUM, -LJ_TISNUM);
6429
dasm_put(Dst, 3503, -LJ_TISNUM, -LJ_TISNUM);
6431
dasm_put(Dst, 3508);
6435
dasm_put(Dst, 3511, -LJ_TISNUM, -LJ_TISNUM);
6437
dasm_put(Dst, 3516, -LJ_TISNUM, -LJ_TISNUM);
6439
dasm_put(Dst, 3521);
6443
dasm_put(Dst, 3524, -LJ_TISNUM, -LJ_TISNUM);
6445
dasm_put(Dst, 3529, -LJ_TISNUM, -LJ_TISNUM);
6447
dasm_put(Dst, 3534);
6450
dasm_put(Dst, 3537);
6452
case BC_MULVN: case BC_MULNV: case BC_MULVV:
6453
dasm_put(Dst, 3543);
6454
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6457
dasm_put(Dst, 3546);
6460
dasm_put(Dst, 3549);
6463
dasm_put(Dst, 3552);
6466
dasm_put(Dst, 3555);
6468
dasm_put(Dst, 3557, -LJ_TISNUM, -LJ_TISNUM);
6470
dasm_put(Dst, 3562, -LJ_TISNUM, -LJ_TISNUM);
6472
dasm_put(Dst, 3567);
6475
dasm_put(Dst, 3572);
6478
dasm_put(Dst, 3575);
6481
dasm_put(Dst, 3578);
6484
dasm_put(Dst, 3581);
6488
dasm_put(Dst, 3590, -LJ_TISNUM, -LJ_TISNUM);
6490
dasm_put(Dst, 3595, -LJ_TISNUM, -LJ_TISNUM);
6492
dasm_put(Dst, 3600);
6496
dasm_put(Dst, 3603, -LJ_TISNUM, -LJ_TISNUM);
6498
dasm_put(Dst, 3608, -LJ_TISNUM, -LJ_TISNUM);
6500
dasm_put(Dst, 3613);
6504
dasm_put(Dst, 3616, -LJ_TISNUM, -LJ_TISNUM);
6506
dasm_put(Dst, 3621, -LJ_TISNUM, -LJ_TISNUM);
6508
dasm_put(Dst, 3626);
6511
dasm_put(Dst, 3629);
6513
case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
6514
dasm_put(Dst, 3635);
6515
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6518
dasm_put(Dst, 3638);
6521
dasm_put(Dst, 3641);
6524
dasm_put(Dst, 3644);
6530
dasm_put(Dst, 3647, -LJ_TISNUM, -LJ_TISNUM);
6532
dasm_put(Dst, 3652, -LJ_TISNUM, -LJ_TISNUM);
6534
dasm_put(Dst, 3657);
6538
dasm_put(Dst, 3660, -LJ_TISNUM, -LJ_TISNUM);
6540
dasm_put(Dst, 3665, -LJ_TISNUM, -LJ_TISNUM);
6542
dasm_put(Dst, 3670);
6546
dasm_put(Dst, 3673, -LJ_TISNUM, -LJ_TISNUM);
6548
dasm_put(Dst, 3678, -LJ_TISNUM, -LJ_TISNUM);
6550
dasm_put(Dst, 3683);
6553
dasm_put(Dst, 3686);
6555
case BC_MODVN: case BC_MODNV: case BC_MODVV:
6556
dasm_put(Dst, 3696);
6557
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6560
dasm_put(Dst, 3699);
6563
dasm_put(Dst, 3702);
6566
dasm_put(Dst, 3705);
6570
dasm_put(Dst, 3708, -LJ_TISNUM, -LJ_TISNUM);
6572
dasm_put(Dst, 3713, -LJ_TISNUM, -LJ_TISNUM);
6574
dasm_put(Dst, 3718);
6577
dasm_put(Dst, 3722);
6580
dasm_put(Dst, 3725);
6583
dasm_put(Dst, 3728);
6586
dasm_put(Dst, 3731, ~LJ_TISNUM);
6590
dasm_put(Dst, 3745, -LJ_TISNUM, -LJ_TISNUM);
6592
dasm_put(Dst, 3750, -LJ_TISNUM, -LJ_TISNUM);
6594
dasm_put(Dst, 3755);
6598
dasm_put(Dst, 3758, -LJ_TISNUM, -LJ_TISNUM);
6600
dasm_put(Dst, 3763, -LJ_TISNUM, -LJ_TISNUM);
6602
dasm_put(Dst, 3768);
6606
dasm_put(Dst, 3771, -LJ_TISNUM, -LJ_TISNUM);
6608
dasm_put(Dst, 3776, -LJ_TISNUM, -LJ_TISNUM);
6610
dasm_put(Dst, 3781);
6613
if (LJ_TARGET_OSX) {
6614
dasm_put(Dst, 3784);
6616
dasm_put(Dst, 3786);
6617
if (LJ_TARGET_OSX) {
6618
dasm_put(Dst, 3789);
6620
dasm_put(Dst, 3791);
6623
dasm_put(Dst, 3794);
6624
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6627
dasm_put(Dst, 3797);
6630
dasm_put(Dst, 3800);
6633
dasm_put(Dst, 3803);
6639
dasm_put(Dst, 3806, -LJ_TISNUM, -LJ_TISNUM);
6641
dasm_put(Dst, 3811, -LJ_TISNUM, -LJ_TISNUM);
6643
dasm_put(Dst, 3816);
6647
dasm_put(Dst, 3819, -LJ_TISNUM, -LJ_TISNUM);
6649
dasm_put(Dst, 3824, -LJ_TISNUM, -LJ_TISNUM);
6651
dasm_put(Dst, 3829);
6655
dasm_put(Dst, 3832, -LJ_TISNUM, -LJ_TISNUM);
6657
dasm_put(Dst, 3837, -LJ_TISNUM, -LJ_TISNUM);
6659
dasm_put(Dst, 3842);
6662
if (LJ_TARGET_OSX) {
6663
dasm_put(Dst, 3845);
6665
dasm_put(Dst, 3847);
6666
if (LJ_TARGET_OSX) {
6667
dasm_put(Dst, 3850);
6669
dasm_put(Dst, 3852);
6673
dasm_put(Dst, 3860, Dt1(->base), Dt1(->base));
6676
/* -- Constant ops ------------------------------------------------------ */
6679
dasm_put(Dst, 3886, ~LJ_TSTR);
6683
dasm_put(Dst, 3898, ~LJ_TCDATA);
6687
dasm_put(Dst, 3910, ~LJ_TISNUM);
6690
dasm_put(Dst, 3921);
6693
dasm_put(Dst, 3931);
6696
dasm_put(Dst, 3941, ~LJ_TNIL);
6699
/* -- Upvalue and function ops ------------------------------------------ */
6702
dasm_put(Dst, 3960, offsetof(GCfuncL, uvptr), DtA(->v));
6705
dasm_put(Dst, 3976, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->closed), DtA(->v), LJ_GC_BLACK, -LJ_TISGCV, -(LJ_TISNUM - LJ_TISGCV), Dt4(->gch.marked), -GG_DISP2G, LJ_GC_WHITES);
6706
if (LJ_TARGET_OSX) {
6707
dasm_put(Dst, 4016);
6709
dasm_put(Dst, 4023);
6711
dasm_put(Dst, 4026);
6714
dasm_put(Dst, 4029, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G);
6715
if (LJ_TARGET_OSX) {
6716
dasm_put(Dst, 4065);
6718
dasm_put(Dst, 4072);
6720
dasm_put(Dst, 4075);
6723
dasm_put(Dst, 4078, offsetof(GCfuncL, uvptr), DtA(->v));
6726
dasm_put(Dst, 4095, offsetof(GCfuncL, uvptr), DtA(->v));
6730
dasm_put(Dst, 4111, Dt1(->openupval), Dt1(->base), Dt1(->base));
6734
dasm_put(Dst, 4134, Dt1(->base), Dt1(->base), ~LJ_TFUNC);
6737
/* -- Table ops --------------------------------------------------------- */
6741
if (op == BC_TDUP) {
6742
dasm_put(Dst, 4155);
6744
dasm_put(Dst, 4157, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
6745
if (op == BC_TNEW) {
6746
dasm_put(Dst, 4170);
6748
dasm_put(Dst, 4179);
6750
dasm_put(Dst, 4183, Dt1(->base), ~LJ_TTAB);
6755
dasm_put(Dst, 4201, Dt7(->env));
6756
if (op == BC_GGET) {
6757
dasm_put(Dst, 4207);
6759
dasm_put(Dst, 4210);
6764
dasm_put(Dst, 4213, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, -LJ_TSTR);
6767
dasm_put(Dst, 4270, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm));
6768
dasm_put(Dst, 4330, 1<<MM_index);
6771
dasm_put(Dst, 4337, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
6775
dasm_put(Dst, 4380, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
6776
dasm_put(Dst, 4440, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR);
6779
dasm_put(Dst, 4461, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), DtB(->key), DtB(->val.it), DtB(->next), -LJ_TSTR, Dt6(->marked), -LJ_TNIL, LJ_GC_BLACK, DtB(->val));
6780
dasm_put(Dst, 4519, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, ~LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
6781
dasm_put(Dst, 4572, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
6784
dasm_put(Dst, 4581, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
6785
dasm_put(Dst, 4638, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
6789
dasm_put(Dst, 4647, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base));
6790
if (LJ_TARGET_OSX) {
6791
dasm_put(Dst, 4692, Dt1(->base));
6793
dasm_put(Dst, 4695, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
6796
/* -- Calls and vararg handling ----------------------------------------- */
6799
dasm_put(Dst, 4711);
6802
dasm_put(Dst, 4717, -LJ_TFUNC, Dt7(->field_pc));
6806
dasm_put(Dst, 4737);
6809
dasm_put(Dst, 4742, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP);
6810
dasm_put(Dst, 4803, FRAME_TYPE);
6814
dasm_put(Dst, 4814, -LJ_TFUNC, Dt7(->field_pc));
6820
dasm_put(Dst, 4838, Dt6(->asize), Dt6(->array), -LJ_TNIL, ~LJ_TISNUM, Dt6(->hmask), Dt6(->node), DtB(->val), -LJ_TNIL, DtB(->key));
6824
dasm_put(Dst, 4903, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC);
6828
dasm_put(Dst, 4942, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base));
6831
/* -- Returns ----------------------------------------------------------- */
6834
dasm_put(Dst, 5014);
6838
dasm_put(Dst, 5021, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP);
6841
case BC_RET0: case BC_RET1:
6842
dasm_put(Dst, 5086, FRAME_TYPE, FRAME_VARG);
6843
if (op == BC_RET1) {
6844
dasm_put(Dst, 5097);
6846
dasm_put(Dst, 5099);
6847
if (op == BC_RET1) {
6848
dasm_put(Dst, 5102);
6850
dasm_put(Dst, 5104, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL);
6853
/* -- Loops and branches ------------------------------------------------ */
6858
dasm_put(Dst, 5130);
6869
vk = (op == BC_IFORL || op == BC_JFORL);
6870
dasm_put(Dst, 5132);
6872
dasm_put(Dst, 5135, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
6874
dasm_put(Dst, 5153, -LJ_TISNUM);
6875
if (op == BC_IFORL) {
6876
dasm_put(Dst, 5161);
6878
dasm_put(Dst, 5163);
6880
dasm_put(Dst, 5165);
6882
dasm_put(Dst, 5170);
6883
if (op == BC_FORI) {
6884
dasm_put(Dst, 5172);
6885
} else if (op == BC_JFORI) {
6886
dasm_put(Dst, 5174);
6887
} else if (op == BC_IFORL) {
6888
dasm_put(Dst, 5176);
6890
dasm_put(Dst, 5178);
6893
dasm_put(Dst, 5180);
6895
dasm_put(Dst, 5182);
6897
dasm_put(Dst, 5192);
6899
dasm_put(Dst, 5194);
6901
dasm_put(Dst, 5196);
6903
dasm_put(Dst, 5200, -LJ_TISNUM, -LJ_TISNUM);
6905
dasm_put(Dst, 5212);
6907
dasm_put(Dst, 5221);
6908
if (op == BC_FORI) {
6909
dasm_put(Dst, 5225);
6910
} else if (op == BC_JFORI) {
6911
dasm_put(Dst, 5227);
6912
} else if (op == BC_IFORL) {
6913
dasm_put(Dst, 5229);
6915
dasm_put(Dst, 5231);
6917
dasm_put(Dst, 5233);
6919
dasm_put(Dst, 5239);
6921
dasm_put(Dst, 5244);
6926
dasm_put(Dst, 5250);
6935
dasm_put(Dst, 5252);
6936
if (op == BC_JITERL) {
6937
dasm_put(Dst, 5254);
6939
dasm_put(Dst, 5256, -LJ_TNIL);
6941
dasm_put(Dst, 5262);
6946
dasm_put(Dst, 5269);
6951
dasm_put(Dst, 5271);
6956
dasm_put(Dst, 5278);
6961
dasm_put(Dst, 5280);
6964
/* -- Function headers -------------------------------------------------- */
6968
dasm_put(Dst, 5289);
6970
case BC_FUNCV: /* NYI: compiled vararg functions. */
6978
dasm_put(Dst, 5291, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), ~LJ_TNIL);
6979
if (op == BC_JFUNCF) {
6980
dasm_put(Dst, 5309);
6982
dasm_put(Dst, 5311);
6984
dasm_put(Dst, 5316);
6991
dasm_put(Dst, 5322);
6992
break; /* NYI: compiled vararg functions. */
6995
dasm_put(Dst, 5324, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
7000
if (op == BC_FUNCC) {
7001
dasm_put(Dst, 5365, Dt8(->f));
7003
dasm_put(Dst, 5368, DISPATCH_GL(wrapf));
7005
dasm_put(Dst, 5371, Dt1(->maxstack), Dt1(->base), Dt1(->top));
7006
if (op == BC_FUNCCW) {
7007
dasm_put(Dst, 5381, Dt8(->f));
7009
dasm_put(Dst, 5384, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
7012
/* ---------------------------------------------------------------------- */
7015
fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]);
7021
static int build_backend(BuildCtx *ctx)
7025
dasm_growpc(Dst, BC__MAX);
7027
build_subroutines(ctx);
7029
dasm_put(Dst, 5406);
7030
for (op = 0; op < BC__MAX; op++)
7031
build_ins(ctx, (BCOp)op, op);
7036
/* Emit pseudo frame-info for all assembler functions. */
7037
static void emit_asm_debug(BuildCtx *ctx)
7040
switch (ctx->mode) {
7042
fprintf(ctx->fp, "\t.section .debug_frame,\"\",%%progbits\n");
7045
"\t.long .LECIE0-.LSCIE0\n"
7047
"\t.long 0xffffffff\n"
7052
"\t.byte 0xe\n" /* Return address is in lr. */
7053
"\t.byte 0xc\n\t.uleb128 0xd\n\t.uleb128 0\n" /* def_cfa sp */
7058
"\t.long .LEFDE0-.LASFDE0\n"
7060
"\t.long .Lframe0\n"
7063
"\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
7064
"\t.byte 0x8e\n\t.uleb128 1\n", /* Restore lr. */
7065
(int)ctx->codesz, CFRAME_SIZE);
7066
for (i = 11; i >= 4; i--) /* Restore r4-r11. */
7067
fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 2+(11-i));
7071
/* NYI: emit ARM.exidx. */