Ticket #353: tt353-jit-i386-set_i_n.patch

File tt353-jit-i386-set_i_n.patch, 3.8 KB (added by rurban, 13 years ago)

after tt352-jit-i386-ld.patch. makes it compile again but does not fix rounding

  • src/jit/i386/core.jit

    old new  
    103103 
    104104; These are wrong: first does rounding, but we should truncate 
    105105; TODO: [5487]: JIT/i386 set_i_n did round. Test t/op/jitn.t  
    106 ;Parrot_set_i_n { 
    107 ;    if (MAP[2]) { 
    108 ;        jit_emit_mov_MR_in(interp, NATIVECODE, ROFFS_INT(1), MAP[2]); 
    109 ;    } 
    110 ;    else { 
    111 ;        jit_emit_mov_RM_n(interp, NATIVECODE, FSR1, ROFFS_NUM(2)); 
    112 ;        jit_emit_mov_MR_in(interp, NATIVECODE, ROFFS_INT(1), FSR1); 
    113 ;    } 
    114 ;    if (MAP[1]) { 
    115 ;        jit_emit_mov_RM_i(interp, NATIVECODE, MAP[1], ROFFS_INT(1)); 
    116 ;    } 
    117 ;} 
    118 ; 
    119 ;Parrot_set_i_nc { 
    120 ;    jit_emit_mov_ri_n(interp, NATIVECODE, FSR1, &NUM_CONST[2]); 
    121 ;    jit_emit_mov_MR_in(NATIVECODE, ROFFS_INT(1), FSR1); 
    122 ;    if (MAP[1]) { 
    123 ;        jit_emit_mov_RM_i(interp, NATIVECODE, MAP[1], ROFFS_INT(1)); 
    124 ;    } 
    125 ;} 
     106Parrot_set_i_n { 
     107    if (MAP[2]) { 
     108        jit_emit_mov_MR_in(interp, NATIVECODE, ROFFS_INT(1), MAP[2]); 
     109    } 
     110    else { 
     111        jit_emit_mov_RM_n(interp, NATIVECODE, FSR1, ROFFS_NUM(2)); 
     112        jit_emit_mov_MR_in(interp, NATIVECODE, ROFFS_INT(1), FSR1); 
     113    } 
     114    if (MAP[1]) { 
     115        jit_emit_mov_RM_i(interp, NATIVECODE, MAP[1], ROFFS_INT(1)); 
     116    } 
     117} 
     118 
     119Parrot_set_i_nc { 
     120    jit_emit_mov_ri_n(interp, NATIVECODE, FSR1, &NUM_CONST[2]); 
     121    jit_emit_mov_MR_in(interp, NATIVECODE, ROFFS_INT(1), FSR1); 
     122    if (MAP[1]) { 
     123        jit_emit_mov_RM_i(interp, NATIVECODE, MAP[1], ROFFS_INT(1)); 
     124    } 
     125} 
    126126 
    127127; -- null op. 
    128128TEMPLATE Parrot_null_x { 
  • src/jit/i386/jit_emit.h

    old new  
    737737      emitm_fildl((interp), (pc), emit_None, emit_None, emit_None, (address)) 
    738738#  define jit_emit_fload_mb_i(interp, pc, offs) \ 
    739739      emitm_fildl((interp), (pc), emit_EBX, emit_None, 1, (offs)) 
    740 #  define jit_emit_fstore_m_i(pc, m) \ 
    741       emitm_fistpl((pc), emit_None, emit_None, emit_None, (m)) 
     740#  define jit_emit_fstore_m_i(interp, pc, m) \ 
     741      emitm_fistpl((interp), (pc), emit_None, emit_None, emit_None, (m)) 
     742#  define jit_emit_fst_m_i(interp, pc, base, offs) \ 
     743      emitm_fstl((interp), (pc), (base), emit_None, 1, (offs)) 
    742744 
    743745#else /* INTVAL_SIZE = 8 */ 
    744746 
     
    746748      emitm_fildll((interp), (pc), emit_None, emit_None, emit_None, (address)) 
    747749#  define jit_emit_fload_mb_i(interp, pc, offs) \ 
    748750      emitm_fildll((interp), (pc), emit_EBX, emit_None, 1, (offs)) 
    749 #  define jit_emit_fstore_m_i(pc, m) \ 
    750       emitm_fistpll((pc), emit_None, emit_None, emit_None, (m)) 
     751#  define jit_emit_fstore_m_i(interp, pc, m) \ 
     752      emitm_fistpll((interp), (pc), emit_None, emit_None, emit_None, (m)) 
     753#  define jit_emit_fst_m_i(interp, pc, base, offs) \ 
     754      emitm_fstll((interp), (pc), (base), emit_None, 1, (offs)) 
    751755 
    752756#endif /* INTVAL_SIZE */ 
    753757 
     
    12151219/* INT_REG <= ST(i) */ 
    12161220/* TODO: unused. jit_emit_mov_MR_in is used instead. 
    12171221   TODO: rounding => trunc */ 
    1218 #  define jit_emit_mov_mr_in(pc, mem, r) { \ 
     1222#  define jit_emit_mov_mr_in(interp, pc, mem, r) { \ 
    12191223    emitm_fld((pc), (r)); \ 
    1220     jit_emit_fstore_m_i((pc), (mem)); \ 
     1224    jit_emit_fstore_m_i((interp), (pc), (mem)); \ 
    12211225} 
    12221226 
    12231227/* TODO: rounding => trunc */ 
    12241228#  define jit_emit_mov_MR_in(interp, pc, mem, r) {       \ 
    12251229    if (r) { \ 
    12261230        emitm_fld((pc), (r)); \ 
    1227         jit_emit_fstore_m_i((pc), (mem)); \ 
     1231        jit_emit_fstore_m_i((interp), (pc), (mem)); \ 
    12281232    } \ 
    12291233    else { \ 
    1230         jit_emit_fst_m_i((interp), (pc), emit_EBX, (d)); \ 
     1234        jit_emit_fst_m_i((interp), (pc), emit_EBX, (mem)); \ 
    12311235    } \ 
    12321236} 
    12331237