diff --git a/src/emu/sigill_hook.c b/src/emu/sigill_hook.c index cad5edc..dc5e81a 100644 --- a/src/emu/sigill_hook.c +++ b/src/emu/sigill_hook.c @@ -51,13 +51,18 @@ void sigill_handler(int sig, siginfo_t *info, void *context) { // 获取当前触发异常的指令地址 #if defined(__loongarch__) + unsigned long pc_val = ucontext->uc_mcontext.__pc; + unsigned int instr = *(unsigned int *)pc_val; + + if ((instr & 0x48000300) == 0x48000300) { + //重新执行jiscr1 + return; + } + if (lasx_emu_create_interpret_fragment(ucontext)) { return; } if (lasx_emu_create_interpret_block(ucontext)) { return; } - unsigned long pc_val = ucontext->uc_mcontext.__pc; - unsigned int instr = *(unsigned int *)pc_val; - if(lasx_emu_create_interpret(ucontext, instr)) { return; } diff --git a/src/interpret/lasx_interpret.c b/src/interpret/lasx_interpret.c index 9bfef84..8069f65 100644 --- a/src/interpret/lasx_interpret.c +++ b/src/interpret/lasx_interpret.c @@ -130,7 +130,7 @@ extern int lasx_interpret_mode; bool lasx_emu_create_interpret_block(ucontext_t *uc) { - if (interpreter == NULL) return false; + if (interpreter == NULL || !lasx_interpret_mode) return false; interpret_lock();