# HG changeset patch # User Shinji KONO # Date 1544277475 -32400 # Node ID e3cd4e21b5601d290e5279829469364b6a5d6738 # Parent 6e8bd93cbb96072c58c1d12a79e6f8b7803c37b9 add --cbc option diff -r 6e8bd93cbb96 -r e3cd4e21b560 CbCLLVMMakefile --- a/CbCLLVMMakefile Sun Dec 02 11:30:34 2018 +0900 +++ b/CbCLLVMMakefile Sat Dec 08 22:57:55 2018 +0900 @@ -1,8 +1,10 @@ -CC = /mnt/dalmore-home//one/src/crosscompilers/cbc_llvm_build/bin/clang -LD = /mnt/dalmore-home//one/src/crosscompilers/cbc_llvm_build/bin/clang +CC = clang +CBC = /Users/kono/src/cbclang_build/bin/clang +# CBC = /Users/kono/src/cbcgcc_build/gcc/xgcc -B /Users/kono/src/cbcgcc_build/gcc +LD = clang AR = ar MAKE = make -PERL = /usr/bin/perl +PERL = perl RM = rm -f CAT = cat SHELL = /bin/sh @@ -15,7 +17,7 @@ MINGW_UNICODE = -CONFIG = --cc /mnt/dalmore-home//one/src/crosscompilers/cbc_llvm_build/bin/clang --debug --no-optimize --compiler clang --prefix=/mnt/dalmore-home/one/src/Perl6/llvm/build_perl6 +CONFIG = ADDCONFIG = TRACING = 0 @@ -36,14 +38,15 @@ endif -PREFIX = /mnt/dalmore-home/one/src/Perl6/llvm/build_perl6 -BINDIR = /mnt/dalmore-home/one/src/Perl6/llvm/build_perl6/bin -LIBDIR = /mnt/dalmore-home/one/src/Perl6/llvm/build_perl6/lib -MASTDIR = /mnt/dalmore-home/one/src/Perl6/llvm/build_perl6/share/nqp/lib/MAST +PREFIX = /Users/kono/src/Perl6/MoarVM/install +BINDIR = /Users/kono/src/Perl6/MoarVM/install/bin +LIBDIR = /Users/kono/src/Perl6/MoarVM/install/lib +MASTDIR = /Users/kono/src/Perl6/MoarVM/install/share/nqp/lib/MAST -PKGCONFIGDIR = /mnt/dalmore-home/one/src/Perl6/llvm/build_perl6/share/pkgconfig +PKGCONFIGDIR = /Users/kono/src/Perl6/MoarVM/install/share/pkgconfig -CFLAGS = -fno-omit-frame-pointer -g3 -Wno-logical-op-parentheses -D_REENTRANT -D_FILE_OFFSET_BITS=64 -fPIC -DDEBUG_HELPERS -DMVM_TRACING=$(TRACING) -DMVM_CGOTO=$(CGOTO) -DMVM_RDTSCP=$(RDTSCP) +# CFLAGS = -fno-omit-frame-pointer -fno-optimize-sibling-calls -O3 -DNDEBUG -Wno-logical-op-parentheses -D_DARWIN_USE_64_BIT_INODE=1 -DMVM_TRACING=$(TRACING) -DMVM_CGOTO=$(CGOTO) -DMVM_RDTSCP=$(RDTSCP) +CFLAGS = -O0 -g -DNDEBUG -Wno-logical-op-parentheses -D_DARWIN_USE_64_BIT_INODE=1 -DMVM_TRACING=$(TRACING) -DMVM_CGOTO=$(CGOTO) -DMVM_RDTSCP=$(RDTSCP) CINCLUDES = -I3rdparty/libuv/include -I3rdparty/libuv/src -I3rdparty/libatomicops/src -I3rdparty/libtommath -I3rdparty/dyncall/dynload -I3rdparty/dyncall/dyncall -I3rdparty/dyncall/dyncallback \ -I3rdparty/sha1 \ -I3rdparty/tinymt \ @@ -51,8 +54,8 @@ -I3rdparty/cmp \ -I3rdparty \ -Isrc -LDFLAGS = -g3 -Wl,-rpath,"//mnt/dalmore-home/one/src/Perl6/llvm/build_perl6/lib" -LDLIBS = -lm -lpthread -lrt -ldl +LDFLAGS = -g -DNDEBUG -Wl,-no_pie,-rpath,"//Users/kono/src/Perl6/MoarVM/install/lib" -L/usr/local/opt/libffi/lib +LDLIBS = -lpthread MAIN_LIBS = -L. -lmoar DLL_LIBS = 3rdparty/cmp/libcmp.a 3rdparty/dyncall/dyncall/libdyncall_s.a 3rdparty/dyncall/dyncallback/libdyncallback_s.a 3rdparty/dyncall/dynload/libdynload_s.a 3rdparty/libatomicops/src/libatomic_ops.a 3rdparty/tinymt/libtinymt.a 3rdparty/sha1/libsha1.a 3rdparty/libtommath/libtommath.a 3rdparty/libuv/libuv.a $(LDLIBS) ARFLAGS = rcs @@ -411,8 +414,7 @@ src/gen/config.h \ src/debug/debugserver.h \ 3rdparty/uthash.h \ - 3rdparty/cmp/cmp.h \ - src/core/oplables-cbc-codes.h + 3rdparty/cmp/cmp.h UV_UNIX = 3rdparty/libuv/src/fs-poll.o \ 3rdparty/libuv/src/inet.o \ @@ -471,7 +473,7 @@ UV_AIX = 3rdparty/libuv/src/unix/aix.o \ $(UV_UNIX) -UV_OBJECTS = $(UV_LINUX) +UV_OBJECTS = $(UV_DARWIN) TOM_OBJECTS = 3rdparty/libtommath/bn_error.o 3rdparty/libtommath/bn_fast_mp_invmod.o 3rdparty/libtommath/bn_fast_mp_montgomery_reduce.o 3rdparty/libtommath/bn_fast_s_mp_mul_digs.o 3rdparty/libtommath/bn_fast_s_mp_mul_high_digs.o 3rdparty/libtommath/bn_fast_s_mp_sqr.o 3rdparty/libtommath/bn_mp_2expt.o 3rdparty/libtommath/bn_mp_abs.o 3rdparty/libtommath/bn_mp_add.o 3rdparty/libtommath/bn_mp_add_d.o 3rdparty/libtommath/bn_mp_addmod.o 3rdparty/libtommath/bn_mp_and.o 3rdparty/libtommath/bn_mp_clamp.o 3rdparty/libtommath/bn_mp_clear.o 3rdparty/libtommath/bn_mp_clear_multi.o 3rdparty/libtommath/bn_mp_cmp.o 3rdparty/libtommath/bn_mp_cmp_d.o 3rdparty/libtommath/bn_mp_cmp_mag.o 3rdparty/libtommath/bn_mp_cnt_lsb.o 3rdparty/libtommath/bn_mp_copy.o 3rdparty/libtommath/bn_mp_count_bits.o 3rdparty/libtommath/bn_mp_div.o 3rdparty/libtommath/bn_mp_div_2.o 3rdparty/libtommath/bn_mp_div_2d.o 3rdparty/libtommath/bn_mp_div_3.o 3rdparty/libtommath/bn_mp_div_d.o 3rdparty/libtommath/bn_mp_dr_is_modulus.o 3rdparty/libtommath/bn_mp_dr_reduce.o 3rdparty/libtommath/bn_mp_dr_setup.o 3rdparty/libtommath/bn_mp_exch.o 3rdparty/libtommath/bn_mp_export.o 3rdparty/libtommath/bn_mp_expt_d.o 3rdparty/libtommath/bn_mp_expt_d_ex.o 3rdparty/libtommath/bn_mp_exptmod.o 3rdparty/libtommath/bn_mp_exptmod_fast.o 3rdparty/libtommath/bn_mp_exteuclid.o 3rdparty/libtommath/bn_mp_fread.o 3rdparty/libtommath/bn_mp_fwrite.o 3rdparty/libtommath/bn_mp_gcd.o 3rdparty/libtommath/bn_mp_get_int.o 3rdparty/libtommath/bn_mp_get_long.o 3rdparty/libtommath/bn_mp_get_long_long.o 3rdparty/libtommath/bn_mp_grow.o 3rdparty/libtommath/bn_mp_import.o 3rdparty/libtommath/bn_mp_init.o 3rdparty/libtommath/bn_mp_init_copy.o 3rdparty/libtommath/bn_mp_init_multi.o 3rdparty/libtommath/bn_mp_init_set.o 3rdparty/libtommath/bn_mp_init_set_int.o 3rdparty/libtommath/bn_mp_init_size.o 3rdparty/libtommath/bn_mp_invmod.o 3rdparty/libtommath/bn_mp_invmod_slow.o 3rdparty/libtommath/bn_mp_is_square.o 3rdparty/libtommath/bn_mp_jacobi.o 3rdparty/libtommath/bn_mp_karatsuba_mul.o 3rdparty/libtommath/bn_mp_karatsuba_sqr.o 3rdparty/libtommath/bn_mp_lcm.o 3rdparty/libtommath/bn_mp_lshd.o 3rdparty/libtommath/bn_mp_mod.o 3rdparty/libtommath/bn_mp_mod_2d.o 3rdparty/libtommath/bn_mp_mod_d.o 3rdparty/libtommath/bn_mp_montgomery_calc_normalization.o 3rdparty/libtommath/bn_mp_montgomery_reduce.o 3rdparty/libtommath/bn_mp_montgomery_setup.o 3rdparty/libtommath/bn_mp_mul.o 3rdparty/libtommath/bn_mp_mul_2.o 3rdparty/libtommath/bn_mp_mul_2d.o 3rdparty/libtommath/bn_mp_mul_d.o 3rdparty/libtommath/bn_mp_mulmod.o 3rdparty/libtommath/bn_mp_n_root.o 3rdparty/libtommath/bn_mp_n_root_ex.o 3rdparty/libtommath/bn_mp_neg.o 3rdparty/libtommath/bn_mp_or.o 3rdparty/libtommath/bn_mp_prime_fermat.o 3rdparty/libtommath/bn_mp_prime_is_divisible.o 3rdparty/libtommath/bn_mp_prime_is_prime.o 3rdparty/libtommath/bn_mp_prime_miller_rabin.o 3rdparty/libtommath/bn_mp_prime_next_prime.o 3rdparty/libtommath/bn_mp_prime_rabin_miller_trials.o 3rdparty/libtommath/bn_mp_prime_random_ex.o 3rdparty/libtommath/bn_mp_radix_size.o 3rdparty/libtommath/bn_mp_radix_smap.o 3rdparty/libtommath/bn_mp_rand.o 3rdparty/libtommath/bn_mp_read_radix.o 3rdparty/libtommath/bn_mp_read_signed_bin.o 3rdparty/libtommath/bn_mp_read_unsigned_bin.o 3rdparty/libtommath/bn_mp_reduce.o 3rdparty/libtommath/bn_mp_reduce_2k.o 3rdparty/libtommath/bn_mp_reduce_2k_l.o 3rdparty/libtommath/bn_mp_reduce_2k_setup.o 3rdparty/libtommath/bn_mp_reduce_2k_setup_l.o 3rdparty/libtommath/bn_mp_reduce_is_2k.o 3rdparty/libtommath/bn_mp_reduce_is_2k_l.o 3rdparty/libtommath/bn_mp_reduce_setup.o 3rdparty/libtommath/bn_mp_rshd.o 3rdparty/libtommath/bn_mp_set.o 3rdparty/libtommath/bn_mp_set_int.o 3rdparty/libtommath/bn_mp_set_long.o 3rdparty/libtommath/bn_mp_set_long_long.o 3rdparty/libtommath/bn_mp_shrink.o 3rdparty/libtommath/bn_mp_signed_bin_size.o 3rdparty/libtommath/bn_mp_sqr.o 3rdparty/libtommath/bn_mp_sqrmod.o 3rdparty/libtommath/bn_mp_sqrt.o 3rdparty/libtommath/bn_mp_sqrtmod_prime.o 3rdparty/libtommath/bn_mp_sub.o 3rdparty/libtommath/bn_mp_sub_d.o 3rdparty/libtommath/bn_mp_submod.o 3rdparty/libtommath/bn_mp_to_signed_bin.o 3rdparty/libtommath/bn_mp_to_signed_bin_n.o 3rdparty/libtommath/bn_mp_to_unsigned_bin.o 3rdparty/libtommath/bn_mp_to_unsigned_bin_n.o 3rdparty/libtommath/bn_mp_toom_mul.o 3rdparty/libtommath/bn_mp_toom_sqr.o 3rdparty/libtommath/bn_mp_toradix.o 3rdparty/libtommath/bn_mp_toradix_n.o 3rdparty/libtommath/bn_mp_unsigned_bin_size.o 3rdparty/libtommath/bn_mp_xor.o 3rdparty/libtommath/bn_mp_zero.o 3rdparty/libtommath/bn_prime_tab.o 3rdparty/libtommath/bn_reverse.o 3rdparty/libtommath/bn_s_mp_add.o 3rdparty/libtommath/bn_s_mp_exptmod.o 3rdparty/libtommath/bn_s_mp_mul_digs.o 3rdparty/libtommath/bn_s_mp_mul_high_digs.o 3rdparty/libtommath/bn_s_mp_sqr.o 3rdparty/libtommath/bn_s_mp_sub.o 3rdparty/libtommath/bncore.o @@ -482,7 +484,7 @@ DYNASM_SCRIPTS = 3rdparty/dynasm/dynasm.lua 3rdparty/dynasm/dasm_x86.lua DYNASM_HEADERS = 3rdparty/dynasm/dasm_proto.h 3rdparty/dynasm/dasm_x86.h -.SUFFIXES: .c .cbc .o .i .s .dasc .expr .tile +.SUFFIXES: .cbc .c .o .i .s .dasc .expr .tile all: moar pkgconfig/moar.pc @@ -491,8 +493,8 @@ $(CP) moar "$(DESTDIR)$(BINDIR)" $(CHMOD) 755 "$(DESTDIR)$(BINDIR)/moar" $(MKPATH) "$(DESTDIR)$(LIBDIR)" - $(RM_F) "$(DESTDIR)$(LIBDIR)/libmoar.so" - $(CP) libmoar.so "$(DESTDIR)$(LIBDIR)" + $(RM_F) "$(DESTDIR)$(LIBDIR)/libmoar.dylib" + $(CP) libmoar.dylib libmoar.dylib "$(DESTDIR)$(LIBDIR)" $(MKPATH) "$(DESTDIR)$(MASTDIR)" $(CP) lib/MAST/Nodes.nqp "$(DESTDIR)$(MASTDIR)" $(CP) lib/MAST/Ops.nqp "$(DESTDIR)$(MASTDIR)" @@ -560,7 +562,7 @@ $(CP) 3rdparty/dyncall/dyncallback/*.h $(DESTDIR)$(PREFIX)/include/dyncall -lib: libmoar.so +lib: libmoar.dylib help: @$(CAT) build/help.txt @@ -575,7 +577,7 @@ clangcheck gcccheck: @$(MAKE) --no-print-directory -f tools/check.mk $@ -moar: $(MAIN_OBJECTS) libmoar.so +moar: $(MAIN_OBJECTS) libmoar.dylib $(MSG) linking $@ $(CMD)$(LD) -o $@ $(LDFLAGS) $(MINGW_UNICODE) $(MAIN_OBJECTS) $(MAIN_LIBS) @@ -583,9 +585,9 @@ $(MSG) linking $@ $(CMD)$(AR) $(ARFLAGS) $@ $(OBJECTS) $(NOOUT) -libmoar.so: $(OBJECTS) $(THIRDPARTY) +libmoar.dylib: $(OBJECTS) $(THIRDPARTY) $(MSG) linking $@ - $(CMD)$(LD) -o $@ $(LDFLAGS) -shared -fPIC $(OBJECTS) $(DLL_LIBS) + $(CMD)$(LD) -o $@ $(LDFLAGS) -dynamiclib -install_name "/Users/kono/src/Perl6/MoarVM/install/lib/libmoar.dylib" $(OBJECTS) $(DLL_LIBS) libuv: 3rdparty/libuv/libuv.a @@ -593,35 +595,36 @@ tracing: $(MSG) enable tracing dispatch - -$(CMD)$(RM) src/main.o src/core/cbc-interp.o + -$(CMD)$(RM) src/main.o src/core/interp.o $(CMD)$(MAKE) TRACING=1 CGOTO=0 NOISY="$(NOISY)" cgoto: $(MSG) enable computed-goto dispatch - -$(CMD)$(RM) src/main.o src/core/cbc-interp.o + -$(CMD)$(RM) src/main.o src/core/interp.o $(CMD)$(MAKE) TRACING=0 CGOTO=1 NOISY="$(NOISY)" switch no-tracing no-cgoto: $(MSG) enable regular dispatch - -$(CMD)$(RM) src/main.o src/core/cbc-interp.o + -$(CMD)$(RM) src/main.o src/core/interp.o $(CMD)$(MAKE) TRACING=0 CGOTO=0 NOISY="$(NOISY)" # objflags can include -DMVM_BUILD_SHARED which affects pre-processed source .c.i: $(MSG) pre-processing $@ - $(CMD)$(CC) -E $(CFLAGS) -DMVM_BUILD_SHARED -fPIC $(CINCLUDES) > $@ $*.c + $(CMD)$(CC) -E $(CFLAGS) -DMVM_BUILD_SHARED $(CINCLUDES) > $@ $*.c .c.s: $(MSG) generating assembler for $@ - $(CMD)$(CC) -S $(CFLAGS) -DMVM_BUILD_SHARED -fPIC $(CINCLUDES) -o $@ $*.c + $(CMD)$(CC) -S $(CFLAGS) -DMVM_BUILD_SHARED $(CINCLUDES) -o $@ $*.c .c.o: $(MSG) compiling $@ - $(CMD)$(CC) -c $(CFLAGS) -DMVM_BUILD_SHARED -fPIC $(CINCLUDES) -o $@ $*.c + $(CMD)$(CC) -c $(CFLAGS) -DMVM_BUILD_SHARED $(CINCLUDES) -o $@ $*.c .cbc.o: $(MSG) compiling $@ - $(CMD)$(CC) -c $(CFLAGS) -DMVM_BUILD_SHARED -fPIC $(CINCLUDES) -o $@ $*.cbc + $(CMD)$(CBC) -c $(CFLAGS) -DMVM_BUILD_SHARED $(CINCLUDES) -o $@ $*.cbc + src/main.o: src/main.c $(MSG) compiling $@ @@ -666,7 +669,7 @@ 3rdparty/libuv/libuv.a: $(UV_OBJECTS) $(MSG) linking $@ - $(CMD)$(AR) $(ARFLAGS) $@ $(UV_LINUX) $(NOOUT) + $(CMD)$(AR) $(ARFLAGS) $@ $(UV_DARWIN) $(NOOUT) 3rdparty/libatomicops/src/libatomic_ops.a: $(MSG) linking $@ @@ -706,7 +709,7 @@ $(MSG) remove auxiliary files -$(CMD)@: $(NOOUT) $(NOERR) $(MSG) remove 3rdparty files - -$(CMD)$(RM) 3rdparty/libuv/libuv.a $(UV_LINUX) $(NOOUT) $(NOERR) + -$(CMD)$(RM) 3rdparty/libuv/libuv.a $(UV_DARWIN) $(NOOUT) $(NOERR) -$(CMD)cd 3rdparty/libatomicops/src && $(MAKE) distclean $(NOOUT) $(NOERR) -$(CMD)$(RM) 3rdparty/libtommath/libtommath.a 3rdparty/libtommath/*.o $(NOOUT) $(NOERR) -$(CMD)$(RM) 3rdparty/sha1/libsha1.a 3rdparty/sha1/*.o $(NOOUT) $(NOERR) @@ -715,7 +718,7 @@ distclean: realclean $(MSG) remove executable and libraries - -$(CMD)$(RM) moar libmoar.a libmoar.so $(NOOUT) $(NOERR) + -$(CMD)$(RM) moar libmoar.a libmoar.dylib $(NOOUT) $(NOERR) $(MSG) remove configuration and generated files -$(CMD)$(RM) Makefile src/gen/config.h src/gen/config.c src/strings/unicode.c \ tools/check.mk 3rdparty/libatomicops/config.log 3rdparty/libatomicops/config.status $(NOOUT) $(NOERR) diff -r 6e8bd93cbb96 -r e3cd4e21b560 src/core/cbc-interp.cbc --- a/src/core/cbc-interp.cbc Sun Dec 02 11:30:34 2018 +0900 +++ b/src/core/cbc-interp.cbc Sat Dec 08 22:57:55 2018 +0900 @@ -57,10 +57,18 @@ static int tracing_enabled = 0; static int op_count=0; +static int cbctrace=0; + +// #define ddd(x) printf("count=%d op=%d cur_op=%p reg[0]=%p reg[2]=%p \n", op_count++, *i->cur_op, i->cur_op, GET_REG(i->cur_op, 0,i).o, GET_REG(i->cur_op, 2,i).o) +#define ddd(x) printf("count=%d op=%d\n", op_count++, *(MVMuint16 *)i->cur_op) +// #define ddd(x) 0 __code cbc_next(INTERP i){ __code (*c)(INTERP); - printf("count=%d op=%d\n", op_count++, *i->cur_op); + if (cbctrace) + ddd(0); + else op_count++; + if (op_count>343724) cbctrace = 1; c = CODES[NEXT_OP(i)]; i->tc->gc_status=0; goto c(i); @@ -6454,53 +6462,19 @@ /* This is the interpreter run loop. We have one of these per thread. */ -void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContext *, void *), void *invoke_data) { -#if MVM_CGOTO -#endif +void MVM_interp_run_cbc(MVMThreadContext *tc) { - INTER inter = {0,NULL,NULL,NULL,NULL,NULL,tc}; + INTER inter = {0,*tc->interp_cur_op,*tc->interp_bytecode_start,*tc->interp_reg_base,*tc->interp_cu,NULL,tc}; INTERP i = &inter; - - /* Stash addresses of current op, register base and SC deref base - * in the TC; this will be used by anything that needs to switch - * the current place we're interpreting. */ tc->interp_cur_op = &i->cur_op; tc->interp_bytecode_start = &i->bytecode_start; tc->interp_reg_base = &i->reg_base; tc->interp_cu = &i->cu; - /* With everything set up, do the initial invocation (exactly what this does - * varies depending on if this is starting a new thread or is the top-level - * program entry point). */ - initial_invoke(tc, invoke_data); - - /* Set jump point, for if we arrive back in the interpreter from an - * exception thrown from C code. */ - setjmp(tc->interp_jump); - /* Enter runloop. */ runloop: { - //MVMuint16 op; - -#if MVM_TRACING - if (tracing_enabled) { - char *trace_line; - trace_line = MVM_exception_backtrace_line(tc, tc->cur_frame, 0, i->cur_op); - fprintf(stderr, "Op %d%s\n", (int)*((MVMuint16 *)i->cur_op), trace_line); - /* slow tracing is slow. Feel free to speed it. */ - MVM_free(trace_line); - } -#endif - - /* The ops should be in the same order here as in the oplist file, so - * the compiler can can optimise the switch properly */ - //DISPATCH(NEXT_OP(i)) - //goto (CODES[(i->op = *(MVMuint16 *)(i->cur_op), i->cur_op += 2, i->op)])(i); MVM_interp_run1(i); } } -void MVM_interp_enable_tracing() { - tracing_enabled = 1; -} diff -r 6e8bd93cbb96 -r e3cd4e21b560 src/core/interp.c --- a/src/core/interp.c Sun Dec 02 11:30:34 2018 +0900 +++ b/src/core/interp.c Sat Dec 08 22:57:55 2018 +0900 @@ -42,7 +42,9 @@ #define GET_UI32(pc, idx) *((MVMuint32 *)(pc + idx)) #define GET_N32(pc, idx) *((MVMnum32 *)(pc + idx)) -#define NEXT_OP (op = *(MVMuint16 *)(cur_op), cur_op += 2, op) +#define ddd(x) (op_count++>343724?printf("count=%d op=%d\n", op_count, *(MVMuint16 *)cur_op):0) + +#define NEXT_OP (ddd(0), op = *(MVMuint16 *)(cur_op), cur_op += 2, op) #if MVM_CGOTO #define DISPATCH(op) @@ -56,6 +58,19 @@ static int tracing_enabled = 0; +int use_cbc = 0; +extern void MVM_interp_run_cbc(MVMThreadContext *tc); +typedef struct interp { + MVMuint16 op; + MVMuint8 *cur_op; + MVMuint8 *bytecode_start; + MVMRegister *reg_base; + MVMCompUnit *cu; + MVMCallsite *cur_callsite; + MVMThreadContext *tc; + } INTER,*INTERP; + + /* This is the interpreter run loop. We have one of these per thread. */ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContext *, void *), void *invoke_data) { #if MVM_CGOTO @@ -96,6 +111,11 @@ * exception thrown from C code. */ setjmp(tc->interp_jump); + if (use_cbc) { + MVM_interp_run_cbc(tc); + return; + } + /* Enter runloop. */ runloop: { MVMuint16 op; diff -r 6e8bd93cbb96 -r e3cd4e21b560 src/main.c --- a/src/main.c Sun Dec 02 11:30:34 2018 +0900 +++ b/src/main.c Sat Dec 08 22:57:55 2018 +0900 @@ -51,7 +51,8 @@ OPT_EXECNAME, OPT_LIBPATH, - OPT_DEBUGPORT + OPT_DEBUGPORT, + OPT_CBC }; static const char *const FLAGS[] = { @@ -129,10 +130,14 @@ return OPT_EXECNAME; else if (starts_with(arg, "--debug-port=")) return OPT_DEBUGPORT; + else if (starts_with(arg, "--cbc")) + return OPT_CBC; else return UNKNOWN_FLAG; } +extern int use_cbc; + #ifndef _WIN32 int main(int argc, char *argv[]) #else @@ -170,6 +175,10 @@ dump = 1; continue; + case OPT_CBC: + use_cbc = 1; + continue; + case FLAG_FULL_CLEANUP: full_cleanup = 1; continue;