Skip to content

Instantly share code, notes, and snippets.

@MasterDuke17
Last active November 2, 2021 07:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MasterDuke17/82c5adac973524490488bad4538f4af7 to your computer and use it in GitHub Desktop.
Save MasterDuke17/82c5adac973524490488bad4538f4af7 to your computer and use it in GitHub Desktop.
diff --git src/6model/reprs/MVMContext.c src/6model/reprs/MVMContext.c
index 3997f4c42..a621e2824 100644
--- src/6model/reprs/MVMContext.c
+++ src/6model/reprs/MVMContext.c
@@ -332,6 +332,10 @@ static MVMint32 traversal_exists(MVMThreadContext *tc, MVMFrame *base, MVMuint8
/* Try to get a context with the specified traversal applied. Ensures that the
* traversal would lead to a result, and returns a NULL context if not. */
MVMObject * MVM_context_apply_traversal(MVMThreadContext *tc, MVMContext *ctx, MVMuint8 traversal) {
+ if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext)
+ MVM_exception_throw_adhoc(tc, "ctx* ops needs an MVMContext, got %s (%s)",
+ REPR(ctx)->name, MVM_6model_get_debug_name(tc, (MVMObject *)ctx));
+
/* Ensure we've got a traversable context. */
if (!ctx->body.traversable)
MVM_exception_throw_adhoc(tc,
diff --git src/core/interp.c src/core/interp.c
index 313ef350b..dffa81f6a 100644
--- src/core/interp.c
+++ src/core/interp.c
@@ -3053,8 +3053,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex
goto NEXT;
OP(ctxouter): {
MVMObject *ctx = GET_REG(cur_op, 2).o;
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext)
- MVM_exception_throw_adhoc(tc, "ctxouter needs an MVMContext");
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx,
MVM_CTX_TRAV_OUTER);
cur_op += 4;
@@ -3062,8 +3060,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex
}
OP(ctxcaller): {
MVMObject *ctx = GET_REG(cur_op, 2).o;
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext)
- MVM_exception_throw_adhoc(tc, "ctxcaller needs an MVMContext");
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx,
MVM_CTX_TRAV_CALLER);
cur_op += 4;
@@ -3889,9 +3885,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex
MVM_exception_throw_adhoc(tc, "The multi-dispatch cache is superceded by the general dispatch mechanism");
OP(ctxouterskipthunks): {
MVMObject *ctx = GET_REG(cur_op, 2).o;
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext)
- MVM_exception_throw_adhoc(tc, "ctxouter needs an MVMContext, got %s (%s)",
- REPR(ctx)->name, MVM_6model_get_debug_name(tc, ctx));
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx,
MVM_CTX_TRAV_OUTER_SKIP_THUNKS);
cur_op += 4;
@@ -3899,9 +3892,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex
}
OP(ctxcallerskipthunks): {
MVMObject *ctx = GET_REG(cur_op, 2).o;
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext)
- MVM_exception_throw_adhoc(tc, "ctxcallerskipthunks needs an MVMContext, got %s (%s)",
- REPR(ctx)->name, MVM_6model_get_debug_name(tc, ctx));
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx,
MVM_CTX_TRAV_CALLER_SKIP_THUNKS);
cur_op += 4;
diff --git src/jit/graph.c src/jit/graph.c
index 8f4254897..44808e77d 100644
--- src/jit/graph.c
+++ src/jit/graph.c
@@ -441,6 +441,11 @@ static void * op_to_func(MVMThreadContext *tc, MVMint16 opcode) {
case MVM_OP_scsetobj: return MVM_sc_set_object_op;
case MVM_OP_scsetcode: return MVM_sc_set_code_op;
+ case MVM_OP_ctxouter:
+ case MVM_OP_ctxcaller:
+ case MVM_OP_ctxouterskipthunks:
+ case MVM_OP_ctxcallerskipthunks: return MVM_context_apply_traversal;
+
default:
MVM_oops(tc, "JIT: No function for op %d in op_to_func (%s)", opcode, MVM_op_get_op(opcode)->name);
}
@@ -1783,7 +1788,6 @@ start:
case MVM_OP_sp_getspeshslot:
case MVM_OP_ctx:
case MVM_OP_ctxlexpad:
- case MVM_OP_ctxcallerskipthunks:
case MVM_OP_curcode:
case MVM_OP_getcode:
case MVM_OP_sp_fastcreate:
@@ -4011,6 +4015,24 @@ start:
jg_append_call_c(tc, jg, op_to_func(tc, op), 4, args, MVM_JIT_RV_VOID, -1);
break;
}
+ case MVM_OP_ctxouter:
+ case MVM_OP_ctxcaller:
+ case MVM_OP_ctxouterskipthunks:
+ case MVM_OP_ctxcallerskipthunks: {
+ MVMint16 dst = ins->operands[0].reg.orig;
+ MVMint16 ctx = ins->operands[1].reg.orig;
+ MVMJitCallArg args[] = { { MVM_JIT_INTERP_VAR, { MVM_JIT_INTERP_TC } },
+ { MVM_JIT_REG_VAL, { ctx } },
+ { MVM_JIT_LITERAL, { op == MVM_OP_ctxouter
+ ? MVM_CTX_TRAV_OUTER
+ : op == MVM_OP_ctxcaller
+ ? MVM_CTX_TRAV_CALLER
+ : op == MVM_OP_ctxouterskipthunks
+ ? MVM_CTX_TRAV_OUTER_SKIP_THUNKS
+ : MVM_CTX_TRAV_CALLER_SKIP_THUNKS } } };
+ jg_append_call_c(tc, jg, op_to_func(tc, op), 3, args, MVM_JIT_RV_PTR, dst);
+ break;
+ }
default: {
/* Check if it's an extop. */
MVMint32 emitted_extop = 0;
diff --git src/jit/x64/emit.dasc src/jit/x64/emit.dasc
index e5760b4a4..54f120639 100644
--- src/jit/x64/emit.dasc
+++ src/jit/x64/emit.dasc
@@ -1001,29 +1001,6 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ
| mov WORK[dst], TMP1;
break;
}
- case MVM_OP_ctxcallerskipthunks: {
- MVMint16 dst = ins->operands[0].reg.orig;
- MVMint16 ctx = ins->operands[1].reg.orig;
- /* ctx = NULL */
- | xor RV, RV;
- | mov TMP5, aword WORK[ctx];
- /* check concrete instance of type or throw */
- | test_type_object TMP5;
- | jnz >1;
- | cmp_repr_id TMP5, TMP6, MVM_REPR_ID_MVMContext;
- | jne >1;
- /* Call function to create context. */
- | mov ARG1, TC
- | mov ARG2, TMP5
- | mov ARG3, MVM_CTX_TRAV_CALLER_SKIP_THUNKS
- | callp &MVM_context_apply_traversal;
- | mov WORK[dst], RV;
- | jmp >2;
- |1:
- | throw_adhoc "ctxcallerskipthunks needs an MVMContext";
- |2:
- break;
- }
case MVM_OP_curcode: {
MVMint16 dst = ins->operands[0].reg.orig;
| mov TMP1, TC->cur_frame;
+++ Preparing installation
Frame has no lexical with name '$?CLASS'
at gen/moar/stage2/NQPHLL.nqp:1528 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:SET_BLOCK_OUTER_CTX)
from gen/moar/Actions.nqp:1497 (/home/dan/Source/perl6/rakudo/blib/Perl6/Actions.moarvm:lang-version)
from gen/moar/Grammar.nqp:872 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:lang-version)
from gen/moar/Grammar.nqp:832 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:comp_unit)
from gen/moar/Grammar.nqp:553 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:TOP)
from gen/moar/stage2/QRegex.nqp:2267 (/home/dan/Source/perl6/install/share/nqp/lib/QRegex.moarvm:parse)
from gen/moar/stage2/NQPHLL.nqp:2295 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:parse)
from gen/moar/stage2/NQPHLL.nqp:2211 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:execute_stage)
from gen/moar/stage2/NQPHLL.nqp:2246 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:run)
from gen/moar/stage2/NQPHLL.nqp:2242 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:)
from gen/moar/stage2/NQPHLL.nqp:2238 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:compile)
from SETTING::src/core.c/ForeignCode.pm6:66 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:EVAL)
from SETTING::src/core.c/CompUnit/PrecompilationUnit.pm6:122 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/PrecompilationUnit.pm6:110 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:spec)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:168 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:165 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/Lock.pm6:30 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:protect)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:163 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:162 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:158 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:load-dependencies)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:271 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:270 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:load)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:59 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:try-load)
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:578 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:566 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:need)
from gen/moar/World.nqp:1475 (/home/dan/Source/perl6/rakudo/blib/Perl6/World.moarvm:load_module)
from gen/moar/World.nqp:1425 (/home/dan/Source/perl6/rakudo/blib/Perl6/World.moarvm:do_pragma_or_load_module)
from gen/moar/Grammar.nqp:1314 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statement_control:sym<use>)
from gen/moar/stage2/QRegex.nqp:1704 (/home/dan/Source/perl6/install/share/nqp/lib/QRegex.moarvm:!protoregex)
from <unknown>:1 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statement_control)
from gen/moar/Grammar.nqp:962 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statement)
from gen/moar/Grammar.nqp:890 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statementlist)
from gen/moar/stage2/NQPHLL.nqp:1465 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:LANG)
from gen/moar/Grammar.nqp:1342 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:FOREIGN_LANG)
from gen/moar/Grammar.nqp:838 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:comp_unit)
from gen/moar/Grammar.nqp:553 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:TOP)
from gen/moar/stage2/QRegex.nqp:2267 (/home/dan/Source/perl6/install/share/nqp/lib/QRegex.moarvm:parse)
from gen/moar/stage2/NQPHLL.nqp:2295 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:parse)
from gen/moar/stage2/NQPHLL.nqp:2211 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:execute_stage)
from gen/moar/stage2/NQPHLL.nqp:2246 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:run)
from gen/moar/stage2/NQPHLL.nqp:2242 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:)
from gen/moar/stage2/NQPHLL.nqp:2238 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:compile)
from gen/moar/stage2/NQPHLL.nqp:1913 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:eval)
from gen/moar/stage2/NQPHLL.nqp:2148 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:evalfiles)
from gen/moar/stage2/NQPHLL.nqp:2108 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_eval)
from gen/moar/Compiler.nqp:111 (/home/dan/Source/perl6/rakudo/blib/Perl6/Compiler.moarvm:command_eval)
from gen/moar/stage2/NQPHLL.nqp:2033 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_line)
from gen/moar/rakudo.nqp:127 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:MAIN)
from gen/moar/rakudo.nqp:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<mainline>)
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<main>)
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<entry>)
at SETTING::src/core.c/Exception.pm6:62 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:throw)
from SETTING::src/core.c/control.pm6:255 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:die)
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:456 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:precompile)
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:301 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:291 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:274 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:)
from SETTING::src/core.c/Lock.pm6:30 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:protect)
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:177 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:install)
from /home/dan/Source/perl6/rakudo/tools/build/install-core-dist.raku:46 (<ephemeral file>:<unit>)
from /home/dan/Source/perl6/rakudo/tools/build/install-core-dist.raku:1 (<ephemeral file>:<unit-outer>)
from gen/moar/stage2/NQPHLL.nqp:1943 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:eval)
from gen/moar/stage2/NQPHLL.nqp:2148 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:evalfiles)
from gen/moar/stage2/NQPHLL.nqp:2108 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_eval)
from gen/moar/Compiler.nqp:111 (/home/dan/Source/perl6/rakudo/blib/Perl6/Compiler.moarvm:command_eval)
from gen/moar/stage2/NQPHLL.nqp:2033 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_line)
from gen/moar/rakudo.nqp:127 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:MAIN)
from gen/moar/rakudo.nqp:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<mainline>)
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<main>)
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<entry>)
make: *** [Makefile:1265: m-install-post] Error 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment