@@ -512,57 +512,75 @@ compile_int_div_no_check(JitCompContext *cc, IntArithmetic arith_op,
512512 case INT_DIV_S :
513513 case INT_DIV_U :
514514 {
515- JitInsn * insn = NULL ;
515+ JitInsn * insn = NULL , * insn1 = NULL ;
516516
517517 if (is_i32 ) {
518518 GEN_INSN (MOV , eax_hreg , left );
519519 if (arith_op == INT_DIV_S )
520520 insn = GEN_INSN (DIV_S , eax_hreg , eax_hreg , right );
521521 else
522522 insn = GEN_INSN (DIV_U , eax_hreg , eax_hreg , right );
523-
524- res = eax_hreg ;
525523 }
526524 else {
527525 GEN_INSN (MOV , rax_hreg , left );
528526 if (arith_op == INT_DIV_S )
529527 insn = GEN_INSN (DIV_S , rax_hreg , rax_hreg , right );
530528 else
531529 insn = GEN_INSN (DIV_U , rax_hreg , rax_hreg , right );
532-
533- res = rax_hreg ;
534530 }
535531
536532 jit_lock_reg_in_insn (cc , insn , eax_hreg );
537533 jit_lock_reg_in_insn (cc , insn , edx_hreg );
534+
535+ if (is_i32 ) {
536+ res = jit_cc_new_reg_I32 (cc );
537+ insn1 = jit_insn_new_MOV (res , eax_hreg );
538+ }
539+ else {
540+ res = jit_cc_new_reg_I64 (cc );
541+ insn1 = jit_insn_new_MOV (res , rax_hreg );
542+ }
543+
544+ if (insn && insn1 ) {
545+ jit_insn_insert_after (insn , insn1 );
546+ }
538547 break ;
539548 }
540549 case INT_REM_S :
541550 case INT_REM_U :
542551 {
543- JitInsn * insn = NULL ;
552+ JitInsn * insn = NULL , * insn1 = NULL ;
544553
545554 if (is_i32 ) {
546555 GEN_INSN (MOV , eax_hreg , left );
547556 if (arith_op == INT_REM_S )
548557 insn = GEN_INSN (REM_S , edx_hreg , eax_hreg , right );
549558 else
550559 insn = GEN_INSN (REM_U , edx_hreg , eax_hreg , right );
551-
552- res = edx_hreg ;
553560 }
554561 else {
555562 GEN_INSN (MOV , rax_hreg , left );
556563 if (arith_op == INT_REM_S )
557564 insn = GEN_INSN (REM_S , rdx_hreg , rax_hreg , right );
558565 else
559566 insn = GEN_INSN (REM_U , rdx_hreg , rax_hreg , right );
560-
561- res = rdx_hreg ;
562567 }
563568
564569 jit_lock_reg_in_insn (cc , insn , eax_hreg );
565570 jit_lock_reg_in_insn (cc , insn , edx_hreg );
571+
572+ if (is_i32 ) {
573+ res = jit_cc_new_reg_I32 (cc );
574+ insn1 = jit_insn_new_MOV (res , edx_hreg );
575+ }
576+ else {
577+ res = jit_cc_new_reg_I64 (cc );
578+ insn1 = jit_insn_new_MOV (res , rdx_hreg );
579+ }
580+
581+ if (insn && insn1 ) {
582+ jit_insn_insert_after (insn , insn1 );
583+ }
566584 break ;
567585 }
568586#else
0 commit comments